@@ -387,75 +387,75 @@ encoder = TextEncoder.new()
387387EXPIRY = 60
388388
389389class Default (WorkerEntrypoint):
390- async def fetch (self , request, env ):
391- # Get the secret key
392- secret_key_data = encoder .encode (env . SECRET_DATA if hasattr ( env, " SECRET_DATA" ) else " my secret symmetric key" )
390+ async def fetch (self , request):
391+ # Get the secret key
392+ secret_key_data = encoder .encode (getattr ( self . env , " SECRET_DATA" , None) or " my secret symmetric key" )
393393
394- # Import the secret as a CryptoKey for both ' sign' and ' verify' operations
395- key = await crypto .subtle .importKey (
396- " raw" ,
397- secret_key_data,
398- to_js ({" name" : " HMAC" , " hash" : " SHA-256" }),
399- False,
400- [" sign" , " verify" ]
401- )
394+ # Import the secret as a CryptoKey for both ' sign' and ' verify' operations
395+ key = await crypto .subtle .importKey (
396+ " raw" ,
397+ secret_key_data,
398+ to_js ({" name" : " HMAC" , " hash" : " SHA-256" }),
399+ False,
400+ [" sign" , " verify" ]
401+ )
402402
403- url = URL .new (request .url )
403+ url = URL .new (request .url )
404404
405- if url .pathname .startswith (" /generate/" ):
406- url .pathname = url .pathname .replace (" /generate/" , " /" , 1 )
405+ if url .pathname .startswith (" /generate/" ):
406+ url .pathname = url .pathname .replace (" /generate/" , " /" , 1 )
407407
408- timestamp = int (Date .now () / 1000 )
408+ timestamp = int (Date .now () / 1000 )
409409
410- # Data to authenticate
411- data_to_authenticate = f" {url.pathname}{timestamp}"
410+ # Data to authenticate
411+ data_to_authenticate = f" {url.pathname}{timestamp}"
412412
413- # Sign the data
414- mac = await crypto .subtle .sign (
415- " HMAC" ,
416- key,
417- encoder .encode (data_to_authenticate)
418- )
413+ # Sign the data
414+ mac = await crypto .subtle .sign (
415+ " HMAC" ,
416+ key,
417+ encoder .encode (data_to_authenticate)
418+ )
419419
420- # Convert to base64
421- base64_mac = Buffer .from (mac).toString (" base64" )
420+ # Convert to base64
421+ base64_mac = Buffer .from (mac).toString (" base64" )
422422
423- # Set the verification parameter
424- url .searchParams .set (" verify" , f" {timestamp}-{base64_mac}" )
423+ # Set the verification parameter
424+ url .searchParams .set (" verify" , f" {timestamp}-{base64_mac}" )
425425
426- return Response .new (f" {url.pathname}{url.search}" )
427- else:
428- # Verify the request
429- if not " verify" in url .searchParams :
430- return Response .new (" Missing query parameter" , status= 403 )
426+ return Response .new (f" {url.pathname}{url.search}" )
427+ else:
428+ # Verify the request
429+ if not " verify" in url .searchParams :
430+ return Response .new (" Missing query parameter" , status= 403 )
431431
432- verify_param = url .searchParams .get (" verify" )
433- timestamp, hmac = verify_param .split (" -" )
432+ verify_param = url .searchParams .get (" verify" )
433+ timestamp, hmac = verify_param .split (" -" )
434434
435- asserted_timestamp = int (timestamp)
435+ asserted_timestamp = int (timestamp)
436436
437- data_to_authenticate = f" {url.pathname}{asserted_timestamp}"
437+ data_to_authenticate = f" {url.pathname}{asserted_timestamp}"
438438
439- received_mac = Buffer .from (hmac, " base64" )
439+ received_mac = Buffer .from (hmac, " base64" )
440440
441- # Verify the signature
442- verified = await crypto .subtle .verify (
443- " HMAC" ,
444- key,
445- received_mac,
446- encoder .encode (data_to_authenticate)
447- )
441+ # Verify the signature
442+ verified = await crypto .subtle .verify (
443+ " HMAC" ,
444+ key,
445+ received_mac,
446+ encoder .encode (data_to_authenticate)
447+ )
448448
449- if not verified:
450- return Response .new (" Invalid MAC" , status= 403 )
449+ if not verified:
450+ return Response .new (" Invalid MAC" , status= 403 )
451451
452- # Check expiration
453- if Date .now () / 1000 > asserted_timestamp + EXPIRY :
454- expiry_date = Date .new ((asserted_timestamp + EXPIRY ) * 1000 )
455- return Response .new (f" URL expired at {expiry_date}" , status= 403 )
452+ # Check expiration
453+ if Date .now () / 1000 > asserted_timestamp + EXPIRY :
454+ expiry_date = Date .new ((asserted_timestamp + EXPIRY ) * 1000 )
455+ return Response .new (f" URL expired at {expiry_date}" , status= 403 )
456456
457- # Proxy to example .com if verification passes
458- return fetch (URL .new (f" https://example.com{url.pathname}" ), request)
457+ # Proxy to example .com if verification passes
458+ return fetch (URL .new (f" https://example.com{url.pathname}" ), request)
459459` ` `
460460
461461</TabItem> </Tabs>
0 commit comments