236 lines
6.1 KiB
Python
236 lines
6.1 KiB
Python
from approot import login_manager
|
|
from auth.model import (
|
|
APP_ADMIN,
|
|
APP_DOZENT,
|
|
APP_USER,
|
|
SYS_ADMIN,
|
|
Application,
|
|
Role,
|
|
User,
|
|
applications,
|
|
roles,
|
|
users,
|
|
)
|
|
from flask import current_app as app
|
|
from flask import jsonify, request
|
|
from flask_login import login_required, login_user, logout_user
|
|
|
|
from .model.errors import ApplicationError, AutorisationError
|
|
|
|
print("auth-routes")
|
|
|
|
|
|
@login_manager.user_loader
|
|
def user_loader(userid):
|
|
user: User | None = User.query.filter(User.userid == userid).first()
|
|
return user
|
|
|
|
|
|
@app.post("/auth/checklogin")
|
|
def checklogin():
|
|
"""
|
|
Hier wird nur die Authentifizierung überprüft.
|
|
Evtl. Autorisierungen anhand der User-Rollen und App-Berechtigungen müssen später bei den
|
|
Funktionsaufrufen erfolgen
|
|
"""
|
|
data = request.json
|
|
user: User = users.check_login(data["userid"], data["password"])
|
|
if user is None:
|
|
error = ApplicationError(
|
|
"Login oder Kennwort stimmen nicht!",
|
|
"Anmeldung wurde verweigert",
|
|
htmlstatus=403,
|
|
)
|
|
return jsonify(error.error), error.htmlstatus
|
|
if not user.has_roles([SYS_ADMIN, APP_ADMIN, APP_USER, APP_DOZENT]):
|
|
error = ApplicationError(
|
|
"Sie haben nicht die passende Rolle zur Nutzung dieser Anwendung.",
|
|
"Der Zugang wird verweigert",
|
|
htmlstatus=403,
|
|
)
|
|
return jsonify(error.error), error.htmlstatus
|
|
login_user(user)
|
|
result = user.to_dict()
|
|
result["isSysAdmin"] = user.is_SysAdmin()
|
|
return jsonify(result), 200
|
|
|
|
|
|
@app.post("/auth/changepassword")
|
|
@login_required
|
|
def changepassword():
|
|
data = request.json
|
|
status = 200
|
|
result = {"Message": "", "Success": True}
|
|
try:
|
|
users.changepassword(
|
|
data["Userid"],
|
|
data["OldPassword"],
|
|
data["NewPassword1"],
|
|
data["NewPassword2"],
|
|
)
|
|
except Exception as ex:
|
|
error = ApplicationError(str(ex), htmlstatus=400)
|
|
return error.error, error.htmlstatus
|
|
|
|
return jsonify(result), status
|
|
|
|
|
|
@app.get("/auth/logout")
|
|
def logout():
|
|
logout_user()
|
|
return jsonify({"logout": True}), 200
|
|
|
|
|
|
@app.get("/auth/getusers")
|
|
@login_required
|
|
def getusers():
|
|
"""
|
|
Die Rückgabe wird in 'users.get_users()' (s.u.) anhand er App-Berechtigung und der
|
|
Rollen gefiltert.
|
|
"""
|
|
userquery = users.get_users()
|
|
result = []
|
|
user: User
|
|
for user in userquery:
|
|
result.append(user.to_relationaldict())
|
|
return jsonify(result), 200
|
|
|
|
|
|
@app.get("/auth/getapplications")
|
|
@login_required
|
|
def getapplications():
|
|
"""
|
|
Die Rückgabe wird in 'applications.get_applications()' (s.u.) anhand er App-Berechtigung und der
|
|
Rollen gefiltert.
|
|
"""
|
|
appquery = applications.get_applications()
|
|
result = []
|
|
app: Application
|
|
for app in appquery:
|
|
result.append(app.to_dict())
|
|
return jsonify(result), 200
|
|
|
|
|
|
@app.get("/auth/getroles")
|
|
@login_required
|
|
def getroles():
|
|
rolelist = roles.get_roles()
|
|
result = []
|
|
role: Role
|
|
for role in rolelist:
|
|
result.append(role.to_dict())
|
|
return jsonify(result), 200
|
|
|
|
|
|
@app.post("/auth/updaterole")
|
|
@login_required
|
|
def updaterole():
|
|
data = request.json
|
|
try:
|
|
roles.updaterole(data)
|
|
except AutorisationError as ex:
|
|
return jsonify(ex.error), ex.htmlstatus
|
|
except Exception as ex:
|
|
if str(ex) == "404":
|
|
return jsonify("Rolle nicht gefunden"), 404
|
|
else:
|
|
return jsonify(str(ex)), 400
|
|
return jsonify({}), 200
|
|
|
|
|
|
@app.post("/auth/deleteroles")
|
|
@login_required
|
|
def deleteroles():
|
|
data = request.json
|
|
try:
|
|
roles.deleteroles(data)
|
|
except AutorisationError as ex:
|
|
return jsonify(ex.error), ex.htmlstatus
|
|
except Exception as ex:
|
|
return jsonify(str(ex)), 400
|
|
return jsonify({}), 200
|
|
|
|
|
|
@app.post("/auth/updateapplication")
|
|
@login_required
|
|
def updateapplication():
|
|
data = request.json
|
|
try:
|
|
applications.updateapplication(data)
|
|
except AutorisationError as ex:
|
|
return jsonify(ex.error), ex.htmlstatus
|
|
except Exception as ex:
|
|
return jsonify(str(ex)), 400
|
|
return jsonify({}), 200
|
|
|
|
|
|
@app.post("/auth/deleteapplications")
|
|
@login_required
|
|
def deleteapplications():
|
|
data = request.json
|
|
try:
|
|
applications.deleteapplications(data)
|
|
except AutorisationError as ex:
|
|
return jsonify(ex.error), ex.htmlstatus
|
|
except Exception as ex:
|
|
return str(ex), 400
|
|
return {}, 200
|
|
|
|
|
|
@app.post("/auth/updateapplicationroles")
|
|
@login_required
|
|
def updateapplicationroles():
|
|
data = request.json
|
|
try:
|
|
applications.updateapplicationroles(data)
|
|
except AutorisationError as ex:
|
|
return jsonify(ex.error), ex.htmlstatus
|
|
except Exception as ex:
|
|
return jsonify(str(ex)), 400
|
|
return jsonify({}), 200
|
|
|
|
|
|
@app.post("/auth/updateuser")
|
|
@login_required
|
|
def updateuser():
|
|
data = request.json
|
|
try:
|
|
users.updateuser(data)
|
|
except AutorisationError as ex:
|
|
return jsonify(ex.error), ex.htmlstatus
|
|
except Exception as ex:
|
|
if str(ex) == "404":
|
|
return jsonify("Benutzer nicht gefunden"), 404
|
|
else:
|
|
return jsonify(str(ex)), 400
|
|
return jsonify({}), 200
|
|
|
|
|
|
@app.post("/auth/applyuserapprole")
|
|
@login_required
|
|
def applyuserapprole():
|
|
data = request.json
|
|
try:
|
|
users.applyuserapprole(data)
|
|
except AutorisationError as ex:
|
|
return jsonify(ex.error), ex.htmlstatus
|
|
except Exception as ex:
|
|
return jsonify(str(ex)), 400
|
|
return jsonify({}), 200
|
|
|
|
|
|
@app.post("/auth/deleteusers")
|
|
@login_required
|
|
def deleteusers():
|
|
data = request.json
|
|
try:
|
|
users.deleteusers(data)
|
|
except ApplicationError as ex:
|
|
return jsonify(ex.error), ex.htmlstatus
|
|
except Exception as ex:
|
|
return jsonify(str(ex)), 400
|
|
return {}, 200
|
|
|
|
|
|
print("########## auth.routes importiert")
|