155 lines
5.6 KiB
Python
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)
|