44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
from flask import session, flash
|
|
from .models import Sessions, Users
|
|
from argon2 import PasswordHasher
|
|
import secrets
|
|
import time
|
|
|
|
ph = PasswordHasher()
|
|
|
|
def digest(password):
|
|
return ph.hash(password)
|
|
|
|
def verify(expected, given):
|
|
try:
|
|
return ph.verify(expected, given)
|
|
except:
|
|
return False
|
|
|
|
def is_logged_in():
|
|
if 'pyrom_session_key' not in session:
|
|
return False
|
|
sess = Sessions.find({'key': session['pyrom_session_key']})
|
|
if not sess:
|
|
return False
|
|
if sess.expires_at < int(time.time()):
|
|
session.clear()
|
|
sess.delete()
|
|
# flash('Your session expired.;Please log in again.', InfoboxKind.INFO)
|
|
return False
|
|
return True
|
|
|
|
def get_active_user():
|
|
if not is_logged_in():
|
|
return None
|
|
|
|
sess = Sessions.find({'key': session['pyrom_session_key']})
|
|
return Users.find({'id': sess.user_id})
|
|
|
|
def create_session(user_id):
|
|
return Sessions.create({
|
|
'key': secrets.token_hex(16),
|
|
'user_id': user_id,
|
|
'expires_at': int(time.time()) + (31 * 24 * 60 * 60),
|
|
})
|