class DigestAuthHandler(RequestHandler):
+ def initialize(self, username, password):
+ self.username = username
+ self.password = password
+
def get(self):
realm = 'test'
opaque = 'asdf'
# Real implementations would use a random nonce.
nonce = "1234"
- username = 'foo'
- password = 'bar'
auth_header = self.request.headers.get('Authorization', None)
if auth_header is not None:
assert param_dict['realm'] == realm
assert param_dict['opaque'] == opaque
assert param_dict['nonce'] == nonce
- assert param_dict['username'] == username
+ assert param_dict['username'] == self.username
assert param_dict['uri'] == self.request.path
- h1 = md5(utf8('%s:%s:%s' % (username, realm, password))).hexdigest()
+ h1 = md5(utf8('%s:%s:%s' % (self.username, realm, self.password))).hexdigest()
h2 = md5(utf8('%s:%s' % (self.request.method,
self.request.path))).hexdigest()
digest = md5(utf8('%s:%s:%s' % (h1, nonce, h2))).hexdigest()
def get_app(self):
return Application([
- ('/digest', DigestAuthHandler),
+ ('/digest', DigestAuthHandler, {'username': 'foo', 'password': 'bar'}),
+ ('/digest_non_ascii', DigestAuthHandler, {'username': 'foo', 'password': 'barユ£'}),
('/custom_reason', CustomReasonHandler),
('/custom_fail_reason', CustomFailReasonHandler),
])
# during the setup phase doesn't lead the request to
# be dropped on the floor.
response = self.fetch(u'/ユニコード', raise_error=True)
+
+ def test_digest_auth_non_ascii(self):
+ response = self.fetch('/digest_non_ascii', auth_mode='digest',
+ auth_username='foo', auth_password='barユ£')
+ self.assertEqual(response.body, b'ok')