accounts/apps/gooyal_oauth2/views/pages.py
2024-08-05 18:31:04 +03:30

155 lines
5.6 KiB
Python

from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.urls import resolve, reverse_lazy
from django.utils.decorators import method_decorator
from django.views.generic import CreateView, DetailView, ListView, UpdateView
from oauth2_provider.models import get_application_model
from apps.gooyal_oauth2.filters import ApplicationFilter, ScopeFilter
from apps.gooyal_oauth2.forms import ApplicationCreateForm, ApplicationUpdateForm, ApplicationScopeCreateForm
from apps.gooyal_oauth2.models import Application, Scope
from utils.views import FilterMixin
@method_decorator(login_required, name='dispatch')
class ApplicationCreateView(CreateView):
template_name = "gooyal_oauth2/application_create.html"
form_class = ApplicationCreateForm
def get_success_url(self):
return reverse_lazy("gooyal_oauth2:application_detail", kwargs={"pk": self.object.pk})
def form_valid(self, form):
form.instance.user = self.request.user
form.instance.client_type = Application.CLIENT_PUBLIC
form.instance.algorithm = Application.RS256_ALGORITHM
form.instance.hash_client_secret = False
form.instance.authorization_grant_type = Application.GRANT_AUTHORIZATION_CODE
return super().form_valid(form)
@method_decorator(login_required, name='dispatch')
class ApplicationUpdateView(UpdateView):
template_name = "gooyal_oauth2/application_update.html"
form_class = ApplicationUpdateForm
def get_queryset(self):
return Application.objects.filter(user=self.request.user)
def get_success_url(self):
return reverse_lazy("gooyal_oauth2:application_detail", kwargs={"pk": self.object.pk})
def form_valid(self, form):
# form.instance.user = self.request.user
# form.instance.client_type = Application.CLIENT_PUBLIC
return super().form_valid(form)
@method_decorator(login_required, name='dispatch')
class ApplicationDetailView(DetailView):
model = Application
template_name = "gooyal_oauth2/application_detail.html"
def get_queryset(self):
return Application.objects.filter(user=self.request.user)
@method_decorator(login_required, name='dispatch')
class ApplicationListView(FilterMixin, ListView):
model = Application
template_name = "gooyal_oauth2/application_list.html"
paginate_by = settings.PAGE_SIZE
filterset_class = ApplicationFilter
def get_ordering(self):
ordering = self.request.GET.get('ordering', 'name')
return ordering
def get_queryset(self):
qs = super().get_queryset()
return qs.filter(user=self.request.user)
class ApplicationScopeMixin:
application = None
def get_application(self):
if not self.application:
application_pk = self.kwargs['application_pk']
application = Application.objects.get(pk=application_pk, user=self.request.user)
self.application = application
return self.application
def get_context_data(self, **kwargs):
application = self.get_application()
context_data = super().get_context_data(**kwargs)
context_data['application'] = application
return context_data
@method_decorator(login_required, name='dispatch')
class ApplicationScopeListView(ApplicationScopeMixin, FilterMixin, ListView):
model = Scope
template_name = "gooyal_oauth2/application_scope_list.html"
paginate_by = settings.PAGE_SIZE
filterset_class = ScopeFilter
def get_ordering(self):
ordering = self.request.GET.get('ordering', 'name')
return ordering
def get_queryset(self):
qs = super().get_queryset()
application = self.get_application()
return qs.filter(application__user=self.request.user, application=application)
@method_decorator(login_required, name='dispatch')
class ApplicationScopeCreateView(ApplicationScopeMixin, CreateView):
template_name = "gooyal_oauth2/application_scope_create.html"
form_class = ApplicationScopeCreateForm
model = Scope
def get_queryset(self):
qs = super().get_queryset()
application = self.get_application()
return qs.filter(application__user=self.request.user, application=application)
def get_success_url(self):
return reverse_lazy("gooyal_oauth2:application_scope_detail", kwargs={"pk": self.object.pk, "application_pk": self.get_application().pk})
def form_valid(self, form):
form.instance.application = self.get_application()
return super().form_valid(form)
@method_decorator(login_required, name='dispatch')
class ApplicationScopeDetailView(ApplicationScopeMixin, DetailView):
model = Scope
template_name = "gooyal_oauth2/application_scope_detail.html"
def get_queryset(self):
application = self.get_application()
return Scope.objects.filter(application=application)
@method_decorator(login_required, name='dispatch')
class ApplicationScopeUpdateView(ApplicationScopeMixin, UpdateView):
template_name = "gooyal_oauth2/application_scope_update.html"
form_class = ApplicationScopeCreateForm
model = Scope
def get_queryset(self):
qs = super().get_queryset()
application = self.get_application()
return qs.filter(application__user=self.request.user, application=application)
def get_success_url(self):
return reverse_lazy("gooyal_oauth2:application_scope_detail", kwargs={"pk": self.object.pk, "application_pk": self.get_application().pk})
def form_valid(self, form):
# form.instance.user = self.request.user
# form.instance.client_type = Application.CLIENT_PUBLIC
return super().form_valid(form)