-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuser.py
56 lines (45 loc) · 1.43 KB
/
user.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from flask import session, redirect, url_for
from functools import wraps
# get user from session
def getUser():
if 'username' in session:
print(session)
return {
'username': session['username'],
'firstname': session['firstname'],
'lastname': session['lastname'],
'email': session['email']
}
else:
return None
# set user to session
def setUser(user, type):
session['username'] = user['username']
session['firstname'] = user['firstname']
session['lastname'] = user['lastname']
session['email'] = user['email']
session['type'] = type
# decorator to protect authenticated routes
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if not getUser():
return redirect(url_for('login'))
else:
user = getUser()
if session['type'] == 'admin':
return redirect(url_for('login'))
return f(user, *args, **kwargs)
return decorated_function
# decorator to protect admin routes
def admin_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if not getUser():
return redirect(url_for('adminlogin'))
else:
user = getUser()
if session['type'] != 'admin':
return redirect(url_for('adminlogin'))
return f(user, *args, **kwargs)
return decorated_function