gault-millau/apps/authorization/models.py

73 lines
2.1 KiB
Python

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)