2021-04-01 12:08:42 +00:00
|
|
|
from random import choice
|
2021-06-02 21:43:41 +00:00
|
|
|
from string import ascii_letters, digits
|
|
|
|
|
2021-07-30 22:12:37 +00:00
|
|
|
from flask import flash, url_for
|
|
|
|
from flask_admin.menu import MenuLink
|
2021-06-02 21:43:41 +00:00
|
|
|
from flask_security import current_user
|
2021-04-26 19:31:15 +00:00
|
|
|
|
2021-07-30 22:12:37 +00:00
|
|
|
from advlabdb import app, db
|
2021-06-02 21:43:41 +00:00
|
|
|
from advlabdb.models import Semester
|
2021-03-19 12:41:52 +00:00
|
|
|
|
2021-05-17 20:36:24 +00:00
|
|
|
|
2021-03-31 23:04:21 +00:00
|
|
|
def randomPassword():
|
2021-06-02 21:43:41 +00:00
|
|
|
return "".join(choice(ascii_letters + digits) for i in range(12))
|
2021-04-01 12:08:42 +00:00
|
|
|
|
|
|
|
|
2022-02-23 19:36:29 +00:00
|
|
|
def flashRandomPassword(password):
|
|
|
|
flash(f"Random password: {password}", category="warning")
|
|
|
|
|
|
|
|
|
2022-04-12 13:00:12 +00:00
|
|
|
def sortedSemestersStartingWithNewest():
|
|
|
|
return Semester.query.order_by(Semester.year.desc()).order_by(Semester.label.desc())
|
|
|
|
|
|
|
|
|
2021-05-17 14:55:04 +00:00
|
|
|
def userActiveSemester(flashWarning=False):
|
2022-04-12 13:00:12 +00:00
|
|
|
lastSemesterId = sortedSemestersStartingWithNewest().first().id # "WS" > "SS"
|
2021-04-26 19:31:15 +00:00
|
|
|
if current_user.active_semester_id is None:
|
|
|
|
current_user.active_semester_id = lastSemesterId
|
2021-04-27 13:50:03 +00:00
|
|
|
db.session.commit()
|
2021-04-26 19:31:15 +00:00
|
|
|
elif current_user.active_semester_id != lastSemesterId:
|
|
|
|
activeSemester = Semester.query.get(current_user.active_semester_id)
|
|
|
|
if activeSemester:
|
2021-05-17 14:55:04 +00:00
|
|
|
if flashWarning:
|
2021-07-14 02:25:34 +00:00
|
|
|
flash(f"You are in the old semester {activeSemester.repr()}!", "warning")
|
2021-04-26 19:31:15 +00:00
|
|
|
else:
|
|
|
|
current_user.active_semester_id = lastSemesterId
|
2021-04-27 13:50:03 +00:00
|
|
|
db.session.commit()
|
|
|
|
flash("Semester changed!", "warning")
|
|
|
|
|
2021-07-14 02:25:34 +00:00
|
|
|
return Semester.query.get(current_user.active_semester_id)
|
2021-05-18 12:54:30 +00:00
|
|
|
|
|
|
|
|
2021-06-25 23:59:21 +00:00
|
|
|
def setUserActiveSemester(semesterId):
|
2021-07-11 11:48:13 +00:00
|
|
|
if current_user.active_semester_id != semesterId:
|
2021-07-14 02:25:34 +00:00
|
|
|
semester = Semester.query.get(semesterId)
|
|
|
|
if semester:
|
2021-07-11 11:48:13 +00:00
|
|
|
try:
|
|
|
|
current_user.active_semester_id = semesterId
|
|
|
|
db.session.commit()
|
|
|
|
except Exception as ex:
|
|
|
|
flash(str(ex), "error")
|
|
|
|
|
|
|
|
db.session.rollback()
|
|
|
|
else:
|
2021-07-14 02:25:34 +00:00
|
|
|
flash(f"Active semester changed to {semester.repr()}!", "warning")
|
2021-07-11 11:48:13 +00:00
|
|
|
else:
|
|
|
|
flash(f"No semester with ID {semesterId}!", "error")
|
2021-07-30 22:12:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
def initActiveSemesterMenuLinks(space):
|
|
|
|
with app.app_context():
|
2022-03-02 00:56:42 +00:00
|
|
|
semesters = Semester.query.order_by(Semester.id.desc())
|
2021-07-30 22:12:37 +00:00
|
|
|
for semester in semesters:
|
|
|
|
space.add_link(
|
|
|
|
MenuLink(
|
|
|
|
name=semester.repr(),
|
|
|
|
url=url_for("set_semester") + "?semester_id=" + str(semester.id),
|
|
|
|
category="Active semester",
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
space.add_link(MenuLink(name="Logout", url=url_for("security.logout")))
|
2021-11-30 00:36:19 +00:00
|
|
|
|
|
|
|
|
|
|
|
def reportBadAttempt(message):
|
|
|
|
print("BAD ATTEMPT:", message) # TODO: Log
|