from django.db import models from oauth2_provider import models as oauth2_models from oauth2_provider.models import AbstractApplication from django.utils.translation import gettext_lazy as _ from utils.models import PlatformMixin # Create your models here. class ApplicationQuerySet(models.QuerySet): """Application queryset""" def get_by_natural_key(self, client_id): return self.get(client_id=client_id) def by_source(self, source: int): """Filter by source parameter""" return self.filter(source=source) class ApplicationManager(oauth2_models.ApplicationManager): """Application manager""" class Application(PlatformMixin, AbstractApplication): """Custom oauth2 application model""" objects = ApplicationManager.from_queryset(ApplicationQuerySet)() class Meta(AbstractApplication.Meta): swappable = "OAUTH2_PROVIDER_APPLICATION_MODEL" def natural_key(self): return (self.client_id,) class BlacklistedAccessTokenQuerySet(models.QuerySet): """Queryset for model BlacklistedAccessToken""" def by_user(self, user): """Filter by user""" return self.filter(user=user) def by_token(self, token): """Filter by token""" return self.filter(token=token) def by_jti(self, jti): """Filter by unique access_token identifier""" return self.filter(jti=jti) class BlacklistedAccessToken(models.Model): user = models.ForeignKey('account.User', on_delete=models.CASCADE, verbose_name=_('User')) jti = models.CharField(max_length=255, unique=True, verbose_name=_('Unique access_token identifier')) token = models.TextField(verbose_name=_('Access token')) blacklisted_at = models.DateTimeField(auto_now_add=True, verbose_name=_('Blacklisted datetime')) objects = BlacklistedAccessTokenQuerySet.as_manager() class Meta: """Meta class""" unique_together = ('token', 'user') def __str__(self): return 'Blacklisted access token for {}'.format(self.user)