123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- from datetime import timedelta
- from django.conf import settings
- from django.test.signals import setting_changed
- from django.utils.translation import gettext_lazy as _
- from rest_framework.settings import APISettings as _APISettings
- from .utils import format_lazy
- USER_SETTINGS = getattr(settings, 'SIMPLE_JWT', None)
- DEFAULTS = {
- 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
- 'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
- 'ROTATE_REFRESH_TOKENS': False,
- 'BLACKLIST_AFTER_ROTATION': True,
- 'UPDATE_LAST_LOGIN': False,
- 'ALGORITHM': 'HS256',
- 'SIGNING_KEY': settings.SECRET_KEY,
- 'VERIFYING_KEY': None,
- 'AUDIENCE': None,
- 'ISSUER': None,
- 'JWK_URL': None,
- 'LEEWAY': 0,
- 'AUTH_HEADER_TYPES': ('Bearer',),
- 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
- 'USER_ID_FIELD': 'id',
- 'USER_ID_CLAIM': 'user_id',
- 'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',
- 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
- 'TOKEN_TYPE_CLAIM': 'token_type',
- 'JTI_CLAIM': 'jti',
- 'TOKEN_USER_CLASS': 'rest_framework_simplejwt.models.TokenUser',
- 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
- 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
- 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
- }
- IMPORT_STRINGS = (
- 'AUTH_TOKEN_CLASSES',
- 'TOKEN_USER_CLASS',
- 'USER_AUTHENTICATION_RULE',
- )
- REMOVED_SETTINGS = (
- 'AUTH_HEADER_TYPE',
- 'AUTH_TOKEN_CLASS',
- 'SECRET_KEY',
- 'TOKEN_BACKEND_CLASS',
- )
- class APISettings(_APISettings): # pragma: no cover
- def __check_user_settings(self, user_settings):
- SETTINGS_DOC = 'https://django-rest-framework-simplejwt.readthedocs.io/en/latest/settings.html'
- for setting in REMOVED_SETTINGS:
- if setting in user_settings:
- raise RuntimeError(format_lazy(
- _("The '{}' setting has been removed. Please refer to '{}' for available settings."),
- setting, SETTINGS_DOC,
- ))
- return user_settings
- api_settings = APISettings(USER_SETTINGS, DEFAULTS, IMPORT_STRINGS)
- def reload_api_settings(*args, **kwargs): # pragma: no cover
- global api_settings
- setting, value = kwargs['setting'], kwargs['value']
- if setting == 'SIMPLE_JWT':
- api_settings = APISettings(value, DEFAULTS, IMPORT_STRINGS)
- setting_changed.connect(reload_api_settings)
|