73 lines
2.1 KiB
Python
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)
|