@@ -69,27 +69,27 @@ def authenticate(self, username=None, password=None):
6969
7070# Handle login requests by sending them off to the main site
7171def login (request ):
72- if ' next' in request .GET :
72+ if " next" in request .GET :
7373 # Put together an url-encoded dict of parameters we're getting back,
7474 # including a small nonce at the beginning to make sure it doesn't
7575 # encrypt the same way every time.
76- s = "t=%s&%s" % (int (time .time ()), urlencode ({'r' : request .GET [' next' ]}))
76+ s = "t=%s&%s" % (int (time .time ()), urlencode ({"r" : request .GET [" next" ]}))
7777 # Now encrypt it
7878 r = Random .new ()
7979 iv = r .read (16 )
8080 encryptor = AES .new (
81- SHA .new (settings .SECRET_KEY .encode (' ascii' )).digest ()[:16 ], AES .MODE_CBC , iv
81+ SHA .new (settings .SECRET_KEY .encode (" ascii" )).digest ()[:16 ], AES .MODE_CBC , iv
8282 )
8383 cipher = encryptor .encrypt (
84- s .encode (' ascii' ) + b' ' * (16 - (len (s ) % 16 ))
84+ s .encode (" ascii" ) + b" " * (16 - (len (s ) % 16 ))
8585 ) # pad to 16 bytes
8686
8787 return HttpResponseRedirect (
8888 "%s?d=%s$%s"
8989 % (
9090 settings .PGAUTH_REDIRECT ,
91- base64 .b64encode (iv , b"-_" ).decode (' utf8' ),
92- base64 .b64encode (cipher , b"-_" ).decode (' utf8' ),
91+ base64 .b64encode (iv , b"-_" ).decode (" utf8" ),
92+ base64 .b64encode (cipher , b"-_" ).decode (" utf8" ),
9393 )
9494 )
9595 else :
@@ -107,26 +107,26 @@ def logout(request):
107107# Receive an authentication response from the main website and try
108108# to log the user in.
109109def auth_receive (request ):
110- if 's' in request .GET and request .GET ['s' ] == "logout" :
110+ if "s" in request .GET and request .GET ["s" ] == "logout" :
111111 # This was a logout request
112- return HttpResponseRedirect ('/' )
112+ return HttpResponseRedirect ("/" )
113113
114- if 'i' not in request .GET :
114+ if "i" not in request .GET :
115115 return HttpResponse ("Missing IV in url!" , status = 400 )
116- if 'd' not in request .GET :
116+ if "d" not in request .GET :
117117 return HttpResponse ("Missing data in url!" , status = 400 )
118118
119119 # Set up an AES object and decrypt the data we received
120120 try :
121121 decryptor = AES .new (
122122 base64 .b64decode (settings .PGAUTH_KEY ),
123123 AES .MODE_CBC ,
124- base64 .b64decode (str (request .GET ['i' ]), "-_" ),
124+ base64 .b64decode (str (request .GET ["i" ]), "-_" ),
125125 )
126126 s = (
127- decryptor .decrypt (base64 .b64decode (str (request .GET ['d' ]), "-_" ))
128- .rstrip (b' ' )
129- .decode (' utf8' )
127+ decryptor .decrypt (base64 .b64decode (str (request .GET ["d" ]), "-_" ))
128+ .rstrip (b" " )
129+ .decode (" utf8" )
130130 )
131131 except UnicodeDecodeError :
132132 return HttpResponse ("Badly encoded data found" , 400 )
@@ -140,23 +140,23 @@ def auth_receive(request):
140140 return HttpResponse ("Invalid encrypted data received." , status = 400 )
141141
142142 # Check the timestamp in the authentication
143- if int (data ['t' ][0 ]) < time .time () - 10 :
143+ if int (data ["t" ][0 ]) < time .time () - 10 :
144144 return HttpResponse ("Authentication token too old." , status = 400 )
145145
146146 # Update the user record (if any)
147147 try :
148- user = User .objects .get (username = data ['u' ][0 ])
148+ user = User .objects .get (username = data ["u" ][0 ])
149149 # User found, let's see if any important fields have changed
150150 changed = []
151- if user .first_name != data ['f' ][0 ]:
152- user .first_name = data ['f' ][0 ]
153- changed .append (' first_name' )
154- if user .last_name != data ['l' ][0 ]:
155- user .last_name = data ['l' ][0 ]
156- changed .append (' last_name' )
157- if user .email != data ['e' ][0 ]:
158- user .email = data ['e' ][0 ]
159- changed .append (' email' )
151+ if user .first_name != data ["f" ][0 ]:
152+ user .first_name = data ["f" ][0 ]
153+ changed .append (" first_name" )
154+ if user .last_name != data ["l" ][0 ]:
155+ user .last_name = data ["l" ][0 ]
156+ changed .append (" last_name" )
157+ if user .email != data ["e" ][0 ]:
158+ user .email = data ["e" ][0 ]
159+ changed .append (" email" )
160160 if changed :
161161 user .save (update_fields = changed )
162162 except User .DoesNotExist :
@@ -166,7 +166,7 @@ def auth_receive(request):
166166 # the database with a different userid. Instead of trying to
167167 # somehow fix that live, give a proper error message and
168168 # have somebody look at it manually.
169- if User .objects .filter (email = data ['e' ][0 ]).exists ():
169+ if User .objects .filter (email = data ["e" ][0 ]).exists ():
170170 return HttpResponse (
171171 """A user with email %s already exists, but with
172172a different username than %s.
@@ -178,28 +178,28 @@ def auth_receive(request):
178178
179179We apologize for the inconvenience.
180180"""
181- % (data ['e' ][0 ], data ['u' ][0 ]),
182- content_type = ' text/plain' ,
181+ % (data ["e" ][0 ], data ["u" ][0 ]),
182+ content_type = " text/plain" ,
183183 )
184184
185- if getattr (settings , ' PGAUTH_CREATEUSER_CALLBACK' , None ):
186- res = getattr (settings , ' PGAUTH_CREATEUSER_CALLBACK' )(
187- data ['u' ][0 ],
188- data ['e' ][0 ],
189- ['f' ][0 ],
190- data ['l' ][0 ],
185+ if getattr (settings , " PGAUTH_CREATEUSER_CALLBACK" , None ):
186+ res = getattr (settings , " PGAUTH_CREATEUSER_CALLBACK" )(
187+ data ["u" ][0 ],
188+ data ["e" ][0 ],
189+ ["f" ][0 ],
190+ data ["l" ][0 ],
191191 )
192192 # If anything is returned, we'll return that as our result.
193193 # If None is returned, it means go ahead and create the user.
194194 if res :
195195 return res
196196
197197 user = User (
198- username = data ['u' ][0 ],
199- first_name = data ['f' ][0 ],
200- last_name = data ['l' ][0 ],
201- email = data ['e' ][0 ],
202- password = ' setbypluginnotasha1' ,
198+ username = data ["u" ][0 ],
199+ first_name = data ["f" ][0 ],
200+ last_name = data ["l" ][0 ],
201+ email = data ["e" ][0 ],
202+ password = " setbypluginnotasha1" ,
203203 )
204204 user .save ()
205205
@@ -215,28 +215,28 @@ def auth_receive(request):
215215 auth_user_data_received .send (
216216 sender = auth_receive ,
217217 user = user ,
218- userdata = {' secondaryemails' : data ['se' ][0 ].split (',' ) if 'se' in data else []},
218+ userdata = {" secondaryemails" : data ["se" ][0 ].split ("," ) if "se" in data else []},
219219 )
220220
221221 # Finally, check of we have a data package that tells us where to
222222 # redirect the user.
223- if 'd' in data :
224- (ivs , datas ) = data ['d' ][0 ].split ('$' )
223+ if "d" in data :
224+ (ivs , datas ) = data ["d" ][0 ].split ("$" )
225225 decryptor = AES .new (
226- SHA .new (settings .SECRET_KEY .encode (' ascii' )).digest ()[:16 ],
226+ SHA .new (settings .SECRET_KEY .encode (" ascii" )).digest ()[:16 ],
227227 AES .MODE_CBC ,
228228 base64 .b64decode (ivs , b"-_" ),
229229 )
230- s = decryptor .decrypt (base64 .b64decode (datas , "-_" )).rstrip (b' ' ).decode (' utf8' )
230+ s = decryptor .decrypt (base64 .b64decode (datas , "-_" )).rstrip (b" " ).decode (" utf8" )
231231 try :
232232 rdata = parse_qs (s , strict_parsing = True )
233233 except ValueError :
234234 return HttpResponse ("Invalid encrypted data received." , status = 400 )
235- if 'r' in rdata :
235+ if "r" in rdata :
236236 # Redirect address
237- return HttpResponseRedirect (rdata ['r' ][0 ])
237+ return HttpResponseRedirect (rdata ["r" ][0 ])
238238 # No redirect specified, see if we have it in our settings
239- if hasattr (settings , ' PGAUTH_REDIRECT_SUCCESS' ):
239+ if hasattr (settings , " PGAUTH_REDIRECT_SUCCESS" ):
240240 return HttpResponseRedirect (settings .PGAUTH_REDIRECT_SUCCESS )
241241 return HttpResponse (
242242 "Authentication successful, but don't know where to redirect!" , status = 500
@@ -246,19 +246,19 @@ def auth_receive(request):
246246# Receive API calls from upstream, such as push changes to users
247247@csrf_exempt
248248def auth_api (request ):
249- if ' X-pgauth-sig' not in request .headers :
249+ if " X-pgauth-sig" not in request .headers :
250250 return HttpResponse ("Missing signature header!" , status = 400 )
251251
252252 try :
253- sig = base64 .b64decode (request .headers [' X-pgauth-sig' ])
253+ sig = base64 .b64decode (request .headers [" X-pgauth-sig" ])
254254 except Exception :
255255 return HttpResponse ("Invalid signature header!" , status = 400 )
256256
257257 try :
258258 h = hmac .digest (
259259 base64 .b64decode (settings .PGAUTH_KEY ),
260260 msg = request .body ,
261- digest = ' sha512' ,
261+ digest = " sha512" ,
262262 )
263263 if not hmac .compare_digest (h , sig ):
264264 return HttpResponse ("Invalid signature!" , status = 401 )
@@ -286,18 +286,18 @@ def _conditionally_update_record(rectype, recordkey, structkey, fieldmap, struct
286286 return None
287287
288288 # Process the received structure
289- if pushstruct .get (' type' , None ) == ' update' :
289+ if pushstruct .get (" type" , None ) == " update" :
290290 # Process updates!
291291 with transaction .atomic ():
292- for u in pushstruct .get (' users' , []):
292+ for u in pushstruct .get (" users" , []):
293293 user = _conditionally_update_record (
294294 User ,
295- ' username' ,
296- ' username' ,
295+ " username" ,
296+ " username" ,
297297 {
298- ' firstname' : ' first_name' ,
299- ' lastname' : ' last_name' ,
300- ' email' : ' email' ,
298+ " firstname" : " first_name" ,
299+ " lastname" : " last_name" ,
300+ " email" : " email" ,
301301 },
302302 u ,
303303 )
@@ -312,9 +312,9 @@ def _conditionally_update_record(rectype, recordkey, structkey, fieldmap, struct
312312 for k in u .keys ()
313313 if k
314314 not in [
315- ' firstname' ,
316- ' lastname' ,
317- ' email' ,
315+ " firstname" ,
316+ " lastname" ,
317+ " email" ,
318318 ]
319319 },
320320 )
@@ -334,24 +334,24 @@ def user_search(searchterm=None, userid=None):
334334 # 10 seconds is already quite long.
335335 socket .setdefaulttimeout (10 )
336336 if userid :
337- q = {'u' : userid }
337+ q = {"u" : userid }
338338 else :
339- q = {'s' : searchterm }
339+ q = {"s" : searchterm }
340340
341341 r = requests .get (
342- ' {0}search/' .format (settings .PGAUTH_REDIRECT ),
342+ " {0}search/" .format (settings .PGAUTH_REDIRECT ),
343343 params = q ,
344344 )
345345 if r .status_code != 200 :
346346 return []
347347
348- (ivs , datas ) = r .text .encode (' utf8' ).split (b'&' )
348+ (ivs , datas ) = r .text .encode (" utf8" ).split (b"&" )
349349
350350 # Decryption time
351351 decryptor = AES .new (
352352 base64 .b64decode (settings .PGAUTH_KEY ), AES .MODE_CBC , base64 .b64decode (ivs , "-_" )
353353 )
354- s = decryptor .decrypt (base64 .b64decode (datas , "-_" )).rstrip (b' ' ).decode (' utf8' )
354+ s = decryptor .decrypt (base64 .b64decode (datas , "-_" )).rstrip (b" " ).decode (" utf8" )
355355 j = json .loads (s )
356356
357357 return j
@@ -363,22 +363,22 @@ def subscribe_to_user_changes(userid):
363363
364364 body = json .dumps (
365365 {
366- 'u' : userid ,
366+ "u" : userid ,
367367 }
368368 )
369369
370370 h = hmac .digest (
371371 base64 .b64decode (settings .PGAUTH_KEY ),
372- msg = bytes (body , ' utf-8' ),
373- digest = ' sha512' ,
372+ msg = bytes (body , " utf-8" ),
373+ digest = " sha512" ,
374374 )
375375
376376 # Ignore the result code, just post it
377377 requests .post (
378- ' {0}subscribe/' .format (settings .PGAUTH_REDIRECT ),
378+ " {0}subscribe/" .format (settings .PGAUTH_REDIRECT ),
379379 data = body ,
380380 headers = {
381- ' X-pgauth-sig' : base64 .b64encode (h ),
381+ " X-pgauth-sig" : base64 .b64encode (h ),
382382 },
383383 )
384384
@@ -398,15 +398,15 @@ def user_import(uid):
398398
399399 u = u [0 ]
400400
401- if User .objects .filter (username = u ['u' ]).exists ():
401+ if User .objects .filter (username = u ["u" ]).exists ():
402402 raise Exception ("User already exists" )
403403
404404 u = User (
405- username = u ['u' ],
406- first_name = u ['f' ],
407- last_name = u ['l' ],
408- email = u ['e' ],
409- password = ' setbypluginnotsha1' ,
405+ username = u ["u" ],
406+ first_name = u ["f" ],
407+ last_name = u ["l" ],
408+ email = u ["e" ],
409+ password = " setbypluginnotsha1" ,
410410 )
411411 u .save ()
412412
0 commit comments