60 lines
1.4 KiB
Python
60 lines
1.4 KiB
Python
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)
|