"""SAML base views""" from typing import Optional from django.http import HttpRequest, HttpResponse from django.shortcuts import get_object_or_404 from django.views import View from passbook.channels.out_samlv2.saml.constants import SESSION_KEY from passbook.channels.out_samlv2.saml.parser import SAMLRequest from passbook.core.models import Application from passbook.core.views.access import AccessMixin class BaseSAMLView(AccessMixin, View): """Base SAML View to resolve app_slug""" application: Application def setup(self, request: HttpRequest, *args, **kwargs): View.setup(self, request, *args, **kwargs) self.application = self.get_application(self.kwargs.get("app_slug")) def get_application(self, app_slug: str) -> Optional[Application]: """Return application or raise 404""" return get_object_or_404(Application, slug=app_slug) def handle_saml_request(self, request: SAMLRequest) -> HttpResponse: """Handle SAML Request""" self.request.SESSION[SESSION_KEY] = request if self.application.skip_authorization: pass