@@ -50,7 +50,7 @@ def __init__(self, token_type=None, token_name='__token__',
5050 key = None , algorithm = 'sha256' , salt = None ,
5151 start_time = None , end_time = None , window_seconds = None ,
5252 field_delimiter = '~' , acl_delimiter = '!' ,
53- escape_early = False , escape_early_upper = False , verbose = False ):
53+ escape_early = False , verbose = False ):
5454
5555 self .token_type = token_type
5656 self .token_name = token_name
@@ -66,31 +66,27 @@ def __init__(self, token_type=None, token_name='__token__',
6666 self .field_delimiter = field_delimiter
6767 self .acl_delimiter = acl_delimiter
6868 self .escape_early = escape_early
69- self .escape_early_upper = escape_early_upper
7069 self .verbose = verbose
7170
72- def escapeEarly (self , text ):
73- if self .escape_early or self .escape_early_upper :
74- # Only escape the text if we are configured for escape early.
75- new_text = quote_plus (text )
76- if self .escape_early_upper :
77- def toUpper (match ):
78- return match .group (1 ).upper ()
79- return re .sub (r'(%..)' , toUpper , new_text )
80- else :
81- def toLower (match ):
82- return match .group (1 ).lower ()
83- return re .sub (r'(%..)' , toLower , new_text )
84-
85- # Return the original, unmodified text.
86- return text
71+ def _escapeEarly (self , text ):
72+ if self .escape_early :
73+ def toLower (match ):
74+ return match .group (1 ).lower ()
75+ return re .sub (r'(%..)' , toLower , quote_plus (text ))
76+ else :
77+ return text
8778
88- def _generateToken (self , url = None , acl = None ,
89- window_seconds = None , start_time = None , end_time = None ,
79+ def generateToken (self , url = None , acl = None , start_time = None ,
80+ end_time = None , window_seconds = None ,
9081 ip = None , payload = None , session_id = None ):
82+ if not start_time :
83+ start_time = self .start_time
84+ if not end_time :
85+ end_time = self .end_time
86+ if not window_seconds :
87+ window_seconds = self .window_seconds
88+
9189 if str (start_time ).lower () == 'now' :
92- # Initialize the start time if we are asked for a starting time of
93- # now.
9490 start_time = int (time .mktime (time .gmtime ()))
9591 elif start_time is not None :
9692 try :
@@ -113,7 +109,7 @@ def _generateToken(self, url=None, acl=None,
113109 if end_time is None :
114110 if int (window_seconds or 0 ) > 0 :
115111 if start_time is None :
116- # If we have a window window without a start time,
112+ # If we have a window_seconds without a start time,
117113 # calculate the end time starting from the current time.
118114 end_time = int (time .mktime (time .gmtime ())) + \
119115 window_seconds
@@ -123,21 +119,11 @@ def _generateToken(self, url=None, acl=None,
123119 raise AuthTokenError ('You must provide an expiration time or '
124120 'a duration window..' )
125121
126- try :
127- if end_time < start_time :
128- raise AuthTokenError ('Token will have already expired.' )
129- except TypeError :
130- pass
122+ if start_time and (end_time < start_time ):
123+ raise AuthTokenError ('Token will have already expired.' )
131124
132- if ((acl is None and url is None ) or
133- acl is not None and url is not None and
134- (len (acl ) <= 0 ) and (len (url ) <= 0 )):
135- raise AuthTokenError ('You must provide a URL or an ACL.' )
136-
137- if (acl is not None and url is not None and
138- (len (acl ) > 0 ) and (len (url ) > 0 )):
139- raise AuthTokenError ('You must provide a URL OR an ACL, '
140- 'not both.' )
125+ if (not acl and not url ) or (acl and url ):
126+ raise AuthTokenError ('You must provide a URL or an ACL' )
141127
142128 if self .verbose :
143129 print ('''
@@ -159,77 +145,56 @@ def _generateToken(self, url=None, acl=None,
159145ACL Delimiter : {6}
160146Escape Early : {7}
161147Generating token...''' .format (self .token_type if self .token_type else '' , #0
162- self .token_name if self .token_name else '' , #1
163- self .key if self .key else '' , #2
164- self .algorithm if self .algorithm else '' , #3
165- self .salt if self .salt else '' , #4
166- self .field_delimiter if self .field_delimiter else '' , #5
167- self .acl_delimiter if self .acl_delimiter else '' , #6
168- self .escape_early if self .escape_early else '' , #7
169- start_time if start_time else '' , #8
170- end_time if end_time else '' , #9
171- window_seconds if window_seconds else '' , #10
172- ip if ip else '' , #11
173- url if url else '' , #12
174- acl if acl else '' , #13
175- payload if payload else '' , #14
176- session_id if session_id else '' )) #15
177-
178- hash_source = ''
179- new_token = ''
148+ self .token_name if self .token_name else '' , #1
149+ self .key if self .key else '' , #2
150+ self .algorithm if self .algorithm else '' , #3
151+ self .salt if self .salt else '' , #4
152+ self .field_delimiter if self .field_delimiter else '' , #5
153+ self .acl_delimiter if self .acl_delimiter else '' , #6
154+ self .escape_early if self .escape_early else '' , #7
155+ start_time if start_time else '' , #8
156+ end_time if end_time else '' , #9
157+ window_seconds if window_seconds else '' , #10
158+ ip if ip else '' , #11
159+ url if url else '' , #12
160+ acl if acl else '' , #13
161+ payload if payload else '' , #14
162+ session_id if session_id else '' )) #15
163+
164+ hash_source = []
165+ new_token = []
180166
181167 if ip :
182- new_token += 'ip={0}{1}' .format (self .escapeEarly (ip ),
183- self .field_delimiter )
168+ new_token .append ('ip={0}' .format (self ._escapeEarly (ip )))
184169
185- if start_time is not None :
186- new_token += 'st={0}{1} ' .format (start_time , self . field_delimiter )
170+ if start_time :
171+ new_token . append ( 'st={0}' .format (start_time ) )
187172
188- new_token += 'exp={0}{1} ' .format (end_time , self . field_delimiter )
173+ new_token . append ( 'exp={0}' .format (end_time ) )
189174
190175 if acl :
191- new_token += 'acl={0}{1} ' .format (acl , self . field_delimiter )
176+ new_token . append ( 'acl={0}' .format (acl ) )
192177
193178 if session_id :
194- new_token += 'id={0}{1} ' .format (self .escapeEarly (session_id ), self . field_delimiter )
179+ new_token . append ( 'id={0}' .format (self ._escapeEarly (session_id )) )
195180
196181 if payload :
197- new_token += 'data={0}{1} ' .format (self .escapeEarly (payload ), self . field_delimiter )
182+ new_token . append ( 'data={0}' .format (self ._escapeEarly (payload )) )
198183
199- hash_source += new_token
184+ hash_source = list ( new_token )
200185 if url and not acl :
201- hash_source += 'url={0}{1} ' .format (self .escapeEarly (url ), self . field_delimiter )
186+ hash_source . append ( 'url={0}' .format (self ._escapeEarly (url )) )
202187
203188 if self .salt :
204- hash_source += 'salt={0}{1} ' .format (self .salt , self . field_delimiter )
189+ hash_source . append ( 'salt={0}' .format (self .salt ) )
205190
206191 if self .algorithm .lower () not in ('sha256' , 'sha1' , 'md5' ):
207192 raise AuthTokenError ('Unknown algorithm' )
208193
209194 token_hmac = hmac .new (
210195 binascii .a2b_hex (self .key .encode ()),
211- hash_source . rstrip ( self .field_delimiter ).encode (),
196+ self .field_delimiter . join ( hash_source ).encode (),
212197 getattr (hashlib , self .algorithm .lower ())).hexdigest ()
213- new_token += 'hmac={0}' .format (token_hmac )
214-
215- return new_token
216-
217- def generateToken (self , url = None , acl = None , start_time = None , end_time = None , window_seconds = None ,
218- ip = None , payload = None , session_id = None ):
219- if not start_time :
220- start_time = self .start_time
221-
222- if not end_time :
223- end_time = self .end_time
224-
225- if not window_seconds :
226- window_seconds = self .window_seconds
198+ new_token .append ('hmac={0}' .format (token_hmac ))
227199
228- return self ._generateToken (url = url ,
229- acl = acl ,
230- start_time = start_time ,
231- end_time = end_time ,
232- window_seconds = window_seconds ,
233- ip = ip ,
234- payload = payload ,
235- session_id = session_id )
200+ return self .field_delimiter .join (new_token )
0 commit comments