68 userpass = quote(user) + ':' + quote(passwd) |
68 userpass = quote(user) + ':' + quote(passwd) |
69 else: |
69 else: |
70 userpass = quote(user) |
70 userpass = quote(user) |
71 return userpass + '@' + hostport |
71 return userpass + '@' + hostport |
72 return hostport |
72 return hostport |
|
73 |
|
74 def readauthforuri(ui, uri): |
|
75 # Read configuration |
|
76 config = dict() |
|
77 for key, val in ui.configitems('auth'): |
|
78 if '.' not in key: |
|
79 ui.warn(_("ignoring invalid [auth] key '%s'\n") % key) |
|
80 continue |
|
81 group, setting = key.rsplit('.', 1) |
|
82 gdict = config.setdefault(group, dict()) |
|
83 if setting in ('username', 'cert', 'key'): |
|
84 val = util.expandpath(val) |
|
85 gdict[setting] = val |
|
86 |
|
87 # Find the best match |
|
88 scheme, hostpath = uri.split('://', 1) |
|
89 bestlen = 0 |
|
90 bestauth = None |
|
91 for auth in config.itervalues(): |
|
92 prefix = auth.get('prefix') |
|
93 if not prefix: |
|
94 continue |
|
95 p = prefix.split('://', 1) |
|
96 if len(p) > 1: |
|
97 schemes, prefix = [p[0]], p[1] |
|
98 else: |
|
99 schemes = (auth.get('schemes') or 'https').split() |
|
100 if (prefix == '*' or hostpath.startswith(prefix)) and \ |
|
101 len(prefix) > bestlen and scheme in schemes: |
|
102 bestlen = len(prefix) |
|
103 bestauth = auth |
|
104 return bestauth |
73 |
105 |
74 _safe = ('abcdefghijklmnopqrstuvwxyz' |
106 _safe = ('abcdefghijklmnopqrstuvwxyz' |
75 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' |
107 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' |
76 '0123456789' '_.-/') |
108 '0123456789' '_.-/') |
77 _safeset = None |
109 _safeset = None |
147 def _writedebug(self, user, passwd): |
179 def _writedebug(self, user, passwd): |
148 msg = _('http auth: user %s, password %s\n') |
180 msg = _('http auth: user %s, password %s\n') |
149 self.ui.debug(msg % (user, passwd and '*' * len(passwd) or 'not set')) |
181 self.ui.debug(msg % (user, passwd and '*' * len(passwd) or 'not set')) |
150 |
182 |
151 def readauthtoken(self, uri): |
183 def readauthtoken(self, uri): |
152 # Read configuration |
184 return readauthforuri(self.ui, uri) |
153 config = dict() |
|
154 for key, val in self.ui.configitems('auth'): |
|
155 if '.' not in key: |
|
156 self.ui.warn(_("ignoring invalid [auth] key '%s'\n") % key) |
|
157 continue |
|
158 group, setting = key.rsplit('.', 1) |
|
159 gdict = config.setdefault(group, dict()) |
|
160 if setting in ('username', 'cert', 'key'): |
|
161 val = util.expandpath(val) |
|
162 gdict[setting] = val |
|
163 |
|
164 # Find the best match |
|
165 scheme, hostpath = uri.split('://', 1) |
|
166 bestlen = 0 |
|
167 bestauth = None |
|
168 for auth in config.itervalues(): |
|
169 prefix = auth.get('prefix') |
|
170 if not prefix: |
|
171 continue |
|
172 p = prefix.split('://', 1) |
|
173 if len(p) > 1: |
|
174 schemes, prefix = [p[0]], p[1] |
|
175 else: |
|
176 schemes = (auth.get('schemes') or 'https').split() |
|
177 if (prefix == '*' or hostpath.startswith(prefix)) and \ |
|
178 len(prefix) > bestlen and scheme in schemes: |
|
179 bestlen = len(prefix) |
|
180 bestauth = auth |
|
181 return bestauth |
|
182 |
185 |
183 class proxyhandler(urllib2.ProxyHandler): |
186 class proxyhandler(urllib2.ProxyHandler): |
184 def __init__(self, ui): |
187 def __init__(self, ui): |
185 proxyurl = ui.config("http_proxy", "host") or os.getenv('http_proxy') |
188 proxyurl = ui.config("http_proxy", "host") or os.getenv('http_proxy') |
186 # XXX proxyauthinfo = None |
189 # XXX proxyauthinfo = None |