*: replace shortcuts.reverse with urls.reverse
This commit is contained in:
parent
a1a3d316e3
commit
bdb86d7119
|
@ -1,8 +1,8 @@
|
||||||
"""test admin api"""
|
"""test admin api"""
|
||||||
from json import loads
|
from json import loads
|
||||||
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
from authentik import __version__
|
from authentik import __version__
|
||||||
from authentik.core.models import Group, User
|
from authentik.core.models import Group, User
|
||||||
|
|
|
@ -3,8 +3,8 @@ from importlib import import_module
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
from django.forms import ModelForm
|
from django.forms import ModelForm
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.urls.exceptions import NoReverseMatch
|
from django.urls.exceptions import NoReverseMatch
|
||||||
|
|
||||||
from authentik.admin.urls import urlpatterns
|
from authentik.admin.urls import urlpatterns
|
||||||
|
|
|
@ -5,6 +5,7 @@ from django.contrib.auth.mixins import (
|
||||||
)
|
)
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.http.response import HttpResponse
|
from django.http.response import HttpResponse
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import UpdateView
|
from django.views.generic import UpdateView
|
||||||
from django.views.generic.edit import FormView
|
from django.views.generic.edit import FormView
|
||||||
|
@ -33,7 +34,7 @@ class CertificateKeyPairCreateView(
|
||||||
permission_required = "authentik_crypto.add_certificatekeypair"
|
permission_required = "authentik_crypto.add_certificatekeypair"
|
||||||
|
|
||||||
template_name = "generic/create.html"
|
template_name = "generic/create.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully created Certificate-Key Pair")
|
success_message = _("Successfully created Certificate-Key Pair")
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,7 +51,7 @@ class CertificateKeyPairGenerateView(
|
||||||
permission_required = "authentik_crypto.add_certificatekeypair"
|
permission_required = "authentik_crypto.add_certificatekeypair"
|
||||||
|
|
||||||
template_name = "administration/certificatekeypair/generate.html"
|
template_name = "administration/certificatekeypair/generate.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully generated Certificate-Key Pair")
|
success_message = _("Successfully generated Certificate-Key Pair")
|
||||||
|
|
||||||
def form_valid(self, form: CertificateKeyPairGenerateForm) -> HttpResponse:
|
def form_valid(self, form: CertificateKeyPairGenerateForm) -> HttpResponse:
|
||||||
|
@ -77,7 +78,7 @@ class CertificateKeyPairUpdateView(
|
||||||
permission_required = "authentik_crypto.change_certificatekeypair"
|
permission_required = "authentik_crypto.change_certificatekeypair"
|
||||||
|
|
||||||
template_name = "generic/update.html"
|
template_name = "generic/update.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully updated Certificate-Key Pair")
|
success_message = _("Successfully updated Certificate-Key Pair")
|
||||||
|
|
||||||
|
|
||||||
|
@ -90,5 +91,5 @@ class CertificateKeyPairDeleteView(
|
||||||
permission_required = "authentik_crypto.delete_certificatekeypair"
|
permission_required = "authentik_crypto.delete_certificatekeypair"
|
||||||
|
|
||||||
template_name = "generic/delete.html"
|
template_name = "generic/delete.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully deleted Certificate-Key Pair")
|
success_message = _("Successfully deleted Certificate-Key Pair")
|
||||||
|
|
|
@ -6,6 +6,7 @@ from django.contrib.auth.mixins import (
|
||||||
)
|
)
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.http import HttpRequest, HttpResponse, JsonResponse
|
from django.http import HttpRequest, HttpResponse, JsonResponse
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import DetailView, FormView, UpdateView
|
from django.views.generic import DetailView, FormView, UpdateView
|
||||||
from guardian.mixins import PermissionRequiredMixin
|
from guardian.mixins import PermissionRequiredMixin
|
||||||
|
@ -36,7 +37,7 @@ class FlowCreateView(
|
||||||
permission_required = "authentik_flows.add_flow"
|
permission_required = "authentik_flows.add_flow"
|
||||||
|
|
||||||
template_name = "generic/create.html"
|
template_name = "generic/create.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully created Flow")
|
success_message = _("Successfully created Flow")
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,7 +54,7 @@ class FlowUpdateView(
|
||||||
permission_required = "authentik_flows.change_flow"
|
permission_required = "authentik_flows.change_flow"
|
||||||
|
|
||||||
template_name = "generic/update.html"
|
template_name = "generic/update.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully updated Flow")
|
success_message = _("Successfully updated Flow")
|
||||||
|
|
||||||
|
|
||||||
|
@ -64,7 +65,7 @@ class FlowDeleteView(LoginRequiredMixin, PermissionRequiredMixin, DeleteMessageV
|
||||||
permission_required = "authentik_flows.delete_flow"
|
permission_required = "authentik_flows.delete_flow"
|
||||||
|
|
||||||
template_name = "generic/delete.html"
|
template_name = "generic/delete.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully deleted Flow")
|
success_message = _("Successfully deleted Flow")
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,7 +105,7 @@ class FlowImportView(LoginRequiredMixin, FormView):
|
||||||
|
|
||||||
form_class = FlowImportForm
|
form_class = FlowImportForm
|
||||||
template_name = "administration/flow/import.html"
|
template_name = "administration/flow/import.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
if not request.user.is_superuser:
|
if not request.user.is_superuser:
|
||||||
|
|
|
@ -4,6 +4,7 @@ from django.contrib.auth.mixins import (
|
||||||
PermissionRequiredMixin as DjangoPermissionRequiredMixin,
|
PermissionRequiredMixin as DjangoPermissionRequiredMixin,
|
||||||
)
|
)
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import UpdateView
|
from django.views.generic import UpdateView
|
||||||
from guardian.mixins import PermissionRequiredMixin
|
from guardian.mixins import PermissionRequiredMixin
|
||||||
|
@ -27,7 +28,7 @@ class GroupCreateView(
|
||||||
permission_required = "authentik_core.add_group"
|
permission_required = "authentik_core.add_group"
|
||||||
|
|
||||||
template_name = "generic/create.html"
|
template_name = "generic/create.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully created Group")
|
success_message = _("Successfully created Group")
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,7 +45,7 @@ class GroupUpdateView(
|
||||||
permission_required = "authentik_core.change_group"
|
permission_required = "authentik_core.change_group"
|
||||||
|
|
||||||
template_name = "generic/update.html"
|
template_name = "generic/update.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully updated Group")
|
success_message = _("Successfully updated Group")
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,5 +56,5 @@ class GroupDeleteView(LoginRequiredMixin, PermissionRequiredMixin, DeleteMessage
|
||||||
permission_required = "authentik_flows.delete_group"
|
permission_required = "authentik_flows.delete_group"
|
||||||
|
|
||||||
template_name = "generic/delete.html"
|
template_name = "generic/delete.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully deleted Group")
|
success_message = _("Successfully deleted Group")
|
||||||
|
|
|
@ -4,6 +4,7 @@ from django.contrib.auth.mixins import (
|
||||||
PermissionRequiredMixin as DjangoPermissionRequiredMixin,
|
PermissionRequiredMixin as DjangoPermissionRequiredMixin,
|
||||||
)
|
)
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from guardian.mixins import PermissionRequiredMixin
|
from guardian.mixins import PermissionRequiredMixin
|
||||||
|
|
||||||
|
@ -27,7 +28,7 @@ class OutpostServiceConnectionCreateView(
|
||||||
permission_required = "authentik_outposts.add_outpostserviceconnection"
|
permission_required = "authentik_outposts.add_outpostserviceconnection"
|
||||||
|
|
||||||
template_name = "generic/create.html"
|
template_name = "generic/create.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully created Outpost Service Connection")
|
success_message = _("Successfully created Outpost Service Connection")
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,7 +44,7 @@ class OutpostServiceConnectionUpdateView(
|
||||||
permission_required = "authentik_outposts.change_outpostserviceconnection"
|
permission_required = "authentik_outposts.change_outpostserviceconnection"
|
||||||
|
|
||||||
template_name = "generic/update.html"
|
template_name = "generic/update.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully updated Outpost Service Connection")
|
success_message = _("Successfully updated Outpost Service Connection")
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,5 +57,5 @@ class OutpostServiceConnectionDeleteView(
|
||||||
permission_required = "authentik_outposts.delete_outpostserviceconnection"
|
permission_required = "authentik_outposts.delete_outpostserviceconnection"
|
||||||
|
|
||||||
template_name = "generic/delete.html"
|
template_name = "generic/delete.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully deleted Outpost Service Connection")
|
success_message = _("Successfully deleted Outpost Service Connection")
|
||||||
|
|
|
@ -7,6 +7,7 @@ from django.contrib.auth.mixins import (
|
||||||
)
|
)
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import FormView
|
from django.views.generic import FormView
|
||||||
from django.views.generic.detail import DetailView
|
from django.views.generic.detail import DetailView
|
||||||
|
@ -34,7 +35,7 @@ class PolicyCreateView(
|
||||||
permission_required = "authentik_policies.add_policy"
|
permission_required = "authentik_policies.add_policy"
|
||||||
|
|
||||||
template_name = "generic/create.html"
|
template_name = "generic/create.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully created Policy")
|
success_message = _("Successfully created Policy")
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,7 +51,7 @@ class PolicyUpdateView(
|
||||||
permission_required = "authentik_policies.change_policy"
|
permission_required = "authentik_policies.change_policy"
|
||||||
|
|
||||||
template_name = "generic/update.html"
|
template_name = "generic/update.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully updated Policy")
|
success_message = _("Successfully updated Policy")
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,7 +62,7 @@ class PolicyDeleteView(LoginRequiredMixin, PermissionRequiredMixin, DeleteMessag
|
||||||
permission_required = "authentik_policies.delete_policy"
|
permission_required = "authentik_policies.delete_policy"
|
||||||
|
|
||||||
template_name = "generic/delete.html"
|
template_name = "generic/delete.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully deleted Policy")
|
success_message = _("Successfully deleted Policy")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ from django.contrib.auth.mixins import (
|
||||||
)
|
)
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.db.models import Max
|
from django.db.models import Max
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import UpdateView
|
from django.views.generic import UpdateView
|
||||||
from guardian.mixins import PermissionRequiredMixin
|
from guardian.mixins import PermissionRequiredMixin
|
||||||
|
@ -30,7 +31,7 @@ class PolicyBindingCreateView(
|
||||||
form_class = PolicyBindingForm
|
form_class = PolicyBindingForm
|
||||||
|
|
||||||
template_name = "generic/create.html"
|
template_name = "generic/create.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully created PolicyBinding")
|
success_message = _("Successfully created PolicyBinding")
|
||||||
|
|
||||||
def get_initial(self) -> dict[str, Any]:
|
def get_initial(self) -> dict[str, Any]:
|
||||||
|
@ -63,7 +64,7 @@ class PolicyBindingUpdateView(
|
||||||
form_class = PolicyBindingForm
|
form_class = PolicyBindingForm
|
||||||
|
|
||||||
template_name = "generic/update.html"
|
template_name = "generic/update.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully updated PolicyBinding")
|
success_message = _("Successfully updated PolicyBinding")
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,5 +77,5 @@ class PolicyBindingDeleteView(
|
||||||
permission_required = "authentik_policies.delete_policybinding"
|
permission_required = "authentik_policies.delete_policybinding"
|
||||||
|
|
||||||
template_name = "generic/delete.html"
|
template_name = "generic/delete.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully deleted PolicyBinding")
|
success_message = _("Successfully deleted PolicyBinding")
|
||||||
|
|
|
@ -4,6 +4,7 @@ from django.contrib.auth.mixins import (
|
||||||
PermissionRequiredMixin as DjangoPermissionRequiredMixin,
|
PermissionRequiredMixin as DjangoPermissionRequiredMixin,
|
||||||
)
|
)
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from guardian.mixins import PermissionRequiredMixin
|
from guardian.mixins import PermissionRequiredMixin
|
||||||
|
|
||||||
|
@ -27,7 +28,7 @@ class StageCreateView(
|
||||||
template_name = "generic/create.html"
|
template_name = "generic/create.html"
|
||||||
permission_required = "authentik_flows.add_stage"
|
permission_required = "authentik_flows.add_stage"
|
||||||
|
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully created Stage")
|
success_message = _("Successfully created Stage")
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,7 +43,7 @@ class StageUpdateView(
|
||||||
model = Stage
|
model = Stage
|
||||||
permission_required = "authentik_flows.update_application"
|
permission_required = "authentik_flows.update_application"
|
||||||
template_name = "generic/update.html"
|
template_name = "generic/update.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully updated Stage")
|
success_message = _("Successfully updated Stage")
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,5 +53,5 @@ class StageDeleteView(LoginRequiredMixin, PermissionRequiredMixin, DeleteMessage
|
||||||
model = Stage
|
model = Stage
|
||||||
template_name = "generic/delete.html"
|
template_name = "generic/delete.html"
|
||||||
permission_required = "authentik_flows.delete_stage"
|
permission_required = "authentik_flows.delete_stage"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully deleted Stage")
|
success_message = _("Successfully deleted Stage")
|
||||||
|
|
|
@ -7,6 +7,7 @@ from django.contrib.auth.mixins import (
|
||||||
)
|
)
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.db.models import Max
|
from django.db.models import Max
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import UpdateView
|
from django.views.generic import UpdateView
|
||||||
from guardian.mixins import PermissionRequiredMixin
|
from guardian.mixins import PermissionRequiredMixin
|
||||||
|
@ -30,7 +31,7 @@ class StageBindingCreateView(
|
||||||
form_class = FlowStageBindingForm
|
form_class = FlowStageBindingForm
|
||||||
|
|
||||||
template_name = "generic/create.html"
|
template_name = "generic/create.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully created StageBinding")
|
success_message = _("Successfully created StageBinding")
|
||||||
|
|
||||||
def get_initial(self) -> dict[str, Any]:
|
def get_initial(self) -> dict[str, Any]:
|
||||||
|
@ -61,7 +62,7 @@ class StageBindingUpdateView(
|
||||||
form_class = FlowStageBindingForm
|
form_class = FlowStageBindingForm
|
||||||
|
|
||||||
template_name = "generic/update.html"
|
template_name = "generic/update.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully updated StageBinding")
|
success_message = _("Successfully updated StageBinding")
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,5 +75,5 @@ class StageBindingDeleteView(
|
||||||
permission_required = "authentik_flows.delete_flowstagebinding"
|
permission_required = "authentik_flows.delete_flowstagebinding"
|
||||||
|
|
||||||
template_name = "generic/delete.html"
|
template_name = "generic/delete.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully deleted FlowStageBinding")
|
success_message = _("Successfully deleted FlowStageBinding")
|
||||||
|
|
|
@ -5,6 +5,7 @@ from django.contrib.auth.mixins import (
|
||||||
)
|
)
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from guardian.mixins import PermissionRequiredMixin
|
from guardian.mixins import PermissionRequiredMixin
|
||||||
|
|
||||||
|
@ -27,7 +28,7 @@ class InvitationCreateView(
|
||||||
permission_required = "authentik_stages_invitation.add_invitation"
|
permission_required = "authentik_stages_invitation.add_invitation"
|
||||||
|
|
||||||
template_name = "generic/create.html"
|
template_name = "generic/create.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully created Invitation")
|
success_message = _("Successfully created Invitation")
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
|
@ -46,5 +47,5 @@ class InvitationDeleteView(
|
||||||
permission_required = "authentik_stages_invitation.delete_invitation"
|
permission_required = "authentik_stages_invitation.delete_invitation"
|
||||||
|
|
||||||
template_name = "generic/delete.html"
|
template_name = "generic/delete.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully deleted Invitation")
|
success_message = _("Successfully deleted Invitation")
|
||||||
|
|
|
@ -4,6 +4,7 @@ from django.contrib.auth.mixins import (
|
||||||
PermissionRequiredMixin as DjangoPermissionRequiredMixin,
|
PermissionRequiredMixin as DjangoPermissionRequiredMixin,
|
||||||
)
|
)
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import UpdateView
|
from django.views.generic import UpdateView
|
||||||
from guardian.mixins import PermissionRequiredMixin
|
from guardian.mixins import PermissionRequiredMixin
|
||||||
|
@ -27,7 +28,7 @@ class PromptCreateView(
|
||||||
permission_required = "authentik_stages_prompt.add_prompt"
|
permission_required = "authentik_stages_prompt.add_prompt"
|
||||||
|
|
||||||
template_name = "generic/create.html"
|
template_name = "generic/create.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully created Prompt")
|
success_message = _("Successfully created Prompt")
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,7 +45,7 @@ class PromptUpdateView(
|
||||||
permission_required = "authentik_stages_prompt.change_prompt"
|
permission_required = "authentik_stages_prompt.change_prompt"
|
||||||
|
|
||||||
template_name = "generic/update.html"
|
template_name = "generic/update.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully updated Prompt")
|
success_message = _("Successfully updated Prompt")
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,5 +56,5 @@ class PromptDeleteView(LoginRequiredMixin, PermissionRequiredMixin, DeleteMessag
|
||||||
permission_required = "authentik_stages_prompt.delete_prompt"
|
permission_required = "authentik_stages_prompt.delete_prompt"
|
||||||
|
|
||||||
template_name = "generic/delete.html"
|
template_name = "generic/delete.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully deleted Prompt")
|
success_message = _("Successfully deleted Prompt")
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
"""authentik Token administration"""
|
"""authentik Token administration"""
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from guardian.mixins import PermissionRequiredMixin
|
from guardian.mixins import PermissionRequiredMixin
|
||||||
|
|
||||||
|
@ -14,5 +15,5 @@ class TokenDeleteView(LoginRequiredMixin, PermissionRequiredMixin, DeleteMessage
|
||||||
permission_required = "authentik_core.delete_token"
|
permission_required = "authentik_core.delete_token"
|
||||||
|
|
||||||
template_name = "generic/delete.html"
|
template_name = "generic/delete.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully deleted Token")
|
success_message = _("Successfully deleted Token")
|
||||||
|
|
|
@ -7,7 +7,8 @@ from django.contrib.auth.mixins import (
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.http import HttpRequest, HttpResponse
|
from django.http import HttpRequest, HttpResponse
|
||||||
from django.http.response import HttpResponseRedirect
|
from django.http.response import HttpResponseRedirect
|
||||||
from django.shortcuts import redirect, reverse
|
from django.shortcuts import redirect
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.http import urlencode
|
from django.utils.http import urlencode
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import DetailView, UpdateView
|
from django.views.generic import DetailView, UpdateView
|
||||||
|
@ -32,7 +33,7 @@ class UserCreateView(
|
||||||
permission_required = "authentik_core.add_user"
|
permission_required = "authentik_core.add_user"
|
||||||
|
|
||||||
template_name = "generic/create.html"
|
template_name = "generic/create.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully created User")
|
success_message = _("Successfully created User")
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,7 +52,7 @@ class UserUpdateView(
|
||||||
# By default the object's name is user which is used by other checks
|
# By default the object's name is user which is used by other checks
|
||||||
context_object_name = "object"
|
context_object_name = "object"
|
||||||
template_name = "generic/update.html"
|
template_name = "generic/update.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully updated User")
|
success_message = _("Successfully updated User")
|
||||||
|
|
||||||
|
|
||||||
|
@ -64,7 +65,7 @@ class UserDeleteView(LoginRequiredMixin, PermissionRequiredMixin, DeleteMessageV
|
||||||
# By default the object's name is user which is used by other checks
|
# By default the object's name is user which is used by other checks
|
||||||
context_object_name = "object"
|
context_object_name = "object"
|
||||||
template_name = "generic/delete.html"
|
template_name = "generic/delete.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully deleted User")
|
success_message = _("Successfully deleted User")
|
||||||
|
|
||||||
|
|
||||||
|
@ -79,7 +80,7 @@ class UserDisableView(LoginRequiredMixin, PermissionRequiredMixin, DeleteMessage
|
||||||
# By default the object's name is user which is used by other checks
|
# By default the object's name is user which is used by other checks
|
||||||
context_object_name = "object"
|
context_object_name = "object"
|
||||||
template_name = "administration/user/disable.html"
|
template_name = "administration/user/disable.html"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully disabled User")
|
success_message = _("Successfully disabled User")
|
||||||
|
|
||||||
def delete(self, request: HttpRequest, *args, **kwargs) -> HttpResponse:
|
def delete(self, request: HttpRequest, *args, **kwargs) -> HttpResponse:
|
||||||
|
@ -100,7 +101,7 @@ class UserEnableView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
|
||||||
|
|
||||||
# By default the object's name is user which is used by other checks
|
# By default the object's name is user which is used by other checks
|
||||||
context_object_name = "object"
|
context_object_name = "object"
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
success_message = _("Successfully enabled User")
|
success_message = _("Successfully enabled User")
|
||||||
|
|
||||||
def get(self, request: HttpRequest, *args, **kwargs):
|
def get(self, request: HttpRequest, *args, **kwargs):
|
||||||
|
@ -124,7 +125,7 @@ class UserPasswordResetView(LoginRequiredMixin, PermissionRequiredMixin, DetailV
|
||||||
)
|
)
|
||||||
querystring = urlencode({"token": token.key})
|
querystring = urlencode({"token": token.key})
|
||||||
link = request.build_absolute_uri(
|
link = request.build_absolute_uri(
|
||||||
reverse("authentik_flows:default-recovery") + f"?{querystring}"
|
reverse_lazy("authentik_flows:default-recovery") + f"?{querystring}"
|
||||||
)
|
)
|
||||||
messages.success(
|
messages.success(
|
||||||
request, _("Password reset link: <pre>%(link)s</pre>" % {"link": link})
|
request, _("Password reset link: <pre>%(link)s</pre>" % {"link": link})
|
||||||
|
|
|
@ -4,6 +4,7 @@ from typing import Any
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.views.generic import DeleteView, UpdateView
|
from django.views.generic import DeleteView, UpdateView
|
||||||
|
|
||||||
from authentik.lib.utils.reflection import all_subclasses
|
from authentik.lib.utils.reflection import all_subclasses
|
||||||
|
@ -13,7 +14,7 @@ from authentik.lib.views import CreateAssignPermView
|
||||||
class DeleteMessageView(SuccessMessageMixin, DeleteView):
|
class DeleteMessageView(SuccessMessageMixin, DeleteView):
|
||||||
"""DeleteView which shows `self.success_message` on successful deletion"""
|
"""DeleteView which shows `self.success_message` on successful deletion"""
|
||||||
|
|
||||||
success_url = "/"
|
success_url = reverse_lazy("authentik_core:shell")
|
||||||
|
|
||||||
def delete(self, request, *args, **kwargs):
|
def delete(self, request, *args, **kwargs):
|
||||||
messages.success(self.request, self.success_message)
|
messages.success(self.request, self.success_message)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
"""PropertyMapping API Views"""
|
"""PropertyMapping API Views"""
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from drf_yasg2.utils import swagger_auto_schema
|
from drf_yasg2.utils import swagger_auto_schema
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
"""Provider API Views"""
|
"""Provider API Views"""
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from drf_yasg2.utils import swagger_auto_schema
|
from drf_yasg2.utils import swagger_auto_schema
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
"""Source API Views"""
|
"""Source API Views"""
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from drf_yasg2.utils import swagger_auto_schema
|
from drf_yasg2.utils import swagger_auto_schema
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"""impersonation tests"""
|
"""impersonation tests"""
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test.testcases import TestCase
|
from django.test.testcases import TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
import string
|
import string
|
||||||
from random import SystemRandom
|
from random import SystemRandom
|
||||||
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
import string
|
import string
|
||||||
from random import SystemRandom
|
from random import SystemRandom
|
||||||
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"""Event API tests"""
|
"""Event API tests"""
|
||||||
|
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"""Event Middleware tests"""
|
"""Event Middleware tests"""
|
||||||
|
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from authentik.core.models import Application, User
|
from authentik.core.models import Application, User
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
"""Flow Stage API Views"""
|
"""Flow Stage API Views"""
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from drf_yasg2.utils import swagger_auto_schema
|
from drf_yasg2.utils import swagger_auto_schema
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
from authentik.flows.transfer.common import DataclassEncoder
|
"""Challenge helpers"""
|
||||||
from dataclasses import asdict, is_dataclass
|
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from json.encoder import JSONEncoder
|
|
||||||
|
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from rest_framework.fields import ChoiceField, DictField, JSONField
|
from rest_framework.fields import ChoiceField, JSONField
|
||||||
from rest_framework.serializers import CharField, Serializer
|
from rest_framework.serializers import CharField, Serializer
|
||||||
|
|
||||||
|
from authentik.flows.transfer.common import DataclassEncoder
|
||||||
|
|
||||||
|
|
||||||
class ChallengeTypes(Enum):
|
class ChallengeTypes(Enum):
|
||||||
|
"""Currently defined challenge types"""
|
||||||
|
|
||||||
native = "native"
|
native = "native"
|
||||||
shell = "shell"
|
shell = "shell"
|
||||||
|
@ -16,6 +17,8 @@ class ChallengeTypes(Enum):
|
||||||
|
|
||||||
|
|
||||||
class Challenge(Serializer):
|
class Challenge(Serializer):
|
||||||
|
"""Challenge that gets sent to the client based on which stage
|
||||||
|
is currently active"""
|
||||||
|
|
||||||
type = ChoiceField(choices=list(ChallengeTypes))
|
type = ChoiceField(choices=list(ChallengeTypes))
|
||||||
component = CharField(required=False)
|
component = CharField(required=False)
|
||||||
|
@ -23,10 +26,12 @@ class Challenge(Serializer):
|
||||||
|
|
||||||
|
|
||||||
class ChallengeResponse(Serializer):
|
class ChallengeResponse(Serializer):
|
||||||
|
"""Base class for all challenge responses"""
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class HttpChallengeResponse(JsonResponse):
|
class HttpChallengeResponse(JsonResponse):
|
||||||
|
"""Subclass of JsonResponse that uses the `DataclassEncoder`"""
|
||||||
|
|
||||||
def __init__(self, challenge: Challenge, **kwargs) -> None:
|
def __init__(self, challenge: Challenge, **kwargs) -> None:
|
||||||
|
# pyright: reportGeneralTypeIssues=false
|
||||||
super().__init__(challenge.data, encoder=DataclassEncoder, **kwargs)
|
super().__init__(challenge.data, encoder=DataclassEncoder, **kwargs)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
"""API flow tests"""
|
"""API flow tests"""
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
|
@ -4,8 +4,8 @@ from unittest.mock import MagicMock, Mock, PropertyMock, patch
|
||||||
from django.contrib.sessions.middleware import SessionMiddleware
|
from django.contrib.sessions.middleware import SessionMiddleware
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import RequestFactory, TestCase
|
from django.test import RequestFactory, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from guardian.shortcuts import get_anonymous_user
|
from guardian.shortcuts import get_anonymous_user
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
from unittest.mock import MagicMock, PropertyMock, patch
|
from unittest.mock import MagicMock, PropertyMock, patch
|
||||||
|
|
||||||
from django.http import HttpRequest, HttpResponse
|
from django.http import HttpRequest, HttpResponse
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test.client import RequestFactory
|
from django.test.client import RequestFactory
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
@ -359,7 +359,7 @@ class TestFlowExecutor(TestCase):
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertJSONEqual(
|
self.assertJSONEqual(
|
||||||
force_str(response.content),
|
force_str(response.content),
|
||||||
{"type": "redirect", "to": reverse("authentik_core:shell")},
|
{"args": {"to": reverse("authentik_core:shell")}, "type": "redirect"},
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_reevaluate_remove_consecutive(self):
|
def test_reevaluate_remove_consecutive(self):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"""flow views tests"""
|
"""flow views tests"""
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
from authentik.flows.models import Flow, FlowDesignation
|
from authentik.flows.models import Flow, FlowDesignation
|
||||||
from authentik.flows.planner import FlowPlan
|
from authentik.flows.planner import FlowPlan
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from dataclasses import asdict
|
from dataclasses import asdict
|
||||||
|
|
||||||
from django.db.models.base import Model
|
from django.db.models.base import Model
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from drf_yasg2.utils import swagger_auto_schema
|
from drf_yasg2.utils import swagger_auto_schema
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.fields import BooleanField, CharField, SerializerMethodField
|
from rest_framework.fields import BooleanField, CharField, SerializerMethodField
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"""policy API Views"""
|
"""policy API Views"""
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from drf_yasg2.utils import swagger_auto_schema
|
from drf_yasg2.utils import swagger_auto_schema
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
"""OAuth2Provider API Views"""
|
"""OAuth2Provider API Views"""
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from drf_yasg2.utils import swagger_auto_schema
|
from drf_yasg2.utils import swagger_auto_schema
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.fields import ReadOnlyField
|
from rest_framework.fields import ReadOnlyField
|
||||||
|
|
|
@ -3,7 +3,7 @@ from typing import Iterator, Optional
|
||||||
|
|
||||||
import xmlsec # nosec
|
import xmlsec # nosec
|
||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from lxml.etree import Element, SubElement, tostring # nosec
|
from lxml.etree import Element, SubElement, tostring # nosec
|
||||||
|
|
||||||
from authentik.providers.saml.models import SAMLProvider
|
from authentik.providers.saml.models import SAMLProvider
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
from django.core.management import call_command
|
from django.core.management import call_command
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
from authentik.core.models import Token, TokenIntents, User
|
from authentik.core.models import Token, TokenIntents, User
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
from base64 import b64encode
|
from base64 import b64encode
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
class TestRoot(TestCase):
|
class TestRoot(TestCase):
|
||||||
|
|
|
@ -3,10 +3,10 @@ from typing import Optional, Type
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.forms import ModelForm
|
from django.forms import ModelForm
|
||||||
|
from django.templatetags.static import static
|
||||||
from django.urls import reverse, reverse_lazy
|
from django.urls import reverse, reverse_lazy
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from rest_framework.serializers import Serializer
|
from rest_framework.serializers import Serializer
|
||||||
from django.templatetags.static import static
|
|
||||||
|
|
||||||
from authentik.core.models import Source, UserSourceConnection
|
from authentik.core.models import Source, UserSourceConnection
|
||||||
from authentik.core.types import UILoginButton
|
from authentik.core.types import UILoginButton
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"""OAuth Source tests"""
|
"""OAuth Source tests"""
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
from authentik.sources.oauth.models import OAuthSource
|
from authentik.sources.oauth.models import OAuthSource
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,7 @@ from typing import Type
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.forms import ModelForm
|
from django.forms import ModelForm
|
||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse, reverse_lazy
|
||||||
from django.urls import reverse_lazy
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from rest_framework.serializers import Serializer
|
from rest_framework.serializers import Serializer
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ from typing import Optional, Type
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.forms import ModelForm
|
from django.forms import ModelForm
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views import View
|
from django.views import View
|
||||||
from rest_framework.serializers import BaseSerializer
|
from rest_framework.serializers import BaseSerializer
|
||||||
|
|
|
@ -3,7 +3,7 @@ from typing import Optional, Type
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.forms import ModelForm
|
from django.forms import ModelForm
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views import View
|
from django.views import View
|
||||||
from rest_framework.serializers import BaseSerializer
|
from rest_framework.serializers import BaseSerializer
|
||||||
|
|
|
@ -4,7 +4,7 @@ from typing import Optional, Type
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.forms import ModelForm
|
from django.forms import ModelForm
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views import View
|
from django.views import View
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"""captcha tests"""
|
"""captcha tests"""
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
"""consent tests"""
|
"""consent tests"""
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from authentik.core.models import Application, User
|
from authentik.core.models import Application, User
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"""dummy tests"""
|
"""dummy tests"""
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
|
@ -4,8 +4,8 @@ from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
from django.core import mail
|
from django.core import mail
|
||||||
from django.core.mail.backends.locmem import EmailBackend
|
from django.core.mail.backends.locmem import EmailBackend
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
from authentik.flows.markers import StageMarker
|
from authentik.flows.markers import StageMarker
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
from django.core import mail
|
from django.core import mail
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from authentik.core.models import Token, User
|
from authentik.core.models import Token, User
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
"""Identification stage logic"""
|
"""Identification stage logic"""
|
||||||
from typing import Optional
|
from typing import Optional, Union
|
||||||
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import FormView
|
from django.views.generic import FormView
|
||||||
from rest_framework.fields import CharField
|
from rest_framework.fields import CharField
|
||||||
|
@ -55,7 +55,7 @@ class IdentificationStageView(ChallengeStageView):
|
||||||
|
|
||||||
def get_challenge(self) -> Challenge:
|
def get_challenge(self) -> Challenge:
|
||||||
current_stage: IdentificationStage = self.executor.current_stage
|
current_stage: IdentificationStage = self.executor.current_stage
|
||||||
args = {"input_type": "text"}
|
args: dict[str, Union[str, list[UILoginButton]]] = {"input_type": "text"}
|
||||||
if current_stage.user_fields == [UserFields.E_MAIL]:
|
if current_stage.user_fields == [UserFields.E_MAIL]:
|
||||||
args["input_type"] = "email"
|
args["input_type"] = "email"
|
||||||
# If the user has been redirected to us whilst trying to access an
|
# If the user has been redirected to us whilst trying to access an
|
||||||
|
@ -76,14 +76,15 @@ class IdentificationStageView(ChallengeStageView):
|
||||||
args["primary_action"] = _("Log in")
|
args["primary_action"] = _("Log in")
|
||||||
|
|
||||||
# Check all enabled source, add them if they have a UI Login button.
|
# Check all enabled source, add them if they have a UI Login button.
|
||||||
args["sources"] = []
|
ui_sources = []
|
||||||
sources: list[Source] = (
|
sources: list[Source] = (
|
||||||
Source.objects.filter(enabled=True).order_by("name").select_subclasses()
|
Source.objects.filter(enabled=True).order_by("name").select_subclasses()
|
||||||
)
|
)
|
||||||
for source in sources:
|
for source in sources:
|
||||||
ui_login_button = source.ui_login_button
|
ui_login_button = source.ui_login_button
|
||||||
if ui_login_button:
|
if ui_login_button:
|
||||||
args["sources"].append(ui_login_button)
|
ui_sources.append(ui_login_button)
|
||||||
|
args["sources"] = ui_sources
|
||||||
return Challenge(
|
return Challenge(
|
||||||
data={
|
data={
|
||||||
"type": ChallengeTypes.native,
|
"type": ChallengeTypes.native,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"""identification tests"""
|
"""identification tests"""
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
"""invitation tests"""
|
"""invitation tests"""
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
from guardian.shortcuts import get_anonymous_user
|
from guardian.shortcuts import get_anonymous_user
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ from typing import Optional, Type
|
||||||
from django.contrib.postgres.fields import ArrayField
|
from django.contrib.postgres.fields import ArrayField
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.forms import ModelForm
|
from django.forms import ModelForm
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views import View
|
from django.views import View
|
||||||
from rest_framework.serializers import BaseSerializer
|
from rest_framework.serializers import BaseSerializer
|
||||||
|
|
|
@ -4,8 +4,8 @@ from random import SystemRandom
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.shortcuts import reverse
|
from django.urls import reverse
|
||||||
from django.utils.http import urlencode
|
from django.utils.http import urlencode
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
"""Prompt tests"""
|
"""Prompt tests"""
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
"""delete tests"""
|
"""delete tests"""
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
"""login tests"""
|
"""login tests"""
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"""logout tests"""
|
"""logout tests"""
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
|
@ -3,8 +3,8 @@ import string
|
||||||
from random import SystemRandom
|
from random import SystemRandom
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
from authentik.core.models import User
|
from authentik.core.models import User
|
||||||
|
|
|
@ -12,8 +12,8 @@ from django.apps import apps
|
||||||
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
|
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
|
||||||
from django.db import connection, transaction
|
from django.db import connection, transaction
|
||||||
from django.db.utils import IntegrityError
|
from django.db.utils import IntegrityError
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test.testcases import TransactionTestCase
|
from django.test.testcases import TransactionTestCase
|
||||||
|
from django.urls import reverse
|
||||||
from docker import DockerClient, from_env
|
from docker import DockerClient, from_env
|
||||||
from docker.models.containers import Container
|
from docker.models.containers import Container
|
||||||
from selenium import webdriver
|
from selenium import webdriver
|
||||||
|
|
Reference in a new issue