web: initial implementation of new forms
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
		@ -1,15 +0,0 @@
 | 
			
		||||
"""authentik core user forms"""
 | 
			
		||||
 | 
			
		||||
from django import forms
 | 
			
		||||
 | 
			
		||||
from authentik.core.models import User
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UserDetailForm(forms.ModelForm):
 | 
			
		||||
    """Update User Details"""
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
 | 
			
		||||
        model = User
 | 
			
		||||
        fields = ["username", "name", "email"]
 | 
			
		||||
        widgets = {"name": forms.TextInput}
 | 
			
		||||
@ -1,26 +0,0 @@
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
 | 
			
		||||
<div class="pf-c-card">
 | 
			
		||||
    <div class="pf-c-card__title">
 | 
			
		||||
        {% trans 'Update details' %}
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="pf-c-card__body">
 | 
			
		||||
        <form action="" method="post" class="pf-c-form pf-m-horizontal">
 | 
			
		||||
            {% include 'partials/form_horizontal.html' with form=form %}
 | 
			
		||||
            {% block beneath_form %}
 | 
			
		||||
            {% endblock %}
 | 
			
		||||
            <div class="pf-c-form__group pf-m-action">
 | 
			
		||||
                <div class="pf-c-form__horizontal-group">
 | 
			
		||||
                    <div class="pf-c-form__actions">
 | 
			
		||||
                        <input class="pf-c-button pf-m-primary" type="submit" value="{% trans 'Update' %}" />
 | 
			
		||||
                        {% if unenrollment_enabled %}
 | 
			
		||||
                        <a class="pf-c-button pf-m-danger"
 | 
			
		||||
                            href="{% url 'authentik_flows:default-unenrollment' %}?back={{ request.get_full_path }}">{%
 | 
			
		||||
                            trans "Delete account" %}</a>
 | 
			
		||||
                        {% endif %}
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </form>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
@ -1,30 +0,0 @@
 | 
			
		||||
"""authentik user view tests"""
 | 
			
		||||
import string
 | 
			
		||||
from random import SystemRandom
 | 
			
		||||
 | 
			
		||||
from django.test import TestCase
 | 
			
		||||
from django.urls import reverse
 | 
			
		||||
 | 
			
		||||
from authentik.core.models import User
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestUserViews(TestCase):
 | 
			
		||||
    """Test User Views"""
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        super().setUp()
 | 
			
		||||
        self.user = User.objects.create_user(
 | 
			
		||||
            username="unittest user",
 | 
			
		||||
            email="unittest@example.com",
 | 
			
		||||
            password="".join(
 | 
			
		||||
                SystemRandom().choice(string.ascii_uppercase + string.digits)
 | 
			
		||||
                for _ in range(8)
 | 
			
		||||
            ),
 | 
			
		||||
        )
 | 
			
		||||
        self.client.force_login(self.user)
 | 
			
		||||
 | 
			
		||||
    def test_user_details(self):
 | 
			
		||||
        """Test UserDetailsView"""
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            self.client.get(reverse("authentik_core:user-details")).status_code, 200
 | 
			
		||||
        )
 | 
			
		||||
@ -14,7 +14,6 @@ urlpatterns = [
 | 
			
		||||
        name="root-redirect",
 | 
			
		||||
    ),
 | 
			
		||||
    # User views
 | 
			
		||||
    path("-/user/details/", user.UserDetailsView.as_view(), name="user-details"),
 | 
			
		||||
    path(
 | 
			
		||||
        "-/user/tokens/create/",
 | 
			
		||||
        user.TokenCreateView.as_view(),
 | 
			
		||||
 | 
			
		||||
@ -15,39 +15,11 @@ from guardian.mixins import PermissionRequiredMixin
 | 
			
		||||
from guardian.shortcuts import get_objects_for_user
 | 
			
		||||
 | 
			
		||||
from authentik.core.forms.token import UserTokenForm
 | 
			
		||||
from authentik.core.forms.users import UserDetailForm
 | 
			
		||||
from authentik.core.models import Token, TokenIntents
 | 
			
		||||
from authentik.flows.models import Flow, FlowDesignation
 | 
			
		||||
from authentik.lib.views import CreateAssignPermView
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UserSettingsView(TemplateView):
 | 
			
		||||
    """Multiple SiteShells for user details and all stages"""
 | 
			
		||||
 | 
			
		||||
    template_name = "user/settings.html"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UserDetailsView(SuccessMessageMixin, LoginRequiredMixin, UpdateView):
 | 
			
		||||
    """Update User details"""
 | 
			
		||||
 | 
			
		||||
    template_name = "user/details.html"
 | 
			
		||||
    form_class = UserDetailForm
 | 
			
		||||
 | 
			
		||||
    success_message = _("Successfully updated user.")
 | 
			
		||||
    success_url = reverse_lazy("authentik_core:user-details")
 | 
			
		||||
 | 
			
		||||
    def get_object(self):
 | 
			
		||||
        return self.request.user
 | 
			
		||||
 | 
			
		||||
    def get_context_data(self, **kwargs: Any) -> dict[str, Any]:
 | 
			
		||||
        kwargs = super().get_context_data(**kwargs)
 | 
			
		||||
        unenrollment_flow = Flow.with_policy(
 | 
			
		||||
            self.request, designation=FlowDesignation.UNRENOLLMENT
 | 
			
		||||
        )
 | 
			
		||||
        kwargs["unenrollment_enabled"] = bool(unenrollment_flow)
 | 
			
		||||
        return kwargs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TokenCreateView(
 | 
			
		||||
    SuccessMessageMixin,
 | 
			
		||||
    LoginRequiredMixin,
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user