hgext/factotum.py
author Raphaël Gomès <rgomes@octobus.net>
Wed, 10 Jul 2019 09:57:28 +0200
changeset 42755 749ef8c31187
parent 39826 c31ce080eb75
child 43076 2372284d9457
permissions -rw-r--r--
rust-dirstate: call rust dirstatemap from Python Since Rust-backed Python classes cannot be used as baseclasses (for rust-cpython anyway), we use composition rather than inheritance. This also allows us to keep the IO operations in the Python side, removing (for now) the need to rewrite VFS in Rust, which would be a heavy undertaking. Differential Revision: https://phab.mercurial-scm.org/D6634
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
     1
# factotum.py - Plan 9 factotum integration for Mercurial
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
     2
#
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
     3
# Copyright (C) 2012 Steven Stallion <sstallion@gmail.com>
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
     4
#
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
     5
# This program is free software; you can redistribute it and/or modify it
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
     6
# under the terms of the GNU General Public License as published by the
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
     7
# Free Software Foundation; either version 2 of the License, or (at your
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
     8
# option) any later version.
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
     9
#
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    10
# This program is distributed in the hope that it will be useful, but
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    11
# WITHOUT ANY WARRANTY; without even the implied warranty of
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    13
# Public License for more details.
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    14
#
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    15
# You should have received a copy of the GNU General Public License along
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    16
# with this program; if not, write to the Free Software Foundation, Inc.,
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    17
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    18
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    19
'''http authentication with factotum
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    20
16582
cbb916e2d7c5 factotum: add man reference to help output
Steven Stallion <sstallion@gmail.com>
parents: 16463
diff changeset
    21
This extension allows the factotum(4) facility on Plan 9 from Bell Labs
cbb916e2d7c5 factotum: add man reference to help output
Steven Stallion <sstallion@gmail.com>
parents: 16463
diff changeset
    22
platforms to provide authentication information for HTTP access. Configuration
cbb916e2d7c5 factotum: add man reference to help output
Steven Stallion <sstallion@gmail.com>
parents: 16463
diff changeset
    23
entries specified in the auth section as well as authentication information
cbb916e2d7c5 factotum: add man reference to help output
Steven Stallion <sstallion@gmail.com>
parents: 16463
diff changeset
    24
provided in the repository URL are fully supported. If no prefix is specified,
cbb916e2d7c5 factotum: add man reference to help output
Steven Stallion <sstallion@gmail.com>
parents: 16463
diff changeset
    25
a value of "*" will be assumed.
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    26
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    27
By default, keys are specified as::
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    28
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    29
  proto=pass service=hg prefix=<prefix> user=<username> !password=<password>
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    30
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    31
If the factotum extension is unable to read the required key, one will be
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    32
requested interactively.
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    33
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    34
A configuration section is available to customize runtime behavior. By
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    35
default, these entries are::
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    36
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    37
  [factotum]
16463
cef755f86d5c factotum: rename mount and path configuration entries
Steven Stallion <sstallion@gmail.com>
parents: 16383
diff changeset
    38
  executable = /bin/auth/factotum
cef755f86d5c factotum: rename mount and path configuration entries
Steven Stallion <sstallion@gmail.com>
parents: 16383
diff changeset
    39
  mountpoint = /mnt/factotum
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    40
  service = hg
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    41
16463
cef755f86d5c factotum: rename mount and path configuration entries
Steven Stallion <sstallion@gmail.com>
parents: 16383
diff changeset
    42
The executable entry defines the full path to the factotum binary. The
cef755f86d5c factotum: rename mount and path configuration entries
Steven Stallion <sstallion@gmail.com>
parents: 16383
diff changeset
    43
mountpoint entry defines the path to the factotum file service. Lastly, the
cef755f86d5c factotum: rename mount and path configuration entries
Steven Stallion <sstallion@gmail.com>
parents: 16383
diff changeset
    44
service entry controls the service name used when reading keys.
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    45
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    46
'''
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    47
28971
bacca31f4835 py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26587
diff changeset
    48
from __future__ import absolute_import
bacca31f4835 py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26587
diff changeset
    49
bacca31f4835 py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26587
diff changeset
    50
import os
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    51
from mercurial.i18n import _
39826
c31ce080eb75 py3: convert arguments, cwd and env to native strings when spawning subprocess
Matt Harbison <matt_harbison@yahoo.com>
parents: 33243
diff changeset
    52
from mercurial.utils import (
c31ce080eb75 py3: convert arguments, cwd and env to native strings when spawning subprocess
Matt Harbison <matt_harbison@yahoo.com>
parents: 33243
diff changeset
    53
    procutil,
c31ce080eb75 py3: convert arguments, cwd and env to native strings when spawning subprocess
Matt Harbison <matt_harbison@yahoo.com>
parents: 33243
diff changeset
    54
)
28971
bacca31f4835 py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26587
diff changeset
    55
from mercurial import (
bacca31f4835 py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26587
diff changeset
    56
    error,
bacca31f4835 py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26587
diff changeset
    57
    httpconnection,
33241
21b568820a3c configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 29377
diff changeset
    58
    registrar,
28971
bacca31f4835 py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26587
diff changeset
    59
    url,
bacca31f4835 py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26587
diff changeset
    60
    util,
bacca31f4835 py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26587
diff changeset
    61
)
bacca31f4835 py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26587
diff changeset
    62
bacca31f4835 py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26587
diff changeset
    63
urlreq = util.urlreq
bacca31f4835 py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26587
diff changeset
    64
passwordmgr = url.passwordmgr
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    65
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    66
ERRMAX = 128
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    67
21228
be561a622100 factotum: initialize global variables to suppress pyflakes warning
Yuya Nishihara <yuya@tcha.org>
parents: 19614
diff changeset
    68
_executable = _mountpoint = _service = None
be561a622100 factotum: initialize global variables to suppress pyflakes warning
Yuya Nishihara <yuya@tcha.org>
parents: 19614
diff changeset
    69
33241
21b568820a3c configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 29377
diff changeset
    70
configtable = {}
21b568820a3c configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 29377
diff changeset
    71
configitem = registrar.configitem(configtable)
21b568820a3c configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 29377
diff changeset
    72
21b568820a3c configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 29377
diff changeset
    73
configitem('factotum', 'executable',
21b568820a3c configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 29377
diff changeset
    74
    default='/bin/auth/factotum',
21b568820a3c configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 29377
diff changeset
    75
)
33242
037c5c937602 configitems: register the 'factotum.mountpoint' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33241
diff changeset
    76
configitem('factotum', 'mountpoint',
037c5c937602 configitems: register the 'factotum.mountpoint' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33241
diff changeset
    77
    default='/mnt/factotum',
037c5c937602 configitems: register the 'factotum.mountpoint' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33241
diff changeset
    78
)
33243
a9524aea7cab configitems: register the 'factotum.service' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33242
diff changeset
    79
configitem('factotum', 'service',
a9524aea7cab configitems: register the 'factotum.service' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33242
diff changeset
    80
    default='hg',
a9524aea7cab configitems: register the 'factotum.service' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33242
diff changeset
    81
)
33241
21b568820a3c configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 29377
diff changeset
    82
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    83
def auth_getkey(self, params):
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    84
    if not self.ui.interactive():
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25078
diff changeset
    85
        raise error.Abort(_('factotum not interactive'))
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    86
    if 'user=' not in params:
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    87
        params = '%s user?' % params
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    88
    params = '%s !password?' % params
39826
c31ce080eb75 py3: convert arguments, cwd and env to native strings when spawning subprocess
Matt Harbison <matt_harbison@yahoo.com>
parents: 33243
diff changeset
    89
    os.system(procutil.tonativestr("%s -g '%s'" % (_executable, params)))
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    90
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    91
def auth_getuserpasswd(self, getkey, params):
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    92
    params = 'proto=pass %s' % params
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    93
    while True:
16463
cef755f86d5c factotum: rename mount and path configuration entries
Steven Stallion <sstallion@gmail.com>
parents: 16383
diff changeset
    94
        fd = os.open('%s/rpc' % _mountpoint, os.O_RDWR)
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
    95
        try:
25078
e8348f1cc228 factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 23393
diff changeset
    96
            os.write(fd, 'start %s' % params)
e8348f1cc228 factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 23393
diff changeset
    97
            l = os.read(fd, ERRMAX).split()
e8348f1cc228 factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 23393
diff changeset
    98
            if l[0] == 'ok':
e8348f1cc228 factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 23393
diff changeset
    99
                os.write(fd, 'read')
e8348f1cc228 factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 23393
diff changeset
   100
                status, user, passwd = os.read(fd, ERRMAX).split(None, 2)
e8348f1cc228 factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 23393
diff changeset
   101
                if status == 'ok':
e8348f1cc228 factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 23393
diff changeset
   102
                    if passwd.startswith("'"):
e8348f1cc228 factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 23393
diff changeset
   103
                        if passwd.endswith("'"):
e8348f1cc228 factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 23393
diff changeset
   104
                            passwd = passwd[1:-1].replace("''", "'")
e8348f1cc228 factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 23393
diff changeset
   105
                        else:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25078
diff changeset
   106
                            raise error.Abort(_('malformed password string'))
25078
e8348f1cc228 factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 23393
diff changeset
   107
                    return (user, passwd)
e8348f1cc228 factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 23393
diff changeset
   108
        except (OSError, IOError):
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25078
diff changeset
   109
            raise error.Abort(_('factotum not responding'))
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   110
        finally:
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   111
            os.close(fd)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   112
        getkey(self, params)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   113
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   114
def monkeypatch_method(cls):
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   115
    def decorator(func):
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   116
        setattr(cls, func.__name__, func)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   117
        return func
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   118
    return decorator
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   119
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   120
@monkeypatch_method(passwordmgr)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   121
def find_user_password(self, realm, authuri):
29377
2c019aac6b99 url: extract password database from password manager
liscju <piotr.listkiewicz@gmail.com>
parents: 28971
diff changeset
   122
    user, passwd = self.passwddb.find_user_password(realm, authuri)
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   123
    if user and passwd:
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   124
        self._writedebug(user, passwd)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   125
        return (user, passwd)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   126
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   127
    prefix = ''
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   128
    res = httpconnection.readauthforuri(self.ui, authuri, user)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   129
    if res:
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   130
        _, auth = res
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   131
        prefix = auth.get('prefix')
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   132
        user, passwd = auth.get('username'), auth.get('password')
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   133
    if not user or not passwd:
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   134
        if not prefix:
19614
1d50c69c1f0a factotum: clean up keychain for multiple hg repository authentication
Jeff Sickel <jas@corpus-callosum.com>
parents: 18647
diff changeset
   135
            prefix = realm.split(' ')[0].lower()
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   136
        params = 'service=%s prefix=%s' % (_service, prefix)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   137
        if user:
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   138
            params = '%s user=%s' % (params, user)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   139
        user, passwd = auth_getuserpasswd(self, auth_getkey, params)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   140
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   141
    self.add_password(realm, authuri, user, passwd)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   142
    self._writedebug(user, passwd)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   143
    return (user, passwd)
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   144
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   145
def uisetup(ui):
16463
cef755f86d5c factotum: rename mount and path configuration entries
Steven Stallion <sstallion@gmail.com>
parents: 16383
diff changeset
   146
    global _executable
33241
21b568820a3c configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 29377
diff changeset
   147
    _executable = ui.config('factotum', 'executable')
16463
cef755f86d5c factotum: rename mount and path configuration entries
Steven Stallion <sstallion@gmail.com>
parents: 16383
diff changeset
   148
    global _mountpoint
33242
037c5c937602 configitems: register the 'factotum.mountpoint' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33241
diff changeset
   149
    _mountpoint = ui.config('factotum', 'mountpoint')
16383
f5dd179bfa4a plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff changeset
   150
    global _service
33243
a9524aea7cab configitems: register the 'factotum.service' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33242
diff changeset
   151
    _service = ui.config('factotum', 'service')