Show More
@@ -71,6 +71,38 b' def netlocunsplit(host, port, user=None,' | |||||
71 | return userpass + '@' + hostport |
|
71 | return userpass + '@' + hostport | |
72 | return hostport |
|
72 | return hostport | |
73 |
|
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 | |||
|
105 | ||||
74 | _safe = ('abcdefghijklmnopqrstuvwxyz' |
|
106 | _safe = ('abcdefghijklmnopqrstuvwxyz' | |
75 | 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|
107 | 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | |
76 | '0123456789' '_.-/') |
|
108 | '0123456789' '_.-/') | |
@@ -149,36 +181,7 b' class passwordmgr(urllib2.HTTPPasswordMg' | |||||
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): |
General Comments 0
You need to be logged in to leave comments.
Login now