@@ -109,6 +109,11 @@ def bad_request(e):
109
109
return content , 400
110
110
111
111
112
+ def jwt_error (e ):
113
+ print (f"JWT verification failed: { e } " )
114
+ return "Payload verification failed!" , 401
115
+
116
+
112
117
# Helper for template rendering
113
118
def render (template , context ):
114
119
return flask .render_template (template , ** context )
@@ -188,14 +193,15 @@ def auth_callback():
188
193
@app .route ('/bigcommerce/load' )
189
194
def load ():
190
195
# Decode and verify payload
191
- payload = flask .request .args ['signed_payload' ]
192
- user_data = BigcommerceApi .oauth_verify_payload (payload , client_secret ())
193
- if user_data is False :
194
- return "Payload verification failed!" , 401
196
+ payload = flask .request .args ['signed_payload_jwt' ]
197
+ try :
198
+ user_data = BigcommerceApi .oauth_verify_payload_jwt (payload , client_secret (), client_id ())
199
+ except Exception as e :
200
+ return jwt_error (e )
195
201
196
202
bc_user_id = user_data ['user' ]['id' ]
197
203
email = user_data ['user' ]['email' ]
198
- store_hash = user_data ['store_hash' ]
204
+ store_hash = user_data ['sub' ]. split ( 'stores/' )[ 1 ]
199
205
200
206
# Lookup store
201
207
store = Store .query .filter_by (store_hash = store_hash ).first ()
@@ -224,13 +230,14 @@ def load():
224
230
@app .route ('/bigcommerce/uninstall' )
225
231
def uninstall ():
226
232
# Decode and verify payload
227
- payload = flask .request .args ['signed_payload' ]
228
- user_data = BigcommerceApi .oauth_verify_payload (payload , client_secret ())
229
- if user_data is False :
230
- return "Payload verification failed!" , 401
233
+ payload = flask .request .args ['signed_payload_jwt' ]
234
+ try :
235
+ user_data = BigcommerceApi .oauth_verify_payload_jwt (payload , client_secret (), client_id ())
236
+ except Exception as e :
237
+ return jwt_error (e )
231
238
232
239
# Lookup store
233
- store_hash = user_data ['store_hash' ]
240
+ store_hash = user_data ['sub' ]. split ( 'stores/' )[ 1 ]
234
241
store = Store .query .filter_by (store_hash = store_hash ).first ()
235
242
if store is None :
236
243
return "Store not found!" , 401
@@ -250,14 +257,13 @@ def uninstall():
250
257
# The Remove User Callback URL.
251
258
@app .route ('/bigcommerce/remove-user' )
252
259
def remove_user ():
253
- # Decode and verify payload
254
- payload = flask . request . args [ 'signed_payload' ]
255
- user_data = BigcommerceApi .oauth_verify_payload (payload , client_secret ())
256
- if user_data is False :
257
- return "Payload verification failed!" , 401
260
+ payload = flask . request . args [ 'signed_payload_jwt' ]
261
+ try :
262
+ user_data = BigcommerceApi .oauth_verify_payload_jwt (payload , client_secret (), client_id ())
263
+ except Exception as e :
264
+ return jwt_error ( e )
258
265
259
- # Lookup store
260
- store_hash = user_data ['store_hash' ]
266
+ store_hash = user_data ['sub' ].split ('stores/' )[1 ]
261
267
store = Store .query .filter_by (store_hash = store_hash ).first ()
262
268
if store is None :
263
269
return "Store not found!" , 401
0 commit comments