Authentication redirect sends user to a makeshift homepage json output as a placeholder.
This commit is contained in:
parent
83248bab22
commit
ba3fc595c7
54
app/app.py
54
app/app.py
@ -1,6 +1,7 @@
|
|||||||
from flask import Flask, render_template, url_for, redirect, request
|
from urllib.parse import urlparse
|
||||||
from authlib.integrations.flask_client import OAuth
|
|
||||||
from secrets import token_urlsafe
|
from secrets import token_urlsafe
|
||||||
|
from flask import Flask, render_template, url_for, redirect, request, make_response, session
|
||||||
|
from authlib.integrations.flask_client import OAuth
|
||||||
from requests import post
|
from requests import post
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
@ -8,6 +9,7 @@ app = Flask(__name__)
|
|||||||
SECRET_KEY = token_urlsafe(32)
|
SECRET_KEY = token_urlsafe(32)
|
||||||
app.secret_key = SECRET_KEY
|
app.secret_key = SECRET_KEY
|
||||||
|
|
||||||
|
cache = OAuthCache()
|
||||||
oauth = OAuth(app)
|
oauth = OAuth(app)
|
||||||
|
|
||||||
gotosocial = oauth.register(
|
gotosocial = oauth.register(
|
||||||
@ -31,40 +33,60 @@ def index():
|
|||||||
@app.route('/set_domain', methods=['POST'])
|
@app.route('/set_domain', methods=['POST'])
|
||||||
def set_domain():
|
def set_domain():
|
||||||
if(request.method == 'POST'):
|
if(request.method == 'POST'):
|
||||||
|
try:
|
||||||
|
domain_parse = urlparse(request.form["domain"])
|
||||||
|
if(domain_parse):
|
||||||
|
if(domain_parse.scheme):
|
||||||
|
domain = domain.geturl()
|
||||||
|
else:
|
||||||
|
domain = f'https://{domain_parse.geturl()}'
|
||||||
payload = {
|
payload = {
|
||||||
'client_name':'gotosocial-fe',
|
'client_name':'gotosocial-fe',
|
||||||
'redirect_uris':url_for('index', _external=True)
|
'redirect_uris':url_for('index', _external=True)
|
||||||
}
|
}
|
||||||
response = post(f'https://{request.form["domain"]}/api/v1/apps', data=payload)
|
response = post(f'{domain}/api/v1/apps', data=payload)
|
||||||
client_data = response.json()
|
client_data = response.json()
|
||||||
gotosocial.client_id = client_data['client_id']
|
oauth.gotosocial.client_id = client_data['client_id']
|
||||||
gotosocial.client_secret = client_data['client_secret']
|
oauth.gotosocial.client_secret = client_data['client_secret']
|
||||||
gotosocial.access_token_params = {
|
oauth.gotosocial.access_token_params = {
|
||||||
'response_type':'token',
|
'response_type':'token',
|
||||||
'grant_type':'authorization_code',
|
'grant_type':'authorization_code',
|
||||||
'client_id':client_data['client_id'],
|
'client_id':client_data['client_id'],
|
||||||
'client_secret':client_data['client_secret']
|
'client_secret':client_data['client_secret']
|
||||||
}
|
}
|
||||||
gotosocial.access_token_url = f'https://{request.form["domain"]}{gotosocial.access_token_url}'
|
oauth.gotosocial.access_token_url = f'{domain}{oauth.gotosocial.access_token_url}'
|
||||||
gotosocial.authorize_url = f'https://{request.form["domain"]}{gotosocial.authorize_url}'
|
oauth.gotosocial.authorize_url = f'{domain}{oauth.gotosocial.authorize_url}'
|
||||||
gotosocial.api_base_url = f'https://{request.form["domain"]}{gotosocial.api_base_url}'
|
oauth.gotosocial.api_base_url = f'{domain}{oauth.gotosocial.api_base_url}'
|
||||||
return redirect('/login')
|
return redirect('/login')
|
||||||
|
else:
|
||||||
|
return "Did you even submit anything?"
|
||||||
|
except:
|
||||||
|
return "Are you sure you're putting in a GoToSocial instance url?"
|
||||||
else:
|
else:
|
||||||
return "Sorry, but you can't get *GET* /set_domain, hun."
|
return "Sorry, but you can't get *GET* /set_domain, hun."
|
||||||
|
|
||||||
@app.route('/login')
|
@app.route('/login')
|
||||||
def login():
|
def login():
|
||||||
redirect_uri = url_for('authorize', _external=True)
|
redirect_uri = url_for('authorize', _external=True)
|
||||||
return gotosocial.authorize_redirect(redirect_uri)
|
return oauth.gotosocial.authorize_redirect(redirect_uri)
|
||||||
|
|
||||||
|
|
||||||
@app.route('/authorize')
|
@app.route('/authorize')
|
||||||
def authorize():
|
def authorize():
|
||||||
token = gotosocial.authorize_access_token()
|
token = oauth.gotosocial.authorize_access_token()
|
||||||
print(token)
|
session['oauth_token'] = token
|
||||||
response = gotosocial.get(
|
response = oauth.gotosocial.get(
|
||||||
'api/v1/accounts/verify_credentials', token=token)
|
'api/v1/accounts/verify_credentials')
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
account_info = response.json()
|
return redirect(url_for('home', _external=True))
|
||||||
return account_info
|
|
||||||
|
|
||||||
|
@app.route('/home')
|
||||||
|
def home():
|
||||||
|
# If we're here, assume that we already authenticated for now.
|
||||||
|
token = session['oauth_token']
|
||||||
|
# TODO: Long-term shoukd make sure we store the token in localStorage and try to retrieve it there first.
|
||||||
|
response = oauth.gotosocial.get(
|
||||||
|
'api/v1/timelines/home', token=token)
|
||||||
|
response.raise_for_status()
|
||||||
|
home_timeline = response.json()
|
||||||
|
return home_timeline # render_template('index.html')
|
||||||
|
9
app/templates/home/index.html
Executable file
9
app/templates/home/index.html
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -7,8 +7,8 @@ services:
|
|||||||
build: .
|
build: .
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/var/www/app
|
- ./app:/var/www/app
|
||||||
#environment:
|
environment:
|
||||||
# -
|
- PYTHONUNBUFFERED=1
|
||||||
ports:
|
ports:
|
||||||
- 5000:5000
|
- 5000:5000
|
||||||
command: 'sh -c "cd app && flask run --host=0.0.0.0"'
|
command: 'sh -c "cd app && flask run --host=0.0.0.0"'
|
||||||
|
Loading…
Reference in New Issue
Block a user