X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=wrw%2Fauth.py;h=bb0e0cdbb439f6169d218c18768c823e589d53d1;hb=b6f62b898efdc272130d3dbdd6742c5b785e7c7d;hp=18582140ad11e0b37befb02e84ed17e76fdc4f71;hpb=03f970ca2c0e9b7f8de42c81df758081bcfd5567;p=wrw.git diff --git a/wrw/auth.py b/wrw/auth.py index 1858214..bb0e0cd 100644 --- a/wrw/auth.py +++ b/wrw/auth.py @@ -1,9 +1,9 @@ import binascii, hashlib, threading, time -from . import resp +import resp, proto class unauthorized(resp.httperror): def __init__(self, challenge, message=None, detail=None): - super().__init__(401, message, detail) + super(unauthorized, self).__init__(401, message, detail) if isinstance(challenge, str): challenge = [challenge] self.challenge = challenge @@ -11,11 +11,11 @@ class unauthorized(resp.httperror): def handle(self, req): for challenge in self.challenge: req.ohead.add("WWW-Authenticate", challenge) - return super().handle(req) + return super(unauthorized, self).handle(req) class forbidden(resp.httperror): def __init__(self, message=None, detail=None): - super().__init__(403, message, detail) + super(forbidden, self).__init__(403, message, detail) def parsemech(req): h = req.ihead.get("Authorization", None) @@ -31,17 +31,9 @@ def parsebasic(req): if mech != "basic": return None, None try: - data = data.encode("us-ascii") - except UnicodeError: - return None, None - try: - raw = binascii.a2b_base64(data) + raw = proto.unb64(data) except binascii.Error: return None, None - try: - raw = raw.decode("utf-8") - except UnicodeError: - raw = raw.decode("latin1") p = raw.find(":") if p < 0: return None, None @@ -59,9 +51,9 @@ class basiccache(object): def _obscure(self, nm, pw): dig = hashlib.sha256() - dig.update(self.realm.encode("utf-8")) - dig.update(nm.encode("utf-8")) - dig.update(pw.encode("utf-8")) + dig.update(self.realm) + dig.update(nm) + dig.update(pw) return dig.digest() def check(self, req): @@ -84,7 +76,7 @@ class basiccache(object): with lock: try: ret = self.auth(req, nm, pw) - except forbidden as exc: + except forbidden, exc: with self._lock: self._cache[nm, pwh] = (lock, now, "f", exc) raise