@@ -18,7 +18,7 @@ def update_entity(self):
18
18
"""
19
19
from abc import ABC , abstractmethod
20
20
import jwt
21
- from typing import Any
21
+ from typing import Any , Union
22
22
from datetime import datetime
23
23
from dateutil .relativedelta import *
24
24
@@ -43,53 +43,68 @@ class JWTAuthStrategy(BaseAuthStrategy):
43
43
"""
44
44
Uses SHA-256 hash algorithm
45
45
"""
46
+ #: The reference to the entity key. Defaulted to `id`. See :class:`~flask_jwt_router._extensions`
47
+ #: for more information.
48
+ entity_key : str = "id"
49
+
50
+ #: The reference to the entity key. Defaulted to `DEFAULT_SECRET_KEY`.
51
+ #: See :class:`~flask_jwt_router._extensions` for more information.
52
+ secret_key : str = "DEFAULT_SECRET_KEY"
53
+
54
+ #: The reference to the entity ID.
55
+ entity_id : str = None
46
56
47
57
def __init__ (self ):
48
58
super (JWTAuthStrategy , self ).__init__ ()
49
59
50
- def encode_token (self , extensions : Config , entity_id : Any , exp : Any ):
60
+ def encode_token (self , extensions : Config , entity_id : Any , exp : Any ) -> str :
51
61
"""
52
- :param extensions:
53
- :param entity_id:
54
- :param exp:
55
- :return:
62
+ :param extensions: See :class:`~flask_jwt_router._extensions`
63
+ :param entity_id: Normally the primary key `id` or `user_id`
64
+ :param exp: The expiry duration set when encoding a new token
65
+ :return: str
56
66
"""
57
- entity_key = extensions .entity_key
58
- secret_key = extensions .secret_key
67
+ #: The reference to the entity key. Defaulted to `id`. See :class:`~flask_jwt_router._extensions`
68
+ #: for more information.
69
+ self .entity_key = extensions .entity_key
70
+
71
+ #: The reference to the entity key. Defaulted to `DEFAULT_SECRET_KEY`.
72
+ # See :class:`~flask_jwt_router._extensions` for more information.
73
+ self .secret_key = extensions .secret_key
59
74
60
75
encoded = jwt .encode ({
61
- entity_key : entity_id ,
76
+ self . entity_key : entity_id ,
62
77
"exp" : datetime .utcnow () + relativedelta (days = + exp ) # TODO options for different time types
63
78
},
64
- secret_key ,
79
+ self . secret_key ,
65
80
algorithm = "HS256"
66
81
).decode ("utf-8" )
67
82
return encoded
68
83
69
- def register_entity (self , extensions : Config , exp : Any , ** kwargs ):
84
+ def register_entity (self , extensions : Config , exp : Any , ** kwargs ) -> Union [ str , None ] :
70
85
"""
71
- :param extensions:
72
- :param exp:
73
- :param kwargs:
74
- :return:
86
+ :param extensions: See :class:`~flask_jwt_router._extensions`
87
+ :param exp: The expiry duration set when encoding a new token
88
+ :param kwargs: Gets entity_id
89
+ :return: Union[str, None]
75
90
"""
76
- entity_id = kwargs .get ("entity_id" , None )
77
- if entity_id :
78
- token = self .encode_token (extensions , exp , entity_id )
91
+ self . entity_id = kwargs .get ("entity_id" , None )
92
+ if self . entity_id :
93
+ token = self .encode_token (extensions , exp , self . entity_id )
79
94
return token
80
95
else :
81
96
return None
82
97
83
- def update_entity (self , extensions : Config , exp : Any , ** kwargs ):
98
+ def update_entity (self , extensions : Config , exp : Any , ** kwargs ) -> Union [ str , None ] :
84
99
"""
85
100
:param extensions:
86
101
:param exp:
87
102
:param kwargs:
88
- :return:
103
+ :return: Union[str, None]
89
104
"""
90
- entity_id = kwargs .get ("entity_id" , None )
91
- if entity_id :
92
- token = self .encode_token (extensions , exp , entity_id )
105
+ self . entity_id = kwargs .get ("entity_id" , None )
106
+ if self . entity_id :
107
+ token = self .encode_token (extensions , exp , self . entity_id )
93
108
return token
94
109
else :
95
110
return None
0 commit comments