Index: third_party/buildbot_7_12/buildbot/status/web/auth.py |
diff --git a/third_party/buildbot_7_12/buildbot/status/web/auth.py b/third_party/buildbot_7_12/buildbot/status/web/auth.py |
deleted file mode 100644 |
index ebd81bfbff05aa2a6723c5b292c76d99902be0d8..0000000000000000000000000000000000000000 |
--- a/third_party/buildbot_7_12/buildbot/status/web/auth.py |
+++ /dev/null |
@@ -1,95 +0,0 @@ |
- |
-import os |
-from zope.interface import Interface, implements |
-from buildbot.status.web.base import HtmlResource |
- |
-class IAuth(Interface): |
- """Represent an authentication method.""" |
- |
- def authenticate(self, user, passwd): |
- """Check whether C{user} / C{passwd} are valid.""" |
- |
- def errmsg(self): |
- """Get the reason authentication failed.""" |
- |
-class AuthBase: |
- err = "" |
- |
- def errmsg(self): |
- return self.err |
- |
-class BasicAuth(AuthBase): |
- implements(IAuth) |
- """Implement basic authentication against a list of user/passwd.""" |
- |
- userpass = [] |
- """List of user/pass tuples.""" |
- |
- def __init__(self, userpass): |
- """C{userpass} is a list of (user, passwd).""" |
- for item in userpass: |
- assert isinstance(item, tuple) |
- u, p = item |
- assert isinstance(u, str) |
- assert isinstance(p, str) |
- self.userpass = userpass |
- |
- def authenticate(self, user, passwd): |
- """Check that C{user}/C{passwd} is a valid user/pass tuple.""" |
- if not self.userpass: |
- self.err = "Bad self.userpass data" |
- return False |
- for u, p in self.userpass: |
- if user == u and passwd == p: |
- self.err = "" |
- return True |
- self.err = "Invalid username or password" |
- return False |
- |
-class HTPasswdAuth(AuthBase): |
- implements(IAuth) |
- """Implement authentication against an .htpasswd file.""" |
- |
- file = "" |
- """Path to the .htpasswd file to use.""" |
- |
- def __init__(self, file): |
- """C{file} is a path to an .htpasswd file.""" |
- assert os.path.exists(file) |
- self.file = file |
- |
- def authenticate(self, user, passwd): |
- """Authenticate C{user} and C{passwd} against an .htpasswd file""" |
- if not os.path.exists(self.file): |
- self.err = "No such file: " + self.file |
- return False |
- # Fetch each line from the .htpasswd file and split it into a |
- # [user, passwd] array. |
- lines = [l.rstrip().split(':', 1) |
- for l in file(self.file).readlines()] |
- # Keep only the line for this login |
- lines = [l for l in lines if l[0] == user] |
- if not lines: |
- self.err = "Invalid user/passwd" |
- return False |
- # This is the DES-hash of the password. The first two characters are |
- # the salt used to introduce disorder in the DES algorithm. |
- hash = lines[0][1] |
- from crypt import crypt |
- res = hash == crypt(passwd, hash[0:2]) |
- if res: |
- self.err = "" |
- else: |
- self.err = "Invalid user/passwd" |
- return res |
- |
-class AuthFailResource(HtmlResource): |
- title = "Authentication Failed" |
- |
- def body(self, request): |
- data = '' |
- data += '<h1>Authentication Failed</h1>\n' |
- data += '<p>The username or password you entered were not correct. Please go back and try again.</p>\n' |
- |
- return data |
- |