mirror of https://gitlab.federez.net/re2o/re2o
7 changed files with 66 additions and 8 deletions
@ -0,0 +1,25 @@ |
|||||
|
import datetime |
||||
|
from django.conf import settings |
||||
|
from django.utils.translation import ugettext_lazy as _ |
||||
|
from rest_framework.authentication import TokenAuthentication |
||||
|
from rest_framework import exceptions |
||||
|
|
||||
|
class ExpiringTokenAuthentication(TokenAuthentication): |
||||
|
def authenticate_credentials(self, key): |
||||
|
model = self.get_model() |
||||
|
try: |
||||
|
token = model.objects.select_related('user').get(key=key) |
||||
|
except model.DoesNotExist: |
||||
|
raise exceptions.AuthenticationFailed(_('Invalid token.')) |
||||
|
|
||||
|
if not token.user.is_active: |
||||
|
raise exceptions.AuthenticationFailed(_('User inactive or deleted.')) |
||||
|
|
||||
|
token_duration = datetime.timedelta( |
||||
|
seconds=settings.API_TOKEN_DURATION |
||||
|
) |
||||
|
utc_now = datetime.datetime.now(datetime.timezone.utc) |
||||
|
if token.created < utc_now - token_duration: |
||||
|
raise exceptions.AuthenticationFailed(_('Token has expired')) |
||||
|
|
||||
|
return (token.user, token) |
||||
Loading…
Reference in new issue