aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--netlib/http_auth.py17
-rw-r--r--test/test_http_auth.py23
2 files changed, 30 insertions, 10 deletions
diff --git a/netlib/http_auth.py b/netlib/http_auth.py
index 6c91c7c5..71f120d6 100644
--- a/netlib/http_auth.py
+++ b/netlib/http_auth.py
@@ -125,23 +125,19 @@ class AuthAction(Action):
"""
def __call__(self, parser, namespace, values, option_string=None):
passman = self.getPasswordManager(values)
- if passman:
- authenticator = BasicProxyAuth(passman, "mitmproxy")
- else:
- authenticator = NullProxyAuth(None)
+ authenticator = BasicProxyAuth(passman, "mitmproxy")
setattr(namespace, "authenticator", authenticator)
- def getPasswordManager(self, s):
- """
- returns the password manager
- """
+ def getPasswordManager(self, s): # pragma: nocover
raise NotImplementedError()
class SingleuserAuthAction(AuthAction):
def getPasswordManager(self, s):
if len(s.split(':')) != 2:
- raise ArgumentTypeError("Invalid single-user specification. Please use the format username:password")
+ raise ArgumentTypeError(
+ "Invalid single-user specification. Please use the format username:password"
+ )
username, password = s.split(':')
return PassManSingleUser(username, password)
@@ -154,4 +150,5 @@ class NonanonymousAuthAction(AuthAction):
class HtpasswdAuthAction(AuthAction):
def getPasswordManager(self, s):
with open(s, "r") as f:
- return PassManHtpasswd(f) \ No newline at end of file
+ return PassManHtpasswd(f)
+
diff --git a/test/test_http_auth.py b/test/test_http_auth.py
index 83de0fa1..8238d4ca 100644
--- a/test/test_http_auth.py
+++ b/test/test_http_auth.py
@@ -1,5 +1,6 @@
import binascii, cStringIO
from netlib import odict, http_auth, http
+import mock
import tutils
class TestPassManNonAnon:
@@ -79,3 +80,25 @@ class TestBasicProxyAuth:
hdrs[ba.AUTH_HEADER] = [http.assemble_http_basic_auth(*vals)]
assert not ba.authenticate(hdrs)
+
+class Bunch: pass
+
+class TestAuthAction:
+ def test_nonanonymous(self):
+ m = Bunch()
+ aa = http_auth.NonanonymousAuthAction(None, None)
+ aa(None, m, None, None)
+ assert m.authenticator
+
+ def test_singleuser(self):
+ m = Bunch()
+ aa = http_auth.SingleuserAuthAction(None, None)
+ aa(None, m, "foo:bar", None)
+ assert m.authenticator
+ tutils.raises("invalid", aa, None, m, "foo", None)
+
+ def test_httppasswd(self):
+ m = Bunch()
+ aa = http_auth.HtpasswdAuthAction(None, None)
+ aa(None, m, tutils.test_data.path("data/htpasswd"), None)
+ assert m.authenticator