| | |
| | | |
| | | def _makeEnviron(self, login=None, password=None, came_from=None, |
| | | path_info='/', identifier=None, max_age=None): |
| | | from StringIO import StringIO |
| | | from repoze.who._compat import StringIO |
| | | fields = [] |
| | | if login: |
| | | fields.append(('login', login)) |
| | |
| | | reason_header='X-Reason') |
| | | |
| | | def test_challenge(self): |
| | | import urlparse |
| | | import cgi |
| | | from repoze.who._compat import urlparse |
| | | plugin = self._makeOne(came_from_param='came_from', |
| | | reason_param='reason', |
| | | reason_header='X-Authorization-Failure-Reason', |
| | |
| | | app = plugin.challenge(environ, '401 Unauthorized', [('app', '1')], |
| | | [('forget', '1')]) |
| | | sr = DummyStartResponse() |
| | | result = ''.join(app(environ, sr)) |
| | | result = b''.join(app(environ, sr)).decode('ascii') |
| | | self.failUnless(result.startswith('302 Found')) |
| | | self.assertEqual(sr.headers[0][0], 'forget') |
| | | self.assertEqual(sr.headers[0][1], '1') |
| | | self.assertEqual(sr.headers[1][0], 'Location') |
| | | url = sr.headers[1][1] |
| | | parts = urlparse.urlparse(url) |
| | | parts = urlparse(url) |
| | | parts_qsl = cgi.parse_qsl(parts[4]) |
| | | self.assertEqual(len(parts_qsl), 1) |
| | | came_from_key, came_from_value = parts_qsl[0] |
| | |
| | | self.assertEqual(sr.status, '302 Found') |
| | | |
| | | def test_challenge_with_reason_header(self): |
| | | import urlparse |
| | | import cgi |
| | | from repoze.who._compat import urlparse |
| | | plugin = self._makeOne(came_from_param='came_from', |
| | | reason_param='reason', |
| | | reason_header='X-Authorization-Failure-Reason', |
| | |
| | | [('X-Authorization-Failure-Reason', 'you are ugly')], |
| | | [('forget', '1')]) |
| | | sr = DummyStartResponse() |
| | | result = ''.join(app(environ, sr)) |
| | | result = b''.join(app(environ, sr)).decode('ascii') |
| | | self.failUnless(result.startswith('302 Found')) |
| | | self.assertEqual(sr.headers[1][0], 'Location') |
| | | url = sr.headers[1][1] |
| | | parts = urlparse.urlparse(url) |
| | | parts = urlparse(url) |
| | | parts_qsl = cgi.parse_qsl(parts[4]) |
| | | self.assertEqual(len(parts_qsl), 2) |
| | | parts_qsl.sort() |
| | |
| | | self.assertEqual(reason_value, 'you are ugly') |
| | | |
| | | def test_challenge_with_custom_reason_header(self): |
| | | import urlparse |
| | | import cgi |
| | | from repoze.who._compat import urlparse |
| | | plugin = self._makeOne(came_from_param='came_from', |
| | | reason_param='reason', |
| | | reason_header='X-Custom-Auth-Failure', |
| | |
| | | [('X-Authorization-Failure-Reason', 'you are ugly')], |
| | | [('forget', '1')]) |
| | | sr = DummyStartResponse() |
| | | result = ''.join(app(environ, sr)) |
| | | result = b''.join(app(environ, sr)).decode('ascii') |
| | | self.failUnless(result.startswith('302 Found')) |
| | | self.assertEqual(sr.headers[1][0], 'Location') |
| | | url = sr.headers[1][1] |
| | | parts = urlparse.urlparse(url) |
| | | parts = urlparse(url) |
| | | parts_qsl = cgi.parse_qsl(parts[4]) |
| | | self.assertEqual(len(parts_qsl), 1) |
| | | came_from_key, came_from_value = parts_qsl[0] |
| | |
| | | self.assertEqual(came_from_value, 'http://www.example.com/?default=1') |
| | | |
| | | def test_challenge_w_reason_no_reason_param_no_came_from_param(self): |
| | | import urlparse |
| | | import cgi |
| | | from repoze.who._compat import urlparse |
| | | plugin = self._makeOne() |
| | | environ = self._makeEnviron() |
| | | app = plugin.challenge( |
| | |
| | | [('X-Authorization-Failure-Reason', 'you are ugly')], |
| | | [('forget', '1')]) |
| | | sr = DummyStartResponse() |
| | | result = ''.join(app(environ, sr)) |
| | | result = b''.join(app(environ, sr)).decode('ascii') |
| | | self.failUnless(result.startswith('302 Found')) |
| | | self.assertEqual(sr.headers[0][0], "forget") |
| | | self.assertEqual(sr.headers[0][1], "1") |
| | | self.assertEqual(sr.headers[1][0], 'Location') |
| | | url = sr.headers[1][1] |
| | | parts = urlparse.urlparse(url) |
| | | parts = urlparse(url) |
| | | parts_qsl = cgi.parse_qsl(parts[4]) |
| | | self.assertEqual(len(parts_qsl), 0) |
| | | self.assertEqual(parts[0], 'http') |
| | |
| | | self.assertEqual(parts[3], '') |
| | | |
| | | def test_challenge_w_reason_no_reason_param_w_came_from_param(self): |
| | | import urlparse |
| | | import cgi |
| | | from repoze.who._compat import urlparse |
| | | plugin = self._makeOne(came_from_param='came_from', |
| | | ) |
| | | environ = self._makeEnviron() |
| | |
| | | [('X-Authorization-Failure-Reason', 'you are ugly')], |
| | | [('forget', '1')]) |
| | | sr = DummyStartResponse() |
| | | result = ''.join(app(environ, sr)) |
| | | result = b''.join(app(environ, sr)).decode('ascii') |
| | | self.failUnless(result.startswith('302 Found')) |
| | | self.assertEqual(sr.headers[1][0], 'Location') |
| | | url = sr.headers[1][1] |
| | | parts = urlparse.urlparse(url) |
| | | parts = urlparse(url) |
| | | parts_qsl = cgi.parse_qsl(parts[4]) |
| | | self.assertEqual(len(parts_qsl), 1) |
| | | came_from_key, came_from_value = parts_qsl[0] |
| | |
| | | self.assertEqual(came_from_value, 'http://www.example.com/?default=1') |
| | | |
| | | def test_challenge_with_reason_and_custom_reason_param(self): |
| | | import urlparse |
| | | import cgi |
| | | from repoze.who._compat import urlparse |
| | | plugin = self._makeOne(came_from_param='came_from', |
| | | reason_param='auth_failure', |
| | | reason_header='X-Custom-Auth-Failure', |
| | |
| | | ('X-Custom-Auth-Failure', 'you are ugly')], |
| | | [('forget', '1')]) |
| | | sr = DummyStartResponse() |
| | | result = ''.join(app(environ, sr)) |
| | | result = b''.join(app(environ, sr)).decode('ascii') |
| | | self.failUnless(result.startswith('302 Found')) |
| | | self.assertEqual(sr.headers[1][0], 'Location') |
| | | url = sr.headers[1][1] |
| | | parts = urlparse.urlparse(url) |
| | | parts = urlparse(url) |
| | | parts_qsl = cgi.parse_qsl(parts[4]) |
| | | self.assertEqual(len(parts_qsl), 2) |
| | | parts_qsl.sort() |
| | |
| | | self.assertEqual(reason_value, 'you are ugly') |
| | | |
| | | def test_challenge_wo_reason_w_came_from_param(self): |
| | | import urlparse |
| | | import cgi |
| | | from repoze.who._compat import urlparse |
| | | plugin = self._makeOne(came_from_param='came_from') |
| | | environ = self._makeEnviron() |
| | | app = plugin.challenge( |
| | |
| | | [], |
| | | [('forget', '1')]) |
| | | sr = DummyStartResponse() |
| | | result = ''.join(app(environ, sr)) |
| | | result = b''.join(app(environ, sr)).decode('ascii') |
| | | self.failUnless(result.startswith('302 Found')) |
| | | self.assertEqual(sr.headers[1][0], 'Location') |
| | | url = sr.headers[1][1] |
| | | parts = urlparse.urlparse(url) |
| | | parts = urlparse(url) |
| | | parts_qsl = cgi.parse_qsl(parts[4]) |
| | | self.assertEqual(len(parts_qsl), 1) |
| | | came_from_key, came_from_value = parts_qsl[0] |
| | |
| | | [('app', '1'), ('set-cookie','a'), ('set-cookie','b')], |
| | | []) |
| | | sr = DummyStartResponse() |
| | | result = ''.join(app(environ, sr)) |
| | | result = b''.join(app(environ, sr)).decode('ascii') |
| | | self.failUnless(result.startswith('302 Found')) |
| | | self.assertEqual(sr.headers[0][0], 'set-cookie') |
| | | self.assertEqual(sr.headers[0][1], 'a') |