From b059cc2fdbee3d01c2eb67301cf6330f22e774b5 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Fri, 5 Nov 2021 12:08:08 +0100 Subject: [PATCH] Refactor edit and create views for OAuth2 applications to use the same custom form --- aleksis/core/forms.py | 13 +++++++++++ .../oauth2_provider/application/create.html | 17 ++++++++++++++ .../oauth2_provider/application/edit.html | 17 ++++++++++++++ .../oauth2_provider/application_detail.html | 10 +-------- .../oauth2_provider/application_form.html | 21 ------------------ .../oauth2_provider/application_list.html | 5 ++--- aleksis/core/urls.py | 11 +++++++++- aleksis/core/views.py | 22 +++++++++++-------- 8 files changed, 73 insertions(+), 43 deletions(-) create mode 100644 aleksis/core/templates/oauth2_provider/application/create.html create mode 100644 aleksis/core/templates/oauth2_provider/application/edit.html delete mode 100644 aleksis/core/templates/oauth2_provider/application_form.html diff --git a/aleksis/core/forms.py b/aleksis/core/forms.py index 740fd24b3..d8f5d0dee 100644 --- a/aleksis/core/forms.py +++ b/aleksis/core/forms.py @@ -22,6 +22,7 @@ from .models import ( DashboardWidget, Group, GroupType, + OAuthApplication, Person, SchoolTerm, ) @@ -590,3 +591,15 @@ class ListActionForm(ActionForm): self.items = items super().__init__(request, *args, **kwargs) self.fields["selected_objects"].choices = self._get_choices() + + +class OAuthApplicationForm(forms.ModelForm): + class Meta: + model = OAuthApplication + fields = ( + "name", + "client_id", + "client_secret", + "client_type", + "redirect_uris", + ) diff --git a/aleksis/core/templates/oauth2_provider/application/create.html b/aleksis/core/templates/oauth2_provider/application/create.html new file mode 100644 index 000000000..38b9a8d02 --- /dev/null +++ b/aleksis/core/templates/oauth2_provider/application/create.html @@ -0,0 +1,17 @@ +{% extends "core/base.html" %} + +{% load i18n material_form %} + +{% block browser_title %}{% blocktrans %}Register OAuth2 Application{% endblocktrans %}{% endblock %} +{% block page_title %}{% blocktrans %}Register OAuth2 Application{% endblocktrans %}{% endblock %} + +{% block content %} + <form method="post"> + {% csrf_token %} + {% form form=form %}{% endform %} + {% include "core/partials/save_button.html" %} + <a class="btn waves-effect red waves-light" href="{% url "oauth_list" %}"> + <i class="material-icons left">clear</i> {% trans "Cancel" %} + </a> + </form> +{% endblock %} diff --git a/aleksis/core/templates/oauth2_provider/application/edit.html b/aleksis/core/templates/oauth2_provider/application/edit.html new file mode 100644 index 000000000..ac2b7d346 --- /dev/null +++ b/aleksis/core/templates/oauth2_provider/application/edit.html @@ -0,0 +1,17 @@ +{% extends "core/base.html" %} + +{% load i18n material_form %} + +{% block browser_title %}{% blocktrans %}Edit OAuth2 Application{% endblocktrans %}{% endblock %} +{% block page_title %}{% blocktrans %}Edit OAuth2 Application{% endblocktrans %}{% endblock %} + +{% block content %} + <form method="post"> + {% csrf_token %} + {% form form=form %}{% endform %} + {% include "core/partials/save_button.html" %} + <a class="btn waves-effect red waves-light" href="{% url "oauth_detail" application.id %}"> + <i class="material-icons left">clear</i> {% trans "Cancel" %} + </a> + </form> +{% endblock %} diff --git a/aleksis/core/templates/oauth2_provider/application_detail.html b/aleksis/core/templates/oauth2_provider/application_detail.html index 63f51ad51..093bc3719 100644 --- a/aleksis/core/templates/oauth2_provider/application_detail.html +++ b/aleksis/core/templates/oauth2_provider/application_detail.html @@ -12,7 +12,7 @@ {% endblock %} {% block content %} - <a class="btn waves-effect waves-light btn-margin" href="{% url "oauth_update" application.id %}"> + <a class="btn waves-effect waves-light btn-margin" href="{% url "edit_oauth_application" application.id %}"> <i class="material-icons left">edit</i> {% trans "Edit" %} </a> @@ -46,14 +46,6 @@ {{ application.client_type }} </td> </tr> - <tr> - <th> - {% trans "Authorization Grant Type"%} - </td> - <td> - {{ application.authorization_grant_type }} - </td> - </tr> <tr> <th> {% trans "Redirect URIs"%} diff --git a/aleksis/core/templates/oauth2_provider/application_form.html b/aleksis/core/templates/oauth2_provider/application_form.html deleted file mode 100644 index 520fa1074..000000000 --- a/aleksis/core/templates/oauth2_provider/application_form.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "core/base.html" %} - -{% load i18n material_form %} - -{% block browser_title %}{% blocktrans %}Create OAuth2 Application{% endblocktrans %}{% endblock %} - -{% block content %} - <h4 class="block-center-heading"> - {% block app-form-title %} - {% blocktrans with application_name=application.name %}Edit application{% endblocktrans %} - {% endblock app-form-title %} - </h4> - <form method="post"> - {% csrf_token %} - {% form form=form %}{% endform %} - {% include "core/partials/save_button.html" %} - <a class="btn waves-effect red waves-light" href="{% block app-form-back-url %}{% url "oauth_detail" application.id %}{% endblock app-form-back-url %}"> - <i class="material-icons left">clear</i> {% trans "Cancel"%} - </a> - </form> -{% endblock %} diff --git a/aleksis/core/templates/oauth2_provider/application_list.html b/aleksis/core/templates/oauth2_provider/application_list.html index 4b999bef2..894315940 100644 --- a/aleksis/core/templates/oauth2_provider/application_list.html +++ b/aleksis/core/templates/oauth2_provider/application_list.html @@ -6,10 +6,9 @@ {% block content %} <h1>{% blocktrans %}OAuth2 applications{% endblocktrans %}</h1> - <a href="{% url "oauth2_provider:register" %}" class="btn green waves-effect - waves-light"> + <a href="{% url "register_oauth_application" %}" class="btn green waves-effect waves-light"> <i class="material-icons left">add</i> - {% blocktrans %}Register new applications{% endblocktrans %} + {% blocktrans %}Register new application{% endblocktrans %} </a> <ul class="collection"> {% for application in applications %} diff --git a/aleksis/core/urls.py b/aleksis/core/urls.py index b3c2cc468..85f91a2cc 100644 --- a/aleksis/core/urls.py +++ b/aleksis/core/urls.py @@ -103,9 +103,18 @@ urlpatterns = [ name="oidc_configuration", ), path("oauth/applications/", views.OAuth2List.as_view(), name="oauth_list"), + path( + "oauth/applications/register/", + views.OAuth2RegisterView.as_view(), + name="register_oauth_application", + ), path("oauth/applications/<int:pk>/detail", views.OAuth2Detail.as_view(), name="oauth_detail"), path("oauth/applications/<int:pk>/delete", views.OAuth2Delete.as_view(), name="oauth_delete"), - path("oauth/applications/<int:pk>/update", views.OAuth2Update.as_view(), name="oauth_update"), + path( + "oauth/applications/<int:pk>/edit/", + views.OAuth2EditView.as_view(), + name="edit_oauth_application", + ), path("oauth/", include("oauth2_provider.urls", namespace="oauth2_provider")), path("__i18n__/", include("django.conf.urls.i18n")), path( diff --git a/aleksis/core/views.py b/aleksis/core/views.py index e50799699..1a73deee1 100644 --- a/aleksis/core/views.py +++ b/aleksis/core/views.py @@ -26,7 +26,7 @@ from django.views.decorators.cache import never_cache from django.views.defaults import ERROR_500_TEMPLATE_NAME from django.views.generic.base import TemplateView, View from django.views.generic.detail import DetailView, SingleObjectMixin -from django.views.generic.edit import DeleteView, UpdateView +from django.views.generic.edit import DeleteView from django.views.generic.list import ListView import reversion @@ -59,6 +59,7 @@ from .forms import ( EditGroupForm, EditGroupTypeForm, GroupPreferenceForm, + OAuthApplicationForm, PersonForm, PersonPreferenceForm, SchoolTermForm, @@ -1066,22 +1067,25 @@ class OAuth2Delete(PermissionRequiredMixin, DeleteView): return OAuthApplication.objects.all() -class OAuth2Update(PermissionRequiredMixin, UpdateView): +class OAuth2EditView(PermissionRequiredMixin, AdvancedEditView): """View used to update an application.""" permission_required = "core.update_oauth_applications_rule" context_object_name = "application" - template_name = "oauth2_provider/application_form.html" + template_name = "oauth2_provider/application/edit.html" + form_class = OAuthApplicationForm def get_queryset(self): return OAuthApplication.objects.all() - def get_form_class(self): - """Return the form class for the application model.""" - return modelform_factory( - OAuthApplication, - fields=("name", "client_id", "client_secret", "client_type", "redirect_uris",), - ) + +class OAuth2RegisterView(PermissionRequiredMixin, AdvancedCreateView): + """View used to register an application.""" + + permission_required = "core.add_oauth_applications_rule" + context_object_name = "application" + template_name = "oauth2_provider/application/create.html" + form_class = OAuthApplicationForm class RedirectToPDFFile(SingleObjectMixin, View): -- GitLab