61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
from flask import Blueprint, redirect, url_for, request, flash, session
|
|
from flaskapp.lib.login import check_is_logged_in
|
|
from flaskapp.lib.toornament import get_toornament
|
|
from flaskapp.config import secret
|
|
import secrets
|
|
import urllib.parse
|
|
|
|
bp = Blueprint('login', __name__)
|
|
|
|
|
|
@bp.route('/login')
|
|
def login():
|
|
# if the user is logged in, redirect him to the next-URL or to the index page
|
|
if request.args.get('next'):
|
|
session['next_url'] = request.args.get('next')
|
|
if check_is_logged_in():
|
|
if request.args.get('next'):
|
|
return redirect(request.args.get('next'))
|
|
return redirect(url_for('index.index'))
|
|
state = secrets.token_hex(32)
|
|
session['state'] = state
|
|
params = {
|
|
'response_type': 'code',
|
|
'client_id': secret['oauth_client_id'],
|
|
'redirect_uri': secret['oauth_redirect_uri'],
|
|
'state': state,
|
|
'scope': 'user:info participant:manage_participations'
|
|
}
|
|
url = urllib.parse.urlencode(params)
|
|
url = 'https://account.toornament.com/oauth2/authorize?' + url
|
|
return redirect(url)
|
|
|
|
|
|
@bp.route('/oauth/toornament')
|
|
def oauth_callback():
|
|
state = request.args.get('state')
|
|
if state != session.get('state'):
|
|
flash('Login fehlgeschlagen! - Ungültiger OAuth2 State!', 'danger')
|
|
return redirect(url_for('index.index'))
|
|
code = request.args.get('code')
|
|
if not code:
|
|
flash('Login fehlgeschlagen!')
|
|
return redirect(url_for('index.index'))
|
|
toornament = get_toornament(code)
|
|
user_data = toornament.get_user_data()
|
|
session['is_logged_in'] = True
|
|
session['username'] = user_data['name']
|
|
session['user_id'] = user_data['id']
|
|
next_url = session.get('next_url')
|
|
if next_url:
|
|
session.pop('next_url')
|
|
return redirect(next_url)
|
|
return redirect(url_for('index.index'))
|
|
|
|
|
|
@bp.route('/logout')
|
|
def logout():
|
|
session.clear()
|
|
flash('Logout erfolgreich!', 'success')
|
|
return redirect(url_for('index.index'))
|