tests/test-hgweb-auth.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Wed, 11 Oct 2023 02:02:46 +0200
changeset 50993 12c308c55e53
parent 48875 6000f5b25c9b
permissions -rw-r--r--
branching: merge stable into default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
     1
from mercurial import demandimport
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
     2
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
     3
demandimport.enable()
28747
779addce6910 py3: use absolute_import in test-hgweb-auth.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 19378
diff changeset
     4
from mercurial import (
28808
10c2ce44c35d test-hgweb-auth: stop direct symbol import of mercurial.error.Abort
Yuya Nishihara <yuya@tcha.org>
parents: 28807
diff changeset
     5
    error,
37940
31c37e703cee tests: use stringutil.pprint instead of custom dumper in test-hgweb-auth.py
Augie Fackler <augie@google.com>
parents: 36327
diff changeset
     6
    pycompat,
28807
736f64b23a24 test-hgweb-auth: alias ui as uimod
Yuya Nishihara <yuya@tcha.org>
parents: 28748
diff changeset
     7
    ui as uimod,
28747
779addce6910 py3: use absolute_import in test-hgweb-auth.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 19378
diff changeset
     8
    url,
779addce6910 py3: use absolute_import in test-hgweb-auth.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 19378
diff changeset
     9
    util,
779addce6910 py3: use absolute_import in test-hgweb-auth.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 19378
diff changeset
    10
)
46907
ffd3e823a7e5 urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44452
diff changeset
    11
from mercurial.utils import (
ffd3e823a7e5 urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44452
diff changeset
    12
    stringutil,
ffd3e823a7e5 urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44452
diff changeset
    13
    urlutil,
ffd3e823a7e5 urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44452
diff changeset
    14
)
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    15
28883
032c4c2f802a pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents: 28808
diff changeset
    16
urlerr = util.urlerr
032c4c2f802a pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents: 28808
diff changeset
    17
urlreq = util.urlreq
032c4c2f802a pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents: 28808
diff changeset
    18
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    19
28807
736f64b23a24 test-hgweb-auth: alias ui as uimod
Yuya Nishihara <yuya@tcha.org>
parents: 28748
diff changeset
    20
class myui(uimod.ui):
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    21
    def interactive(self):
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    22
        return False
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    23
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    24
30559
d83ca854fa21 ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents: 29377
diff changeset
    25
origui = myui.load()
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    26
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    27
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    28
def writeauth(items):
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    29
    ui = origui.copy()
36327
58c1368ab629 py3: use dict.items() instead of dict.iteritems() in tests
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34023
diff changeset
    30
    for name, value in items.items():
41451
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    31
        ui.setconfig(b'auth', name, value)
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    32
    return ui
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    33
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    34
41451
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    35
def _stringifyauthinfo(ai):
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    36
    if ai is None:
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    37
        return ai
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    38
    realm, authuris, user, passwd = ai
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    39
    return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    40
        pycompat.strurl(realm),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    41
        [pycompat.strurl(u) for u in authuris],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    42
        pycompat.strurl(user),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    43
        pycompat.strurl(passwd),
41451
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    44
    )
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    45
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    46
15005
4a43e23b8c55 hgweb: do not ignore [auth] if url has a username (issue2822)
Patrick Mezard <pmezard@gmail.com>
parents: 10282
diff changeset
    47
def test(auth, urls=None):
37942
32bc3815efae stringutil: flip the default of pprint() to bprefix=False
Yuya Nishihara <yuya@tcha.org>
parents: 37940
diff changeset
    48
    print('CFG:', pycompat.sysstr(stringutil.pprint(auth, bprefix=True)))
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    49
    prefixes = set()
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    50
    for k in auth:
41451
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    51
        prefixes.add(k.split(b'.', 1)[0])
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    52
    for p in prefixes:
41451
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    53
        for name in (b'.username', b'.password'):
15005
4a43e23b8c55 hgweb: do not ignore [auth] if url has a username (issue2822)
Patrick Mezard <pmezard@gmail.com>
parents: 10282
diff changeset
    54
            if (p + name) not in auth:
4a43e23b8c55 hgweb: do not ignore [auth] if url has a username (issue2822)
Patrick Mezard <pmezard@gmail.com>
parents: 10282
diff changeset
    55
                auth[p + name] = p
44452
9d2b2df2c2ba cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    56
    auth = {k: v for k, v in auth.items() if v is not None}
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    57
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    58
    ui = writeauth(auth)
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    59
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    60
    def _test(uri):
41451
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    61
        print('URI:', pycompat.strurl(uri))
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    62
        try:
29377
2c019aac6b99 url: extract password database from password manager
liscju <piotr.listkiewicz@gmail.com>
parents: 28883
diff changeset
    63
            pm = url.passwordmgr(ui, urlreq.httppasswordmgrwithdefaultrealm())
46907
ffd3e823a7e5 urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44452
diff changeset
    64
            u, authinfo = urlutil.url(uri).authinfo()
15005
4a43e23b8c55 hgweb: do not ignore [auth] if url has a username (issue2822)
Patrick Mezard <pmezard@gmail.com>
parents: 10282
diff changeset
    65
            if authinfo is not None:
41451
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    66
                pm.add_password(*_stringifyauthinfo(authinfo))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    67
            print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    68
                '    ',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    69
                tuple(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    70
                    pycompat.strurl(a)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    71
                    for a in pm.find_user_password('test', pycompat.strurl(u))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    72
                ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    73
            )
28808
10c2ce44c35d test-hgweb-auth: stop direct symbol import of mercurial.error.Abort
Yuya Nishihara <yuya@tcha.org>
parents: 28807
diff changeset
    74
        except error.Abort:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    75
            print('    ', 'abort')
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    76
15005
4a43e23b8c55 hgweb: do not ignore [auth] if url has a username (issue2822)
Patrick Mezard <pmezard@gmail.com>
parents: 10282
diff changeset
    77
    if not urls:
4a43e23b8c55 hgweb: do not ignore [auth] if url has a username (issue2822)
Patrick Mezard <pmezard@gmail.com>
parents: 10282
diff changeset
    78
        urls = [
41451
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    79
            b'http://example.org/foo',
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    80
            b'http://example.org/foo/bar',
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    81
            b'http://example.org/bar',
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    82
            b'https://example.org/foo',
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    83
            b'https://example.org/foo/bar',
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    84
            b'https://example.org/bar',
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    85
            b'https://x@example.org/bar',
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    86
            b'https://y@example.org/bar',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
    87
        ]
15005
4a43e23b8c55 hgweb: do not ignore [auth] if url has a username (issue2822)
Patrick Mezard <pmezard@gmail.com>
parents: 10282
diff changeset
    88
    for u in urls:
4a43e23b8c55 hgweb: do not ignore [auth] if url has a username (issue2822)
Patrick Mezard <pmezard@gmail.com>
parents: 10282
diff changeset
    89
        _test(u)
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    90
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    91
28748
c2ba5a810fa1 py3: use print_function in test-hgweb-auth.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28747
diff changeset
    92
print('\n*** Test in-uri schemes\n')
41451
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    93
test({b'x.prefix': b'http://example.org'})
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    94
test({b'x.prefix': b'https://example.org'})
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    95
test({b'x.prefix': b'http://example.org', b'x.schemes': b'https'})
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    96
test({b'x.prefix': b'https://example.org', b'x.schemes': b'http'})
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
    97
28748
c2ba5a810fa1 py3: use print_function in test-hgweb-auth.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28747
diff changeset
    98
print('\n*** Test separately configured schemes\n')
41451
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
    99
test({b'x.prefix': b'example.org', b'x.schemes': b'http'})
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
   100
test({b'x.prefix': b'example.org', b'x.schemes': b'https'})
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
   101
test({b'x.prefix': b'example.org', b'x.schemes': b'http https'})
8333
89c80c3dc584 allow http authentication information to be specified in the configuration
Sune Foldager <cryo@cyanite.org>
parents:
diff changeset
   102
28748
c2ba5a810fa1 py3: use print_function in test-hgweb-auth.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28747
diff changeset
   103
print('\n*** Test prefix matching\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   104
test(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   105
    {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   106
        b'x.prefix': b'http://example.org/foo',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   107
        b'y.prefix': b'http://example.org/bar',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   108
    }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   109
)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   110
test(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   111
    {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   112
        b'x.prefix': b'http://example.org/foo',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   113
        b'y.prefix': b'http://example.org/foo/bar',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   114
    }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   115
)
41451
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
   116
test({b'x.prefix': b'*', b'y.prefix': b'https://example.org/bar'})
15005
4a43e23b8c55 hgweb: do not ignore [auth] if url has a username (issue2822)
Patrick Mezard <pmezard@gmail.com>
parents: 10282
diff changeset
   117
28748
c2ba5a810fa1 py3: use print_function in test-hgweb-auth.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28747
diff changeset
   118
print('\n*** Test user matching\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   119
test(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   120
    {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   121
        b'x.prefix': b'http://example.org/foo',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   122
        b'x.username': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   123
        b'x.password': b'xpassword',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   124
    },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   125
    urls=[b'http://y@example.org/foo'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   126
)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   127
test(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   128
    {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   129
        b'x.prefix': b'http://example.org/foo',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   130
        b'x.username': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   131
        b'x.password': b'xpassword',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   132
        b'y.prefix': b'http://example.org/foo',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   133
        b'y.username': b'y',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   134
        b'y.password': b'ypassword',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   135
    },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   136
    urls=[b'http://y@example.org/foo'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   137
)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   138
test(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   139
    {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   140
        b'x.prefix': b'http://example.org/foo/bar',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   141
        b'x.username': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   142
        b'x.password': b'xpassword',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   143
        b'y.prefix': b'http://example.org/foo',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   144
        b'y.username': b'y',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   145
        b'y.password': b'ypassword',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   146
    },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   147
    urls=[b'http://y@example.org/foo/bar'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   148
)
15024
0f1311e829c9 http: strip credentials from urllib2 manager URIs (issue2885)
Patrick Mezard <pmezard@gmail.com>
parents: 15005
diff changeset
   149
40663
c53f0ead5781 http: allow 'auth.prefix' to have a username consistent with the URI
Matt Harbison <matt_harbison@yahoo.com>
parents: 37942
diff changeset
   150
print('\n*** Test user matching with name in prefix\n')
c53f0ead5781 http: allow 'auth.prefix' to have a username consistent with the URI
Matt Harbison <matt_harbison@yahoo.com>
parents: 37942
diff changeset
   151
c53f0ead5781 http: allow 'auth.prefix' to have a username consistent with the URI
Matt Harbison <matt_harbison@yahoo.com>
parents: 37942
diff changeset
   152
# prefix, username and URL have the same user
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   153
test(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   154
    {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   155
        b'x.prefix': b'https://example.org/foo',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   156
        b'x.username': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   157
        b'x.password': b'xpassword',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   158
        b'y.prefix': b'http://y@example.org/foo',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   159
        b'y.username': b'y',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   160
        b'y.password': b'ypassword',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   161
    },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   162
    urls=[b'http://y@example.org/foo'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   163
)
40663
c53f0ead5781 http: allow 'auth.prefix' to have a username consistent with the URI
Matt Harbison <matt_harbison@yahoo.com>
parents: 37942
diff changeset
   164
# Prefix has a different user from username and URL
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   165
test(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   166
    {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   167
        b'y.prefix': b'http://z@example.org/foo',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   168
        b'y.username': b'y',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   169
        b'y.password': b'ypassword',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   170
    },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   171
    urls=[b'http://y@example.org/foo'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   172
)
40663
c53f0ead5781 http: allow 'auth.prefix' to have a username consistent with the URI
Matt Harbison <matt_harbison@yahoo.com>
parents: 37942
diff changeset
   173
# Prefix has a different user from URL; no username
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   174
test(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   175
    {b'y.prefix': b'http://z@example.org/foo', b'y.password': b'ypassword'},
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   176
    urls=[b'http://y@example.org/foo'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   177
)
40663
c53f0ead5781 http: allow 'auth.prefix' to have a username consistent with the URI
Matt Harbison <matt_harbison@yahoo.com>
parents: 37942
diff changeset
   178
# Prefix and URL have same user, but doesn't match username
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   179
test(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   180
    {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   181
        b'y.prefix': b'http://y@example.org/foo',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   182
        b'y.username': b'z',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   183
        b'y.password': b'ypassword',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   184
    },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   185
    urls=[b'http://y@example.org/foo'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   186
)
40663
c53f0ead5781 http: allow 'auth.prefix' to have a username consistent with the URI
Matt Harbison <matt_harbison@yahoo.com>
parents: 37942
diff changeset
   187
# Prefix and URL have the same user; no username
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   188
test(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   189
    {b'y.prefix': b'http://y@example.org/foo', b'y.password': b'ypassword'},
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   190
    urls=[b'http://y@example.org/foo'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   191
)
40663
c53f0ead5781 http: allow 'auth.prefix' to have a username consistent with the URI
Matt Harbison <matt_harbison@yahoo.com>
parents: 37942
diff changeset
   192
# Prefix user, but no URL user or username
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   193
test(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   194
    {b'y.prefix': b'http://y@example.org/foo', b'y.password': b'ypassword'},
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   195
    urls=[b'http://example.org/foo'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   196
)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   197
40663
c53f0ead5781 http: allow 'auth.prefix' to have a username consistent with the URI
Matt Harbison <matt_harbison@yahoo.com>
parents: 37942
diff changeset
   198
15024
0f1311e829c9 http: strip credentials from urllib2 manager URIs (issue2885)
Patrick Mezard <pmezard@gmail.com>
parents: 15005
diff changeset
   199
def testauthinfo(fullurl, authurl):
28748
c2ba5a810fa1 py3: use print_function in test-hgweb-auth.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28747
diff changeset
   200
    print('URIs:', fullurl, authurl)
28883
032c4c2f802a pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents: 28808
diff changeset
   201
    pm = urlreq.httppasswordmgrwithdefaultrealm()
46907
ffd3e823a7e5 urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44452
diff changeset
   202
    ai = _stringifyauthinfo(
ffd3e823a7e5 urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44452
diff changeset
   203
        urlutil.url(pycompat.bytesurl(fullurl)).authinfo()[1]
ffd3e823a7e5 urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44452
diff changeset
   204
    )
41451
30dd20a56f3e tests: port test-hgweb-auth.py to Python 3
Augie Fackler <augie@google.com>
parents: 40663
diff changeset
   205
    pm.add_password(*ai)
28748
c2ba5a810fa1 py3: use print_function in test-hgweb-auth.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28747
diff changeset
   206
    print(pm.find_user_password('test', authurl))
15024
0f1311e829c9 http: strip credentials from urllib2 manager URIs (issue2885)
Patrick Mezard <pmezard@gmail.com>
parents: 15005
diff changeset
   207
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41451
diff changeset
   208
46907
ffd3e823a7e5 urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44452
diff changeset
   209
print('\n*** Test urllib2 and urlutil.url\n')
15024
0f1311e829c9 http: strip credentials from urllib2 manager URIs (issue2885)
Patrick Mezard <pmezard@gmail.com>
parents: 15005
diff changeset
   210
testauthinfo('http://user@example.com:8080/foo', 'http://example.com:8080/foo')