diff --git a/.credentials/KANIDM_URI b/.credentials/KANIDM_URI new file mode 100644 index 0000000..cd6933f --- /dev/null +++ b/.credentials/KANIDM_URI @@ -0,0 +1 @@ +https://sso.dgnum.eu diff --git a/src/dgsi/urls.py b/src/dgsi/urls.py index 637600f..deb3429 100644 --- a/src/dgsi/urls.py +++ b/src/dgsi/urls.py @@ -1 +1,9 @@ -urlpatterns = [] +from django.urls import path + +from . import views + +app_name = "dgsi" + +urlpatterns = [ + path("profile", views.ProfileView.as_view(), name="dgn-profile"), +] diff --git a/src/dgsi/views.py b/src/dgsi/views.py index 60f00ef..2277922 100644 --- a/src/dgsi/views.py +++ b/src/dgsi/views.py @@ -1 +1,35 @@ # Create your views here. +import json +from typing import Optional + +from asgiref.sync import async_to_sync +from django.contrib.auth import get_user_model +from django.contrib.auth.mixins import LoginRequiredMixin +from django.db.models import QuerySet +from django.views.generic import DetailView + +from shared.kanidm import client + +User = get_user_model() + + +class ProfileView(LoginRequiredMixin, DetailView): + model = User + template_name = "account/profile.html" + + def get_object(self, queryset: Optional[QuerySet] = None): + assert isinstance(self.request.user, User) + + return self.request.user + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + + username = self.request.user.get_username() + + ctx["person"] = async_to_sync(client.person_account_get)(username) + + content: str = async_to_sync(client.get_radius_token)(username).content + + ctx["radius_secret"] = json.loads(content).get("secret") + return ctx diff --git a/src/shared/kanidm.py b/src/shared/kanidm.py new file mode 100644 index 0000000..32a77e1 --- /dev/null +++ b/src/shared/kanidm.py @@ -0,0 +1,8 @@ +from kanidm import KanidmClient +from loadcredential import Credentials + +credentials = Credentials(env_prefix="DGSI_") + +client = KanidmClient( + uri=credentials["KANIDM_URI"], token=credentials["KANIDM_AUTH_TOKEN"] +) diff --git a/src/shared/templates/_hero.html b/src/shared/templates/_hero.html index 7b5391b..37b4a70 100644 --- a/src/shared/templates/_hero.html +++ b/src/shared/templates/_hero.html @@ -8,7 +8,7 @@

Dossier Général des Services Informagiques

-

Système d'information de la DGNum

+

Système d'information de la DGNum

{% if user.is_authenticated %} diff --git a/src/shared/templates/account/profile.html b/src/shared/templates/account/profile.html new file mode 100644 index 0000000..fdbd01c --- /dev/null +++ b/src/shared/templates/account/profile.html @@ -0,0 +1,25 @@ +{% extends "base.html" %} + +{% block content %} +

+ Profil de {{ person.displayname }} + {{ person.name }} +

+
+ +

Identifiant unique :

+ + {{ person.uuid }} +
+ +

Token RADIUS :

+ + {{ radius_secret }} +
+ +

Membre des groupes suivants :

+ + {% for group in person.memberof %} + {{ group }}
+ {% endfor %} +{% endblock content %}