Package restkit :: Package filters :: Module simpleproxy
[hide private]
[frames] | no frames]

Source Code for Module restkit.filters.simpleproxy

 1  # -*- coding: utf-8 - 
 2  # 
 3  # This file is part of restkit released under the MIT license.  
 4  # See the NOTICE for more information. 
 5   
 6  """ 
 7  filters - Simple proxy  
 8   
 9  """ 
10   
11  import base64 
12  import os 
13  import urlparse 
14  import socket 
15   
16  from restkit import util 
17   
18  from restkit import __version__ 
19           
20 -class ProxyError(Exception):
21 pass
22
23 -class SimpleProxy(object):
24 """ Simple proxy filter. 25 This filter find proxy from environment and if it exists it 26 connect to the proxy and modify connection headers. 27 """ 28
29 - def on_connect(self, conn):
30 proxy_auth = _get_proxy_auth() 31 if conn.uri.is_ssl == "https": 32 proxy = os.environ.get('https_proxy') 33 if proxy: 34 if proxy_auth: 35 proxy_auth = 'Proxy-authorization: %s' % proxy_auth 36 proxy_connect = 'CONNECT %s:%s HTTP/1.0\r\n' % conn.addr 37 user_agent = "User-Agent: restkit/%s\r\n" % __version__ 38 proxy_pieces = '%s%s%s\r\n' % (proxy_connect, proxy_auth, 39 user_agent) 40 proxy_uri = urlparse.urlparse(proxy) 41 proxy_host, proxy_port = util.parse_netloc(proxy_uri) 42 43 route = ((proxy_host, proxy_port), True, None, {}) 44 pool = conn.get_pool(route) 45 46 try: 47 p_sock = pool.request() 48 except socket.error, e: 49 raise ProxyError(str(e)) 50 51 conn.sock = p_sock 52 conn.addr = (proxy_host, proxy_port) 53 conn.is_ssl = True 54 55 else: 56 proxy = os.environ.get('http_proxy') 57 if proxy: 58 proxy_uri = urlparse.urlparse(proxy) 59 proxy_host, proxy_port = self._host_port(proxy_uri) 60 if proxy_auth: 61 proxy.headers.append(('Proxy-Authorization', 62 proxy_auth.strip())) 63 proxy.addr = (proxy_host, proxy_port)
64 65
66 -def _get_proxy_auth():
67 proxy_username = os.environ.get('proxy-username') 68 if not proxy_username: 69 proxy_username = os.environ.get('proxy_username') 70 proxy_password = os.environ.get('proxy-password') 71 if not proxy_password: 72 proxy_password = os.environ.get('proxy_password') 73 if proxy_username: 74 user_auth = base64.encodestring('%s:%s' % (proxy_username, 75 proxy_password)) 76 return 'Basic %s\r\n' % (user_auth.strip()) 77 else: 78 return ''
79