Skip to content

Commit febd710

Browse files
committed
Support *_with_http_info
1 parent 13c6c67 commit febd710

File tree

4 files changed

+144
-20
lines changed

4 files changed

+144
-20
lines changed

generate-code.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,27 @@ def run_command(command):
2222
def add_stateless_channel_token_wrappers():
2323
for fname in ['channel_access_token.py', 'async_channel_access_token.py']:
2424
with open(f'linebot/v3/oauth/api/{fname}', 'a') as fp:
25-
fp.write("\n")
26-
fp.write(" def issue_stateless_channel_token_by_jwt_assertion(self, client_assertion, **kwargs):\n")
27-
fp.write(" return self.issue_stateless_channel_token(\n")
28-
fp.write(" grant_type='client_credentials',\n")
29-
fp.write(" client_assertion_type='urn:ietf:params:oauth:client-assertion-type:jwt-bearer',\n")
30-
fp.write(" client_assertion=client_assertion,\n")
31-
fp.write(" client_id='',\n")
32-
fp.write(" client_secret='',\n")
33-
fp.write(" **kwargs,\n")
34-
fp.write(" )\n")
35-
fp.write("\n")
36-
fp.write(" def issue_stateless_channel_token_by_client_secret(self, client_id, client_secret, **kwargs):\n")
37-
fp.write(" return self.issue_stateless_channel_token(\n")
38-
fp.write(" grant_type='client_credentials',\n")
39-
fp.write(" client_assertion_type='',\n")
40-
fp.write(" client_assertion='',\n")
41-
fp.write(" client_id=client_id,\n")
42-
fp.write(" client_secret=client_secret,\n")
43-
fp.write(" **kwargs,\n")
44-
fp.write(" )\n")
25+
for base_method in ['issue_stateless_channel_token', 'issue_stateless_channel_token_with_http_info']:
26+
fp.write("\n")
27+
fp.write(f" def {base_method}_by_jwt_assertion(self, client_assertion, **kwargs):\n")
28+
fp.write(f" return self.{base_method}(\n")
29+
fp.write(" grant_type='client_credentials',\n")
30+
fp.write(" client_assertion_type='urn:ietf:params:oauth:client-assertion-type:jwt-bearer',\n")
31+
fp.write(" client_assertion=client_assertion,\n")
32+
fp.write(" client_id='',\n")
33+
fp.write(" client_secret='',\n")
34+
fp.write(" **kwargs,\n")
35+
fp.write(" )\n")
36+
fp.write("\n")
37+
fp.write(f" def {base_method}_by_client_secret(self, client_id, client_secret, **kwargs):\n")
38+
fp.write(f" return self.{base_method}(\n")
39+
fp.write(" grant_type='client_credentials',\n")
40+
fp.write(" client_assertion_type='',\n")
41+
fp.write(" client_assertion='',\n")
42+
fp.write(" client_id=client_id,\n")
43+
fp.write(" client_secret=client_secret,\n")
44+
fp.write(" **kwargs,\n")
45+
fp.write(" )\n")
4546

4647

4748
def rewrite_liff_function_name_backward_compats():

linebot/v3/oauth/api/async_channel_access_token.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,3 +1396,23 @@ def issue_stateless_channel_token_by_client_secret(self, client_id, client_secre
13961396
client_secret=client_secret,
13971397
**kwargs,
13981398
)
1399+
1400+
def issue_stateless_channel_token_with_http_info_by_jwt_assertion(self, client_assertion, **kwargs):
1401+
return self.issue_stateless_channel_token_with_http_info(
1402+
grant_type='client_credentials',
1403+
client_assertion_type='urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
1404+
client_assertion=client_assertion,
1405+
client_id='',
1406+
client_secret='',
1407+
**kwargs,
1408+
)
1409+
1410+
def issue_stateless_channel_token_with_http_info_by_client_secret(self, client_id, client_secret, **kwargs):
1411+
return self.issue_stateless_channel_token_with_http_info(
1412+
grant_type='client_credentials',
1413+
client_assertion_type='',
1414+
client_assertion='',
1415+
client_id=client_id,
1416+
client_secret=client_secret,
1417+
**kwargs,
1418+
)

linebot/v3/oauth/api/channel_access_token.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,3 +1314,23 @@ def issue_stateless_channel_token_by_client_secret(self, client_id, client_secre
13141314
client_secret=client_secret,
13151315
**kwargs,
13161316
)
1317+
1318+
def issue_stateless_channel_token_with_http_info_by_jwt_assertion(self, client_assertion, **kwargs):
1319+
return self.issue_stateless_channel_token_with_http_info(
1320+
grant_type='client_credentials',
1321+
client_assertion_type='urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
1322+
client_assertion=client_assertion,
1323+
client_id='',
1324+
client_secret='',
1325+
**kwargs,
1326+
)
1327+
1328+
def issue_stateless_channel_token_with_http_info_by_client_secret(self, client_id, client_secret, **kwargs):
1329+
return self.issue_stateless_channel_token_with_http_info(
1330+
grant_type='client_credentials',
1331+
client_assertion_type='',
1332+
client_assertion='',
1333+
client_id=client_id,
1334+
client_secret=client_secret,
1335+
**kwargs,
1336+
)

tests/api/test_issue_stateless_channel_token.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,89 @@ def test_issue_stateless_channel_token_by_client_secret(self):
104104
self.assertNotIn('client_assertion_type', encoded_body)
105105
self.assertNotIn('client_assertion', encoded_body)
106106

107+
def test_issue_stateless_channel_token_with_http_info_by_jwt_assertion(self):
108+
client_assertion = 'eyJhbGciOiJSUzI.q....'
109+
client_assertion_type = 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer'
110+
111+
with HTTPServer() as httpserver:
112+
httpserver.expect_request(
113+
uri="/oauth2/v3/token",
114+
method="POST",
115+
).respond_with_json(
116+
{
117+
'access_token': 'test_access_token',
118+
'expires_in': 900,
119+
'token_type': 'Bearer',
120+
},
121+
status=200,
122+
)
123+
124+
configuration = Configuration(host=httpserver.url_for("/"))
125+
with ApiClient(configuration) as api_client:
126+
api = ChannelAccessToken(api_client)
127+
api.line_base_path = httpserver.url_for("/")
128+
129+
api_response = api.issue_stateless_channel_token_with_http_info_by_jwt_assertion(
130+
client_assertion,
131+
)
132+
133+
self.assertEqual(api_response.status_code, 200)
134+
response = api_response.data
135+
self.assertEqual(response.access_token, 'test_access_token')
136+
self.assertEqual(response.expires_in, 900)
137+
self.assertEqual(response.token_type, 'Bearer')
138+
self.assertEqual(len(httpserver.log), 1)
139+
140+
request, _ = httpserver.log[0]
141+
encoded_body = parse_qs(request.data.decode('utf-8'))
142+
self.assertEqual(encoded_body['grant_type'], ['client_credentials'])
143+
self.assertEqual(encoded_body['client_assertion_type'], [client_assertion_type])
144+
self.assertEqual(encoded_body['client_assertion'], [client_assertion])
145+
self.assertNotIn('client_id', encoded_body)
146+
self.assertNotIn('client_secret', encoded_body)
147+
148+
def test_issue_stateless_channel_token_with_http_info_by_client_secret(self):
149+
client_id = 'test_client_id'
150+
client_secret = 'test_client_secret'
151+
152+
with HTTPServer() as httpserver:
153+
httpserver.expect_request(
154+
uri="/oauth2/v3/token",
155+
method="POST",
156+
).respond_with_json(
157+
{
158+
'access_token': 'test_access_token',
159+
'expires_in': 900,
160+
'token_type': 'Bearer',
161+
},
162+
status=200,
163+
)
164+
165+
configuration = Configuration(host=httpserver.url_for("/"))
166+
with ApiClient(configuration) as api_client:
167+
api = ChannelAccessToken(api_client)
168+
api.line_base_path = httpserver.url_for("/")
169+
170+
api_response = api.issue_stateless_channel_token_with_http_info_by_client_secret(
171+
client_id,
172+
client_secret,
173+
)
174+
175+
self.assertEqual(api_response.status_code, 200)
176+
response = api_response.data
177+
self.assertEqual(response.access_token, 'test_access_token')
178+
self.assertEqual(response.expires_in, 900)
179+
self.assertEqual(response.token_type, 'Bearer')
180+
self.assertEqual(len(httpserver.log), 1)
181+
182+
request, _ = httpserver.log[0]
183+
encoded_body = parse_qs(request.data.decode('utf-8'))
184+
self.assertEqual(encoded_body['grant_type'], ['client_credentials'])
185+
self.assertEqual(encoded_body['client_id'], [client_id])
186+
self.assertEqual(encoded_body['client_secret'], [client_secret])
187+
self.assertNotIn('client_assertion_type', encoded_body)
188+
self.assertNotIn('client_assertion', encoded_body)
189+
107190

108191
if __name__ == '__main__':
109192
unittest.main()

0 commit comments

Comments
 (0)