117 |
118 |
118 urlreq.proxyhandler.__init__(self, proxies) |
119 urlreq.proxyhandler.__init__(self, proxies) |
119 self.ui = ui |
120 self.ui = ui |
120 |
121 |
121 def proxy_open(self, req, proxy, type_): |
122 def proxy_open(self, req, proxy, type_): |
122 host = req.get_host().split(':')[0] |
123 host = urllibcompat.gethost(req).split(':')[0] |
123 for e in self.no_list: |
124 for e in self.no_list: |
124 if host == e: |
125 if host == e: |
125 return None |
126 return None |
126 if e.startswith('*.') and host.endswith(e[2:]): |
127 if e.startswith('*.') and host.endswith(e[2:]): |
127 return None |
128 return None |
164 if tunnel_host: |
165 if tunnel_host: |
165 if tunnel_host[:7] not in ['http://', 'https:/']: |
166 if tunnel_host[:7] not in ['http://', 'https:/']: |
166 tunnel_host = 'https://' + tunnel_host |
167 tunnel_host = 'https://' + tunnel_host |
167 new_tunnel = True |
168 new_tunnel = True |
168 else: |
169 else: |
169 tunnel_host = req.get_selector() |
170 tunnel_host = urllibcompat.getselector(req) |
170 new_tunnel = False |
171 new_tunnel = False |
171 |
172 |
172 if new_tunnel or tunnel_host == req.get_full_url(): # has proxy |
173 if new_tunnel or tunnel_host == urllibcompat.getfullurl(req): # has proxy |
173 u = util.url(tunnel_host) |
174 u = util.url(tunnel_host) |
174 if new_tunnel or u.scheme == 'https': # only use CONNECT for HTTPS |
175 if new_tunnel or u.scheme == 'https': # only use CONNECT for HTTPS |
175 h.realhostport = ':'.join([u.host, (u.port or '443')]) |
176 h.realhostport = ':'.join([u.host, (u.port or '443')]) |
176 h.headers = req.headers.copy() |
177 h.headers = req.headers.copy() |
177 h.headers.update(handler.parent.addheaders) |
178 h.headers.update(handler.parent.addheaders) |
318 def _start_transaction(self, h, req): |
319 def _start_transaction(self, h, req): |
319 _generic_start_transaction(self, h, req) |
320 _generic_start_transaction(self, h, req) |
320 return keepalive.KeepAliveHandler._start_transaction(self, h, req) |
321 return keepalive.KeepAliveHandler._start_transaction(self, h, req) |
321 |
322 |
322 def https_open(self, req): |
323 def https_open(self, req): |
323 # req.get_full_url() does not contain credentials and we may |
324 # urllibcompat.getfullurl() does not contain credentials |
324 # need them to match the certificates. |
325 # and we may need them to match the certificates. |
325 url = req.get_full_url() |
326 url = urllibcompat.getfullurl(req) |
326 user, password = self.pwmgr.find_stored_password(url) |
327 user, password = self.pwmgr.find_stored_password(url) |
327 res = httpconnectionmod.readauthforuri(self.ui, url, user) |
328 res = httpconnectionmod.readauthforuri(self.ui, url, user) |
328 if res: |
329 if res: |
329 group, auth = res |
330 group, auth = res |
330 self.auth = auth |
331 self.auth = auth |
404 self.retried = 0 |
405 self.retried = 0 |
405 return urlreq.httpbasicauthhandler.http_error_auth_reqed( |
406 return urlreq.httpbasicauthhandler.http_error_auth_reqed( |
406 self, auth_header, host, req, headers) |
407 self, auth_header, host, req, headers) |
407 |
408 |
408 def retry_http_basic_auth(self, host, req, realm): |
409 def retry_http_basic_auth(self, host, req, realm): |
409 user, pw = self.passwd.find_user_password(realm, req.get_full_url()) |
410 user, pw = self.passwd.find_user_password( |
|
411 realm, urllibcompat.getfullurl(req)) |
410 if pw is not None: |
412 if pw is not None: |
411 raw = "%s:%s" % (user, pw) |
413 raw = "%s:%s" % (user, pw) |
412 auth = 'Basic %s' % base64.b64encode(raw).strip() |
414 auth = 'Basic %s' % base64.b64encode(raw).strip() |
413 if req.get_header(self.auth_header, None) == auth: |
415 if req.get_header(self.auth_header, None) == auth: |
414 return None |
416 return None |