from pathlib import Path from sys import stderr from flask import (Flask, redirect, url_for, request, send_file, make_response, abort, render_template, g) from roc_fnb.website.database import Database from roc_fnb.website.models.user import User db = Database.from_env() app = Flask( import_name=__name__.split('.')[0], static_url_path='/', template_folder=Path(__file__).absolute().parent / 'templates', static_folder=Path(__file__).absolute().parent / 'static', ) @app.before_request def decode_user(): if token := request.cookies.get('auth-token'): g.user = User.verify_jwt(token) @app.route('/ig') def ig_redir(): return redirect('https://instagram.com/RocFNB') @app.route('/donate') def donate_redir(): return redirect('https://venmo.com/RocFoodNotBombs') @app.route('/') def index(): return redirect('/index.html') @app.post('/login') def submit_login(): form = request.json user = db.get_user_by_name(form['name']) if not user.check_password(form['password']): abort(401) # unauthorized response = make_response(redirect('/me')) response.set_cookie('auth-token', user.jwt) return response @app.get('/login') def render_login_page(): return render_template('login.html') @app.get('/me') def get_profile(): if g.user is not None: return render_template('profile.html', user=g.user) abort(401)