@@ -66,6 +66,7 @@ def authenticate(self, username=None, password=None):
66
66
# Two regular django views to interact with the login system
67
67
####
68
68
69
+
69
70
# Handle login requests by sending them off to the main site
70
71
def login (request ):
71
72
if 'next' in request .GET :
@@ -76,14 +77,21 @@ def login(request):
76
77
# Now encrypt it
77
78
r = Random .new ()
78
79
iv = r .read (16 )
79
- encryptor = AES .new (SHA .new (settings .SECRET_KEY .encode ('ascii' )).digest ()[:16 ], AES .MODE_CBC , iv )
80
- cipher = encryptor .encrypt (s .encode ('ascii' ) + b' ' * (16 - (len (s ) % 16 ))) # pad to 16 bytes
81
-
82
- return HttpResponseRedirect ("%s?d=%s$%s" % (
83
- settings .PGAUTH_REDIRECT ,
84
- base64 .b64encode (iv , b"-_" ).decode ('utf8' ),
85
- base64 .b64encode (cipher , b"-_" ).decode ('utf8' ),
86
- ))
80
+ encryptor = AES .new (
81
+ SHA .new (settings .SECRET_KEY .encode ('ascii' )).digest ()[:16 ], AES .MODE_CBC , iv
82
+ )
83
+ cipher = encryptor .encrypt (
84
+ s .encode ('ascii' ) + b' ' * (16 - (len (s ) % 16 ))
85
+ ) # pad to 16 bytes
86
+
87
+ return HttpResponseRedirect (
88
+ "%s?d=%s$%s"
89
+ % (
90
+ settings .PGAUTH_REDIRECT ,
91
+ base64 .b64encode (iv , b"-_" ).decode ('utf8' ),
92
+ base64 .b64encode (cipher , b"-_" ).decode ('utf8' ),
93
+ )
94
+ )
87
95
else :
88
96
return HttpResponseRedirect (settings .PGAUTH_REDIRECT )
89
97
@@ -110,10 +118,16 @@ def auth_receive(request):
110
118
111
119
# Set up an AES object and decrypt the data we received
112
120
try :
113
- decryptor = AES .new (base64 .b64decode (settings .PGAUTH_KEY ),
114
- AES .MODE_CBC ,
115
- base64 .b64decode (str (request .GET ['i' ]), "-_" ))
116
- s = decryptor .decrypt (base64 .b64decode (str (request .GET ['d' ]), "-_" )).rstrip (b' ' ).decode ('utf8' )
121
+ decryptor = AES .new (
122
+ base64 .b64decode (settings .PGAUTH_KEY ),
123
+ AES .MODE_CBC ,
124
+ base64 .b64decode (str (request .GET ['i' ]), "-_" ),
125
+ )
126
+ s = (
127
+ decryptor .decrypt (base64 .b64decode (str (request .GET ['d' ]), "-_" ))
128
+ .rstrip (b' ' )
129
+ .decode ('utf8' )
130
+ )
117
131
except UnicodeDecodeError :
118
132
return HttpResponse ("Badly encoded data found" , 400 )
119
133
except Exception :
@@ -126,7 +140,7 @@ def auth_receive(request):
126
140
return HttpResponse ("Invalid encrypted data received." , status = 400 )
127
141
128
142
# Check the timestamp in the authentication
129
- if ( int (data ['t' ][0 ]) < time .time () - 10 ) :
143
+ if int (data ['t' ][0 ]) < time .time () - 10 :
130
144
return HttpResponse ("Authentication token too old." , status = 400 )
131
145
132
146
# Update the user record (if any)
@@ -153,7 +167,8 @@ def auth_receive(request):
153
167
# somehow fix that live, give a proper error message and
154
168
# have somebody look at it manually.
155
169
if User .objects .filter (email = data ['e' ][0 ]).exists ():
156
- return HttpResponse ("""A user with email %s already exists, but with
170
+ return HttpResponse (
171
+ """A user with email %s already exists, but with
157
172
a different username than %s.
158
173
159
174
This is almost certainly caused by some legacy data in our database.
@@ -162,7 +177,10 @@ def auth_receive(request):
162
177
for you.
163
178
164
179
We apologize for the inconvenience.
165
- """ % (data ['e' ][0 ], data ['u' ][0 ]), content_type = 'text/plain' )
180
+ """
181
+ % (data ['e' ][0 ], data ['u' ][0 ]),
182
+ content_type = 'text/plain' ,
183
+ )
166
184
167
185
if getattr (settings , 'PGAUTH_CREATEUSER_CALLBACK' , None ):
168
186
res = getattr (settings , 'PGAUTH_CREATEUSER_CALLBACK' )(
@@ -176,12 +194,13 @@ def auth_receive(request):
176
194
if res :
177
195
return res
178
196
179
- user = User (username = data ['u' ][0 ],
180
- first_name = data ['f' ][0 ],
181
- last_name = data ['l' ][0 ],
182
- email = data ['e' ][0 ],
183
- password = 'setbypluginnotasha1' ,
184
- )
197
+ 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' ,
203
+ )
185
204
user .save ()
186
205
187
206
auth_user_created_from_upstream .send (sender = auth_receive , user = user )
@@ -193,17 +212,21 @@ def auth_receive(request):
193
212
django_login (request , user )
194
213
195
214
# Signal that we have information about this user
196
- auth_user_data_received .send (sender = auth_receive , user = user , userdata = {
197
- 'secondaryemails' : data ['se' ][0 ].split (',' ) if 'se' in data else []
198
- })
215
+ auth_user_data_received .send (
216
+ sender = auth_receive ,
217
+ user = user ,
218
+ userdata = {'secondaryemails' : data ['se' ][0 ].split (',' ) if 'se' in data else []},
219
+ )
199
220
200
221
# Finally, check of we have a data package that tells us where to
201
222
# redirect the user.
202
223
if 'd' in data :
203
224
(ivs , datas ) = data ['d' ][0 ].split ('$' )
204
- decryptor = AES .new (SHA .new (settings .SECRET_KEY .encode ('ascii' )).digest ()[:16 ],
205
- AES .MODE_CBC ,
206
- base64 .b64decode (ivs , b"-_" ))
225
+ decryptor = AES .new (
226
+ SHA .new (settings .SECRET_KEY .encode ('ascii' )).digest ()[:16 ],
227
+ AES .MODE_CBC ,
228
+ base64 .b64decode (ivs , b"-_" ),
229
+ )
207
230
s = decryptor .decrypt (base64 .b64decode (datas , "-_" )).rstrip (b' ' ).decode ('utf8' )
208
231
try :
209
232
rdata = parse_qs (s , strict_parsing = True )
@@ -215,7 +238,9 @@ def auth_receive(request):
215
238
# No redirect specified, see if we have it in our settings
216
239
if hasattr (settings , 'PGAUTH_REDIRECT_SUCCESS' ):
217
240
return HttpResponseRedirect (settings .PGAUTH_REDIRECT_SUCCESS )
218
- return HttpResponse ("Authentication successful, but don't know where to redirect!" , status = 500 )
241
+ return HttpResponse (
242
+ "Authentication successful, but don't know where to redirect!" , status = 500
243
+ )
219
244
220
245
221
246
# Receive API calls from upstream, such as push changes to users
@@ -267,7 +292,8 @@ def _conditionally_update_record(rectype, recordkey, structkey, fieldmap, struct
267
292
for u in pushstruct .get ('users' , []):
268
293
user = _conditionally_update_record (
269
294
User ,
270
- 'username' , 'username' ,
295
+ 'username' ,
296
+ 'username' ,
271
297
{
272
298
'firstname' : 'first_name' ,
273
299
'lastname' : 'last_name' ,
@@ -278,9 +304,20 @@ def _conditionally_update_record(rectype, recordkey, structkey, fieldmap, struct
278
304
279
305
# Signal that we have information about this user (only if it exists)
280
306
if user :
281
- auth_user_data_received .send (sender = auth_api , user = user , userdata = {
282
- k : u [k ] for k in u .keys () if k not in ['firstname' , 'lastname' , 'email' , ]
283
- })
307
+ auth_user_data_received .send (
308
+ sender = auth_api ,
309
+ user = user ,
310
+ userdata = {
311
+ k : u [k ]
312
+ for k in u .keys ()
313
+ if k
314
+ not in [
315
+ 'firstname' ,
316
+ 'lastname' ,
317
+ 'email' ,
318
+ ]
319
+ },
320
+ )
284
321
285
322
return HttpResponse ("OK" , status = 200 )
286
323
@@ -311,9 +348,9 @@ def user_search(searchterm=None, userid=None):
311
348
(ivs , datas ) = r .text .encode ('utf8' ).split (b'&' )
312
349
313
350
# Decryption time
314
- decryptor = AES .new (base64 . b64decode ( settings . PGAUTH_KEY ),
315
- AES .MODE_CBC ,
316
- base64 . b64decode ( ivs , "-_" ) )
351
+ decryptor = AES .new (
352
+ base64 . b64decode ( settings . PGAUTH_KEY ), AES .MODE_CBC , base64 . b64decode ( ivs , "-_" )
353
+ )
317
354
s = decryptor .decrypt (base64 .b64decode (datas , "-_" )).rstrip (b' ' ).decode ('utf8' )
318
355
j = json .loads (s )
319
356
@@ -324,9 +361,11 @@ def user_search(searchterm=None, userid=None):
324
361
def subscribe_to_user_changes (userid ):
325
362
socket .setdefaulttimeout (10 )
326
363
327
- body = json .dumps ({
328
- 'u' : userid ,
329
- })
364
+ body = json .dumps (
365
+ {
366
+ 'u' : userid ,
367
+ }
368
+ )
330
369
331
370
h = hmac .digest (
332
371
base64 .b64decode (settings .PGAUTH_KEY ),
0 commit comments