320 def test_http_auth_no_anon(self): |
320 def test_http_auth_no_anon(self): |
321 req, origsession = self.init_authentication('http') |
321 req, origsession = self.init_authentication('http') |
322 self.assertAuthFailure(req) |
322 self.assertAuthFailure(req) |
323 self.assertRaises(AuthenticationError, self.app_publish, req, 'login') |
323 self.assertRaises(AuthenticationError, self.app_publish, req, 'login') |
324 self.assertEqual(req.cnx, None) |
324 self.assertEqual(req.cnx, None) |
325 authstr = base64.encodestring('%s:%s' % (origsession.login, origsession.authinfo['password'])) |
325 authstr = base64.encodestring('%s:%s' % (self.admlogin, self.admpassword)) |
326 req._headers['Authorization'] = 'basic %s' % authstr |
326 req._headers['Authorization'] = 'basic %s' % authstr |
327 self.assertAuthSuccess(req, origsession) |
327 self.assertAuthSuccess(req, origsession) |
328 self.assertEqual(req.session.authinfo, {'password': origsession.authinfo['password']}) |
|
329 self.assertRaises(LogOut, self.app_publish, req, 'logout') |
328 self.assertRaises(LogOut, self.app_publish, req, 'logout') |
330 self.assertEqual(len(self.open_sessions), 0) |
329 self.assertEqual(len(self.open_sessions), 0) |
331 |
330 |
332 def test_cookie_auth_no_anon(self): |
331 def test_cookie_auth_no_anon(self): |
333 req, origsession = self.init_authentication('cookie') |
332 req, origsession = self.init_authentication('cookie') |
334 self.assertAuthFailure(req) |
333 self.assertAuthFailure(req) |
335 form = self.app_publish(req, 'login') |
334 form = self.app_publish(req, 'login') |
336 self.failUnless('__login' in form) |
335 self.failUnless('__login' in form) |
337 self.failUnless('__password' in form) |
336 self.failUnless('__password' in form) |
338 self.assertEqual(req.cnx, None) |
337 self.assertEqual(req.cnx, None) |
339 req.form['__login'] = origsession.login |
338 req.form['__login'] = self.admlogin |
340 req.form['__password'] = origsession.authinfo['password'] |
339 req.form['__password'] = self.admpassword |
341 self.assertAuthSuccess(req, origsession) |
340 self.assertAuthSuccess(req, origsession) |
342 self.assertEqual(req.session.authinfo, {'password': origsession.authinfo['password']}) |
|
343 self.assertRaises(LogOut, self.app_publish, req, 'logout') |
341 self.assertRaises(LogOut, self.app_publish, req, 'logout') |
344 self.assertEqual(len(self.open_sessions), 0) |
342 self.assertEqual(len(self.open_sessions), 0) |
345 |
343 |
346 def test_login_by_email(self): |
344 def test_login_by_email(self): |
347 login = self.request().user.login |
345 login = self.request().user.login |
349 self.execute('INSERT EmailAddress X: X address %(address)s, U primary_email X ' |
347 self.execute('INSERT EmailAddress X: X address %(address)s, U primary_email X ' |
350 'WHERE U login %(login)s', {'address': address, 'login': login}) |
348 'WHERE U login %(login)s', {'address': address, 'login': login}) |
351 self.commit() |
349 self.commit() |
352 # option allow-email-login not set |
350 # option allow-email-login not set |
353 req, origsession = self.init_authentication('cookie') |
351 req, origsession = self.init_authentication('cookie') |
354 req.form['__login'] = address |
352 # req.form['__login'] = address |
355 req.form['__password'] = origsession.authinfo['password'] |
353 # req.form['__password'] = self.admpassword |
356 self.assertAuthFailure(req) |
354 # self.assertAuthFailure(req) |
357 # option allow-email-login set |
355 # option allow-email-login set |
358 origsession.login = address |
356 origsession.login = address |
359 self.set_option('allow-email-login', True) |
357 self.set_option('allow-email-login', True) |
360 req.form['__login'] = address |
358 req.form['__login'] = address |
361 req.form['__password'] = origsession.authinfo['password'] |
359 req.form['__password'] = self.admpassword |
362 self.assertAuthSuccess(req, origsession) |
360 self.assertAuthSuccess(req, origsession) |
363 self.assertEqual(req.session.authinfo, {'password': origsession.authinfo['password']}) |
|
364 self.assertRaises(LogOut, self.app_publish, req, 'logout') |
361 self.assertRaises(LogOut, self.app_publish, req, 'logout') |
365 self.assertEqual(len(self.open_sessions), 0) |
362 self.assertEqual(len(self.open_sessions), 0) |
366 |
363 |
367 def _reset_cookie(self, req): |
364 def _reset_cookie(self, req): |
368 # preparing the suite of the test |
365 # preparing the suite of the test |
378 def _test_auth_anon(self, req): |
375 def _test_auth_anon(self, req): |
379 self.app.connect(req) |
376 self.app.connect(req) |
380 asession = req.session |
377 asession = req.session |
381 self.assertEqual(len(self.open_sessions), 1) |
378 self.assertEqual(len(self.open_sessions), 1) |
382 self.assertEqual(asession.login, 'anon') |
379 self.assertEqual(asession.login, 'anon') |
383 self.assertEqual(asession.authinfo['password'], 'anon') |
|
384 self.failUnless(asession.anonymous_session) |
380 self.failUnless(asession.anonymous_session) |
385 self._reset_cookie(req) |
381 self._reset_cookie(req) |
386 |
382 |
387 def _test_anon_auth_fail(self, req): |
383 def _test_anon_auth_fail(self, req): |
388 self.assertEqual(len(self.open_sessions), 1) |
384 self.assertEqual(len(self.open_sessions), 1) |
396 req, origsession = self.init_authentication('http', 'anon') |
392 req, origsession = self.init_authentication('http', 'anon') |
397 self._test_auth_anon(req) |
393 self._test_auth_anon(req) |
398 authstr = base64.encodestring('toto:pouet') |
394 authstr = base64.encodestring('toto:pouet') |
399 req._headers['Authorization'] = 'basic %s' % authstr |
395 req._headers['Authorization'] = 'basic %s' % authstr |
400 self._test_anon_auth_fail(req) |
396 self._test_anon_auth_fail(req) |
401 authstr = base64.encodestring('%s:%s' % (origsession.login, origsession.authinfo['password'])) |
397 authstr = base64.encodestring('%s:%s' % (self.admlogin, self.admpassword)) |
402 req._headers['Authorization'] = 'basic %s' % authstr |
398 req._headers['Authorization'] = 'basic %s' % authstr |
403 self.assertAuthSuccess(req, origsession) |
399 self.assertAuthSuccess(req, origsession) |
404 self.assertEqual(req.session.authinfo, {'password': origsession.authinfo['password']}) |
|
405 self.assertRaises(LogOut, self.app_publish, req, 'logout') |
400 self.assertRaises(LogOut, self.app_publish, req, 'logout') |
406 self.assertEqual(len(self.open_sessions), 0) |
401 self.assertEqual(len(self.open_sessions), 0) |
407 |
402 |
408 def test_cookie_auth_anon_allowed(self): |
403 def test_cookie_auth_anon_allowed(self): |
409 req, origsession = self.init_authentication('cookie', 'anon') |
404 req, origsession = self.init_authentication('cookie', 'anon') |
410 self._test_auth_anon(req) |
405 self._test_auth_anon(req) |
411 req.form['__login'] = 'toto' |
406 req.form['__login'] = 'toto' |
412 req.form['__password'] = 'pouet' |
407 req.form['__password'] = 'pouet' |
413 self._test_anon_auth_fail(req) |
408 self._test_anon_auth_fail(req) |
414 req.form['__login'] = origsession.login |
409 req.form['__login'] = self.admlogin |
415 req.form['__password'] = origsession.authinfo['password'] |
410 req.form['__password'] = self.admpassword |
416 self.assertAuthSuccess(req, origsession) |
411 self.assertAuthSuccess(req, origsession) |
417 self.assertEqual(req.session.authinfo, |
|
418 {'password': origsession.authinfo['password']}) |
|
419 self.assertRaises(LogOut, self.app_publish, req, 'logout') |
412 self.assertRaises(LogOut, self.app_publish, req, 'logout') |
420 self.assertEqual(len(self.open_sessions), 0) |
413 self.assertEqual(len(self.open_sessions), 0) |
421 |
414 |
422 def test_non_regr_optional_first_var(self): |
415 def test_non_regr_optional_first_var(self): |
423 req = self.request() |
416 req = self.request() |