diff options
| -rw-r--r-- | netlib/http_auth.py | 17 | ||||
| -rw-r--r-- | test/test_http_auth.py | 23 | 
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    | 
