1
0
Fork 0
mirror of https://github.com/dancojocaru2000/foxbank.git synced 2025-04-21 02:33:54 +03:00
foxbank/server/login.py

48 lines
1.1 KiB
Python
Raw Normal View History

2021-12-06 01:34:00 +02:00
from functools import wraps
from flask import Blueprint, request
from pyotp import TOTP
import db_utils
from decorators import no_content, ensure_logged_in, user_id, token
2021-12-06 01:34:00 +02:00
import models
import ram_db
import returns
login = Blueprint('login', __name__)
@login.post('/')
def make_login():
try:
username = request.json['username']
code = request.json['code']
except (TypeError, KeyError):
return returns.INVALID_REQUEST
user: models.User | None = db_utils.get_user(username=username)
if user is None:
return returns.INVALID_DETAILS
otp = TOTP(user.otp)
if not otp.verify(code, valid_window=1):
return returns.INVALID_DETAILS
token = ram_db.login_user(user.id)
return returns.success(token=token)
2021-12-06 02:04:13 +02:00
@login.post('/logout')
@ensure_logged_in
2021-12-06 02:04:13 +02:00
@no_content
def logout():
2021-12-06 02:04:13 +02:00
ram_db.logout_user(token)
2021-12-06 01:34:00 +02:00
@login.get('/whoami')
@ensure_logged_in
def whoami():
2021-12-06 01:34:00 +02:00
user: models.User | None = db_utils.get_user(user_id=user_id)
if user is not None:
user = user.to_json()
return returns.successs(user=user)