Mercurial > hg
annotate hgext/factotum.py @ 46733:1bac7764ceef
rhg: Fall back to Python if unsupported extensions are enabled
Extensions might affect behavior in ways we can’t anticipate,
so just ignoring them is not correct.
Later we’ll add opt-in configuration to ignore specific extensions.
Differential Revision: https://phab.mercurial-scm.org/D10112
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Thu, 04 Mar 2021 10:58:43 +0100 |
parents | 89a2afe31e82 |
children | 6000f5b25c9b |
rev | line source |
---|---|
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 _ |
43087
66f2cc210a29
py3: manually import pycompat.setattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
52 from mercurial.pycompat import setattr |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
39826
diff
changeset
|
53 from mercurial.utils import procutil |
28971
bacca31f4835
py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26587
diff
changeset
|
54 from mercurial import ( |
bacca31f4835
py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26587
diff
changeset
|
55 error, |
bacca31f4835
py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26587
diff
changeset
|
56 httpconnection, |
33241
21b568820a3c
configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
29377
diff
changeset
|
57 registrar, |
28971
bacca31f4835
py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26587
diff
changeset
|
58 url, |
bacca31f4835
py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26587
diff
changeset
|
59 util, |
bacca31f4835
py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26587
diff
changeset
|
60 ) |
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 urlreq = util.urlreq |
bacca31f4835
py3: make factotum use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26587
diff
changeset
|
63 passwordmgr = url.passwordmgr |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
64 |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
65 ERRMAX = 128 |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
66 |
21228
be561a622100
factotum: initialize global variables to suppress pyflakes warning
Yuya Nishihara <yuya@tcha.org>
parents:
19614
diff
changeset
|
67 _executable = _mountpoint = _service = None |
be561a622100
factotum: initialize global variables to suppress pyflakes warning
Yuya Nishihara <yuya@tcha.org>
parents:
19614
diff
changeset
|
68 |
33241
21b568820a3c
configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
29377
diff
changeset
|
69 configtable = {} |
21b568820a3c
configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
29377
diff
changeset
|
70 configitem = registrar.configitem(configtable) |
21b568820a3c
configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
29377
diff
changeset
|
71 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
39826
diff
changeset
|
72 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43087
diff
changeset
|
73 b'factotum', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43087
diff
changeset
|
74 b'executable', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43087
diff
changeset
|
75 default=b'/bin/auth/factotum', |
33241
21b568820a3c
configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
29377
diff
changeset
|
76 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
39826
diff
changeset
|
77 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43087
diff
changeset
|
78 b'factotum', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43087
diff
changeset
|
79 b'mountpoint', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43087
diff
changeset
|
80 default=b'/mnt/factotum', |
33242
037c5c937602
configitems: register the 'factotum.mountpoint' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33241
diff
changeset
|
81 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
39826
diff
changeset
|
82 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43087
diff
changeset
|
83 b'factotum', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43087
diff
changeset
|
84 b'service', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43087
diff
changeset
|
85 default=b'hg', |
33243
a9524aea7cab
configitems: register the 'factotum.service' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33242
diff
changeset
|
86 ) |
33241
21b568820a3c
configitems: register the 'factotum.executable' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
29377
diff
changeset
|
87 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
39826
diff
changeset
|
88 |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
89 def auth_getkey(self, params): |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
90 if not self.ui.interactive(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
91 raise error.Abort(_(b'factotum not interactive')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
92 if b'user=' not in params: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
93 params = b'%s user?' % params |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
94 params = b'%s !password?' % params |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
95 os.system(procutil.tonativestr(b"%s -g '%s'" % (_executable, params))) |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
96 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
39826
diff
changeset
|
97 |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
98 def auth_getuserpasswd(self, getkey, params): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
99 params = b'proto=pass %s' % params |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
100 while True: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
101 fd = os.open(b'%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
|
102 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
103 os.write(fd, b'start %s' % params) |
25078
e8348f1cc228
factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
23393
diff
changeset
|
104 l = os.read(fd, ERRMAX).split() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
105 if l[0] == b'ok': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
106 os.write(fd, b'read') |
25078
e8348f1cc228
factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
23393
diff
changeset
|
107 status, user, passwd = os.read(fd, ERRMAX).split(None, 2) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
108 if status == b'ok': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
109 if passwd.startswith(b"'"): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
110 if passwd.endswith(b"'"): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
111 passwd = passwd[1:-1].replace(b"''", b"'") |
25078
e8348f1cc228
factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
23393
diff
changeset
|
112 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
113 raise error.Abort(_(b'malformed password string')) |
25078
e8348f1cc228
factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
23393
diff
changeset
|
114 return (user, passwd) |
e8348f1cc228
factotum: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
23393
diff
changeset
|
115 except (OSError, IOError): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
116 raise error.Abort(_(b'factotum not responding')) |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
117 finally: |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
118 os.close(fd) |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
119 getkey(self, params) |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
120 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
39826
diff
changeset
|
121 |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
122 def monkeypatch_method(cls): |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
123 def decorator(func): |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
124 setattr(cls, func.__name__, func) |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
125 return func |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
39826
diff
changeset
|
126 |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
127 return decorator |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
128 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
39826
diff
changeset
|
129 |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
130 @monkeypatch_method(passwordmgr) |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
131 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
|
132 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
|
133 if user and passwd: |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
134 self._writedebug(user, passwd) |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
135 return (user, passwd) |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
136 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
137 prefix = b'' |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
138 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
|
139 if res: |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
140 _, auth = res |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
141 prefix = auth.get(b'prefix') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
142 user, passwd = auth.get(b'username'), auth.get(b'password') |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
143 if not user or not passwd: |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
144 if not prefix: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 prefix = realm.split(b' ')[0].lower() |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
146 params = b'service=%s prefix=%s' % (_service, prefix) |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
147 if user: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
148 params = b'%s user=%s' % (params, user) |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
149 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
|
150 |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
151 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
|
152 self._writedebug(user, passwd) |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
153 return (user, passwd) |
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
154 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
39826
diff
changeset
|
155 |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
156 def uisetup(ui): |
16463
cef755f86d5c
factotum: rename mount and path configuration entries
Steven Stallion <sstallion@gmail.com>
parents:
16383
diff
changeset
|
157 global _executable |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
158 _executable = ui.config(b'factotum', b'executable') |
16463
cef755f86d5c
factotum: rename mount and path configuration entries
Steven Stallion <sstallion@gmail.com>
parents:
16383
diff
changeset
|
159 global _mountpoint |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
160 _mountpoint = ui.config(b'factotum', b'mountpoint') |
16383
f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com>
parents:
diff
changeset
|
161 global _service |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
162 _service = ui.config(b'factotum', b'service') |