Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/rest_framework_simplejwt/views.py: 86%

48 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1from django.utils.module_loading import import_string 

2from rest_framework import generics, status 

3from rest_framework.response import Response 

4 

5from . import serializers 

6from .authentication import AUTH_HEADER_TYPES 

7from .exceptions import InvalidToken, TokenError 

8from .settings import api_settings 

9 

10 

11class TokenViewBase(generics.GenericAPIView): 

12 permission_classes = () 

13 authentication_classes = () 

14 

15 serializer_class = None 

16 _serializer_class = "" 

17 

18 www_authenticate_realm = "api" 

19 

20 def get_serializer_class(self): 

21 """ 

22 If serializer_class is set, use it directly. Otherwise get the class from settings. 

23 """ 

24 

25 if self.serializer_class: 25 ↛ 27line 25 didn't jump to line 27, because the condition on line 25 was never false

26 return self.serializer_class 

27 try: 

28 return import_string(self._serializer_class) 

29 except ImportError: 

30 msg = "Could not import serializer '%s'" % self._serializer_class 

31 raise ImportError(msg) 

32 

33 def get_authenticate_header(self, request): 

34 return '{} realm="{}"'.format( 

35 AUTH_HEADER_TYPES[0], 

36 self.www_authenticate_realm, 

37 ) 

38 

39 def post(self, request, *args, **kwargs): 

40 serializer = self.get_serializer(data=request.data) 

41 

42 try: 

43 serializer.is_valid(raise_exception=True) 

44 except TokenError as e: 

45 raise InvalidToken(e.args[0]) 

46 

47 return Response(serializer.validated_data, status=status.HTTP_200_OK) 

48 

49 

50class TokenObtainPairView(TokenViewBase): 

51 """ 

52 Takes a set of user credentials and returns an access and refresh JSON web 

53 token pair to prove the authentication of those credentials. 

54 """ 

55 

56 _serializer_class = api_settings.TOKEN_OBTAIN_SERIALIZER 

57 

58 

59token_obtain_pair = TokenObtainPairView.as_view() 

60 

61 

62class TokenRefreshView(TokenViewBase): 

63 """ 

64 Takes a refresh type JSON web token and returns an access type JSON web 

65 token if the refresh token is valid. 

66 """ 

67 

68 _serializer_class = api_settings.TOKEN_REFRESH_SERIALIZER 

69 

70 

71token_refresh = TokenRefreshView.as_view() 

72 

73 

74class TokenObtainSlidingView(TokenViewBase): 

75 """ 

76 Takes a set of user credentials and returns a sliding JSON web token to 

77 prove the authentication of those credentials. 

78 """ 

79 

80 _serializer_class = api_settings.SLIDING_TOKEN_OBTAIN_SERIALIZER 

81 

82 

83token_obtain_sliding = TokenObtainSlidingView.as_view() 

84 

85 

86class TokenRefreshSlidingView(TokenViewBase): 

87 """ 

88 Takes a sliding JSON web token and returns a new, refreshed version if the 

89 token's refresh period has not expired. 

90 """ 

91 

92 _serializer_class = api_settings.SLIDING_TOKEN_REFRESH_SERIALIZER 

93 

94 

95token_refresh_sliding = TokenRefreshSlidingView.as_view() 

96 

97 

98class TokenVerifyView(TokenViewBase): 

99 """ 

100 Takes a token and indicates if it is valid. This view provides no 

101 information about a token's fitness for a particular use. 

102 """ 

103 

104 _serializer_class = api_settings.TOKEN_VERIFY_SERIALIZER 

105 

106 

107token_verify = TokenVerifyView.as_view() 

108 

109 

110class TokenBlacklistView(TokenViewBase): 

111 """ 

112 Takes a token and blacklists it. Must be used with the 

113 `rest_framework_simplejwt.token_blacklist` app installed. 

114 """ 

115 

116 _serializer_class = api_settings.TOKEN_BLACKLIST_SERIALIZER 

117 

118 

119token_blacklist = TokenBlacklistView.as_view()