@@ -39,6 +39,7 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
39
39
token_expiry_date_format str: format of the datetime; provide it if expires_in is returned in datetime instead of seconds
40
40
token_expiry_is_time_of_expiration bool: set True it if expires_in is returned as time of expiration instead of the number seconds until expiration
41
41
refresh_request_body (Optional[Mapping[str, Any]]): The request body to send in the refresh request
42
+ refresh_request_headers (Optional[Mapping[str, Any]]): The request headers to send in the refresh request
42
43
grant_type: The grant_type to request for access_token. If set to refresh_token, the refresh_token parameter has to be provided
43
44
message_repository (MessageRepository): the message repository used to emit logs on HTTP requests
44
45
"""
@@ -56,8 +57,13 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
56
57
token_expiry_is_time_of_expiration : bool = False
57
58
access_token_name : Union [InterpolatedString , str ] = "access_token"
58
59
access_token_value : Optional [Union [InterpolatedString , str ]] = None
60
+ client_id_name : Union [InterpolatedString , str ] = "client_id"
61
+ client_secret_name : Union [InterpolatedString , str ] = "client_secret"
59
62
expires_in_name : Union [InterpolatedString , str ] = "expires_in"
63
+ refresh_token_name : Union [InterpolatedString , str ] = "refresh_token"
60
64
refresh_request_body : Optional [Mapping [str , Any ]] = None
65
+ refresh_request_headers : Optional [Mapping [str , Any ]] = None
66
+ grant_type_name : Union [InterpolatedString , str ] = "grant_type"
61
67
grant_type : Union [InterpolatedString , str ] = "refresh_token"
62
68
message_repository : MessageRepository = NoopMessageRepository ()
63
69
@@ -69,8 +75,15 @@ def __post_init__(self, parameters: Mapping[str, Any]) -> None:
69
75
)
70
76
else :
71
77
self ._token_refresh_endpoint = None
78
+ self ._client_id_name = InterpolatedString .create (self .client_id_name , parameters = parameters )
72
79
self ._client_id = InterpolatedString .create (self .client_id , parameters = parameters )
80
+ self ._client_secret_name = InterpolatedString .create (
81
+ self .client_secret_name , parameters = parameters
82
+ )
73
83
self ._client_secret = InterpolatedString .create (self .client_secret , parameters = parameters )
84
+ self ._refresh_token_name = InterpolatedString .create (
85
+ self .refresh_token_name , parameters = parameters
86
+ )
74
87
if self .refresh_token is not None :
75
88
self ._refresh_token : Optional [InterpolatedString ] = InterpolatedString .create (
76
89
self .refresh_token , parameters = parameters
@@ -83,10 +96,16 @@ def __post_init__(self, parameters: Mapping[str, Any]) -> None:
83
96
self .expires_in_name = InterpolatedString .create (
84
97
self .expires_in_name , parameters = parameters
85
98
)
99
+ self .grant_type_name = InterpolatedString .create (
100
+ self .grant_type_name , parameters = parameters
101
+ )
86
102
self .grant_type = InterpolatedString .create (self .grant_type , parameters = parameters )
87
103
self ._refresh_request_body = InterpolatedMapping (
88
104
self .refresh_request_body or {}, parameters = parameters
89
105
)
106
+ self ._refresh_request_headers = InterpolatedMapping (
107
+ self .refresh_request_headers or {}, parameters = parameters
108
+ )
90
109
self ._token_expiry_date : pendulum .DateTime = (
91
110
pendulum .parse (
92
111
InterpolatedString .create (self .token_expiry_date , parameters = parameters ).eval (
@@ -122,18 +141,27 @@ def get_token_refresh_endpoint(self) -> Optional[str]:
122
141
return refresh_token_endpoint
123
142
return None
124
143
144
+ def get_client_id_name (self ) -> str :
145
+ return self ._client_id_name .eval (self .config ) # type: ignore # eval returns a string in this context
146
+
125
147
def get_client_id (self ) -> str :
126
148
client_id : str = self ._client_id .eval (self .config )
127
149
if not client_id :
128
150
raise ValueError ("OAuthAuthenticator was unable to evaluate client_id parameter" )
129
151
return client_id
130
152
153
+ def get_client_secret_name (self ) -> str :
154
+ return self ._client_secret_name .eval (self .config ) # type: ignore # eval returns a string in this context
155
+
131
156
def get_client_secret (self ) -> str :
132
157
client_secret : str = self ._client_secret .eval (self .config )
133
158
if not client_secret :
134
159
raise ValueError ("OAuthAuthenticator was unable to evaluate client_secret parameter" )
135
160
return client_secret
136
161
162
+ def get_refresh_token_name (self ) -> str :
163
+ return self ._refresh_token_name .eval (self .config ) # type: ignore # eval returns a string in this context
164
+
137
165
def get_refresh_token (self ) -> Optional [str ]:
138
166
return None if self ._refresh_token is None else str (self ._refresh_token .eval (self .config ))
139
167
@@ -146,12 +174,18 @@ def get_access_token_name(self) -> str:
146
174
def get_expires_in_name (self ) -> str :
147
175
return self .expires_in_name .eval (self .config ) # type: ignore # eval returns a string in this context
148
176
177
+ def get_grant_type_name (self ) -> str :
178
+ return self .grant_type_name .eval (self .config ) # type: ignore # eval returns a string in this context
179
+
149
180
def get_grant_type (self ) -> str :
150
181
return self .grant_type .eval (self .config ) # type: ignore # eval returns a string in this context
151
182
152
183
def get_refresh_request_body (self ) -> Mapping [str , Any ]:
153
184
return self ._refresh_request_body .eval (self .config )
154
185
186
+ def get_refresh_request_headers (self ) -> Mapping [str , Any ]:
187
+ return self ._refresh_request_headers .eval (self .config )
188
+
155
189
def get_token_expiry_date (self ) -> pendulum .DateTime :
156
190
return self ._token_expiry_date # type: ignore # _token_expiry_date is a pendulum.DateTime. It is never None despite what mypy thinks
157
191
0 commit comments