Source code for certego_saas.apps.auth.views

import logging

from django.conf import settings
from django_user_agents.utils import get_user_agent
from durin import views as durin_views
from durin.models import Client
from rest_framework import status
from rest_framework.response import Response

from certego_saas.settings import certego_apps_settings

logger = logging.getLogger(__name__)

__all__ = [
    "LoginView",
    "LogoutView",
]


[docs]class LoginView(durin_views.LoginView): """ Extends ``durin.views.LoginView``. Responds with ``Set-cookie`` header and empty response data. """
[docs] def get_client_obj(self, request) -> Client: client_name = get_user_agent(request) client, _ = Client.objects.get_or_create(name=client_name) return client
def post(self, request, *args, **kwargs) -> Response: request.user = self.validate_and_return_user(request) logger.info(f"LoginView: received request from '{request.user.username}'.") client = self.get_client_obj(request) token_obj = self.get_token_obj(request, client) response = Response(status=status.HTTP_200_OK) response.set_cookie( key=certego_apps_settings.AUTH_TOKEN_COOKIE_NAME, value=token_obj.token, expires=token_obj.expiry, secure=False if settings.STAGE_CI or settings.DEBUG else True, httponly=certego_apps_settings.AUTH_COOKIE_HTTPONLY, samesite=certego_apps_settings.AUTH_COOKIE_SAMESITE, domain=certego_apps_settings.AUTH_COOKIE_DOMAIN, ) return response
[docs]class LogoutView(durin_views.LogoutView): """ Extends ``durin.views.LogoutView``. Responds with ``Set-cookie`` header and empty response data. """ def post(self, request, *args, **kwargs) -> Response: uname = request.user.username logger.info(f"LogoutView: request from '{uname}''.") response = super(LogoutView, self).post(request, *args, **kwargs) response.delete_cookie( key=certego_apps_settings.AUTH_TOKEN_COOKIE_NAME, samesite=certego_apps_settings.AUTH_COOKIE_SAMESITE, domain=certego_apps_settings.AUTH_COOKIE_DOMAIN, ) return response