77import binascii
88import time
99import re
10+ import copy
1011
1112from cryptography .hazmat .backends import default_backend
1213from cryptography .hazmat .primitives .asymmetric import ec , utils as ecutils
@@ -254,23 +255,24 @@ def verify_token(self, validation_token, verification_token):
254255 return False
255256
256257 def _base_sign (self , claims ):
257- if not claims .get ('exp' ):
258- claims ['exp' ] = str (int (time .time ()) + 86400 )
258+ cclaims = copy .deepcopy (claims )
259+ if not cclaims .get ('exp' ):
260+ cclaims ['exp' ] = str (int (time .time ()) + 86400 )
259261 if not re .match ("mailto:.+@.+\..+" ,
260- claims .get ('sub' , '' ),
262+ cclaims .get ('sub' , '' ),
261263 re .IGNORECASE ):
262264 raise VapidException (
263265 "Missing 'sub' from claims. "
264266 "'sub' is your admin email as a mailto: link." )
265267 if not re .match ("^https?:\/\/[^\/\.:]+\.[^\/:]+(:\d+)?$" ,
266- claims .get ("aud" , "" ),
268+ cclaims .get ("aud" , "" ),
267269 re .IGNORECASE ):
268270 raise VapidException (
269271 "Missing 'aud' from claims. "
270272 "'aud' is the scheme, host and optional port for this "
271273 "transaction e.g. https://example.com:8080" )
272274
273- return claims
275+ return cclaims
274276
275277 def sign (self , claims , crypto_key = None ):
276278 """Sign a set of claims.
@@ -284,8 +286,7 @@ def sign(self, claims, crypto_key=None):
284286 :rtype: dict
285287
286288 """
287- claims = self ._base_sign (claims )
288- sig = sign (claims , self .private_key )
289+ sig = sign (self ._base_sign (claims ), self .private_key )
289290 pkey = 'p256ecdsa='
290291 pkey += b64urlencode (
291292 self .public_key .public_numbers ().encode_point ())
@@ -307,8 +308,7 @@ class Vapid02(Vapid01):
307308 _schema = "vapid"
308309
309310 def sign (self , claims , crypto_key = None ):
310- claims = self ._base_sign (claims )
311- sig = sign (claims , self .private_key )
311+ sig = sign (self ._base_sign (claims ), self .private_key )
312312 pkey = self .public_key .public_numbers ().encode_point ()
313313 return {
314314 "Authorization" : "{schema} t={t},k={k}" .format (
0 commit comments