flask-home-vod/server/flask/application/backend/token_generator_util.py
2023-02-02 01:47:38 +02:00

47 lines
No EOL
1.7 KiB
Python

from secrets import token_urlsafe
from flask import current_app
import time
import pyotp
from .data.data_models import Session
def _get_byte_count():
return current_app.config.get('SECRECT_BYTE_COUNT') or 64
def _get_access_expires_in():
return current_app.config.get('SESSION_ACCESS_EXPIRATION_IN_SECONDS') or 86400
def _get_refresh_expires_in():
return current_app.config.get('SESSION_REFRESH_EXPIRATION_IN_SECONDS') or 2*86400
def _get_reset_password_expires_in():
return current_app.config.get('RESET_PASSWORD_EXPIRATION_IN_SECONDS') or 2*86400
def generate_session(user_id, byte_count = None, access_expires_in = None, refresh_expires_in = None):
byte_count = byte_count or _get_byte_count()
access_expires_in = access_expires_in or _get_access_expires_in()
refresh_expires_in = refresh_expires_in or _get_refresh_expires_in()
current_time = time.time()
return Session(
user_id = user_id,
access_token = token_urlsafe(byte_count),
refresh_token = token_urlsafe(byte_count),
access_expires_at = access_expires_in + current_time,
refresh_expires_at = refresh_expires_in + current_time,
)
def generate_reset_password_expires_at(reset_password_expires_in = None):
current_time = time.time()
reset_password_expires_in = reset_password_expires_in or _get_reset_password_expires_in()
return reset_password_expires_in + current_time
def generate_otp_secret():
return pyotp.random_base32()
def verify_otp(secret, otp_code):
totp = pyotp.TOTP(secret)
timestampNow = time.time()
return totp.verify(otp_code, time.time(), 2)
def get_url(secret, username):
return pyotp.totp.TOTP(secret).provisioning_uri(name=username,issuer_name='FnivesVOD')