diff --git a/app/main.py b/app/main.py index b552e2b..ee974f3 100644 --- a/app/main.py +++ b/app/main.py @@ -1,5 +1,5 @@ import os -from flask import Flask, render_template, request, redirect, abort +from flask import Flask, render_template, request, redirect, abort, url_for, session import requests from datetime import datetime @@ -24,6 +24,10 @@ def home(): if is_logged_in(): resp_json = requests.get(f'{database_url}/token/latest').json() access_token = resp_json['token']['access_token'] + + # set session token id + session['token_id'] = resp_json['token']['id'] + user_info = requests.get('https://api.github.com/user', headers={ 'Authorization': f'Bearer {access_token}' }).json() @@ -87,7 +91,27 @@ def oauth_redirect(): # Save tokens for later use save_tokens(tokens['access_token'], tokens['refresh_token'], tokens['expires_in']) - return redirect('/') + return redirect(url_for('home')) + +# logout +@app.route('/logout') +def logout(): + token_id = session.get('token_id') + + if not token_id: + return redirect(url_for('home')) + + # remove token_id from session + session.pop('token_id', None) + + response = requests.put(f'{database_url}/token/{token_id}', headers={ + 'Content-Type': 'application/json' + }, json={ + 'is_logged_in': False + }) + response.raise_for_status() + + return redirect(url_for('home')) def is_logged_in(): response = requests.get(f'{database_url}/token/latest') @@ -96,7 +120,7 @@ def is_logged_in(): return False elif response.status_code == 200: resp_json = response.json() - return resp_json['token']['expiration_seconds'] + resp_json['token']['timestamp'] > datetime.now().timestamp() + return resp_json['token']['is_logged_in'] or False return False def save_tokens(access_token, refresh_token, expiration_seconds): diff --git a/app/templates/success.html b/app/templates/success.html index 16207a4..63b06d5 100644 --- a/app/templates/success.html +++ b/app/templates/success.html @@ -7,5 +7,9 @@