azube/core/azure_auth.py
2024-12-06 14:04:17 +01:00

73 lines
1.9 KiB
Python

import datetime
import json
import base64
from core.models import Berichtsheft
from core.reports import DailyReport, WeeklyReport, choose_report_kind
import core.util
from enum import Enum
class Roles(Enum):
TRAINEE = "trainee"
MANAGER = "manager"
ADMIN = "admin"
class AzureUser:
display_name: str
id: str
claims: list
def __init__(self, request):
try:
# X-MS-CLIENT-PRINCIPAL-ID
self.id = request.headers["X-MS-CLIENT-PRINCIPAL-ID"]
# X-MS-CLIENT-PRINCIPAL-NAME
self.id = request.headers["X-MS-CLIENT-PRINCIPAL-NAME"]
# X-MS-CLIENT-PRINCIPAL
claims_json = json.loads(
base64.decode(request.headers["X-MS-CLIENT-PRINCIPAL"])
)
claims = {}
for claim in claims_json["claims"]:
claims[claim["typ"]] = claim["val"]
self.claims = claims
except:
self.display_name = "Anon"
self.id = "anon"
def reports(self):
return Berichtsheft.objects.filter(user=self.id).order_by("-year", "-week")
def get_report_kind(self):
# TODO : Implement
return "weekly"
def get_report_kind_form(self, request=None, files=None):
return choose_report_kind(self.get_report_kind(), request, files)
def latest_report(self):
return self.reports().order_by("-year", "-week").first()
def late_reports(self) -> int:
year_now, week_now, _ = datetime.datetime.today().isocalendar()
count = 0
latest = self.latest_report()
new_year, new_week = (latest.year, latest.week)
while week_now != new_week or (week_now == new_week and year_now != new_year):
count += 1
new_year, new_week = core.util.next_date(new_year, new_week)
return count
@property
def role(self) -> Roles:
# TODO : Implement
return Roles.TRAINEE