-
Notifications
You must be signed in to change notification settings - Fork 0
/
user.py
123 lines (104 loc) · 4.3 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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
from flask import render_template, request, redirect, url_for, flash, Blueprint
from config import app, db, auth, red
from student_record import StudentRecord
import sse
user = Blueprint('user', __name__, url_prefix='/user', template_folder='templates/user')
# ----------------------------------------------------------------------------
@user.before_app_first_request
def init_user_table():
auth.User.create_table(fail_silently=True)
if auth.User.select().count() == 0:
admin = auth.User(username='Teacher',email='admin@localhost')
admin.active = True
admin.admin = True
admin.role = 'teacher'
admin.set_password('password')
admin.save()
# ----------------------------------------------------------------------------
def logout_and_cleanup(uid=None, next_url=None, logout=False):
online_students = StudentRecord.online_students()
if uid is None:
user = auth.get_logged_in_user()
auth.logout_user(user)
else:
user = auth.User.get(auth.User.id == uid)
auth.logout_user(user, self_logout=False)
user_record = StudentRecord(user.id)
user_record.open_board = False
user_record.online = False
user_record.save()
listening_clients = sse.listening_clients(user.id)
# Turn off menu/tabs of all listeners and tell them to go home
mesg = {}
for cid in online_students:
mesg[cid] = dict(cid=user.id)
if cid in listening_clients or cid==user.id:
mesg[cid].update(home_cid = cid)
sse.listen_to(cid, cid)
sse.notify(mesg, event="log-out")
sse.close(user_record.id, logout)
return redirect( next_url or url_for('index') )
# ----------------------------------------------------------------------------
@user.route('/logout')
@auth.login_required
def logout():
return logout_and_cleanup(logout=True)
# ----------------------------------------------------------------------------
@user.route('/logout_user/<int:uid>')
@auth.role_required('teacher')
def logout_user(uid):
user = auth.get_logged_in_user()
if user.id == uid:
return logout_and_cleanup()
else:
return logout_and_cleanup(uid, url_for('user.online'))
# ----------------------------------------------------------------------------
@user.route('/online')
@auth.role_required('teacher')
def online():
students = StudentRecord.online_students()
return render_template('user/online.html', students=students)
# ----------------------------------------------------------------------------
@user.route('/list', methods=['GET','POST'])
@auth.role_required('teacher')
def list():
cur_user = auth.get_logged_in_user()
if request.method == 'POST':
user = auth.User(username=request.form['username'])
user.email = request.form['username'] + '@memphis.edu'
user.set_password(request.form['username'])
user.active = True
user.role = 'student'
user.save()
flash('user %d created' % user.id)
return redirect(url_for('user.list'))
return render_template('user/list.html', users=auth.User.select())
# ----------------------------------------------------------------------------
@user.route('/edit', methods=['GET','POST'])
@user.route('/edit/<int:uid>', methods=['GET','POST'])
@auth.login_required
def edit(uid=None):
cur_user = auth.get_logged_in_user()
uid = cur_user.id if uid is None else uid
if cur_user.role!='teacher' and cur_user.id!=uid:
return redirect(url_for('auth.permission_denied'))
user = cur_user if cur_user.id==uid else auth.User.get(auth.User.id==uid)
if request.method == 'POST':
if 'delete' in request.form:
user.delete_instance()
flash('User %s is deleted' % user.username)
return redirect(url_for('user.list'))
else:
if 'username' in request.form:
user.username = request.form['username']
user.active = 'active' in request.form
user.email = request.form['email']
user.role = request.form['role']
if request.form['new_password']:
user.set_password(request.form['new_password'])
user.save()
flash('Information updated')
if cur_user.role == 'teacher':
return redirect(url_for('user.list'))
return render_template('user/edit.html', cur_user=cur_user, user=user)
# ----------------------------------------------------------------------------