def __init__(self, con_pool_size=1, proxy_url=None, urllib3_proxy_kwargs=None, connect_timeout=5., read_timeout=5.): if urllib3_proxy_kwargs is None: urllib3_proxy_kwargs = dict() self._connect_timeout = connect_timeout sockopts = HTTPConnection.default_socket_options + [ (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)] # TODO: Support other platforms like mac and windows. if 'linux' in sys.platform: sockopts.append((socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 120)) sockopts.append((socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 30)) sockopts.append((socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 8)) kwargs = dict( maxsize=con_pool_size, cert_reqs='CERT_REQUIRED', ca_certs=certifi.where(), socket_options=sockopts, timeout=urllib3.Timeout( connect=self._connect_timeout, read=read_timeout, total=None)) # Set a proxy according to the following order: # * proxy defined in proxy_url (+ urllib3_proxy_kwargs) # * proxy set in `HTTPS_PROXY` env. var. # * proxy set in `https_proxy` env. var. # * None (if no proxy is configured) if not proxy_url: proxy_url = os.environ.get('HTTPS_PROXY') or os.environ.get('https_proxy') if not proxy_url: if appengine.is_appengine_sandbox(): # Use URLFetch service if running in App Engine mgr = appengine.AppEngineManager() else: mgr = urllib3.PoolManager(**kwargs) else: kwargs.update(urllib3_proxy_kwargs) if proxy_url.startswith('socks'): try: from telegram.vendor.ptb_urllib3.urllib3.contrib.socks import SOCKSProxyManager except ImportError: raise RuntimeError('PySocks is missing') mgr = SOCKSProxyManager(proxy_url, **kwargs) else: mgr = urllib3.proxy_from_url(proxy_url, **kwargs) if mgr.proxy.auth: # TODO: what about other auth types? auth_hdrs = urllib3.make_headers(proxy_basic_auth=mgr.proxy.auth) mgr.proxy_headers.update(auth_hdrs) self._con_pool = mgr
def __init__(self, con_pool_size=1, proxy_url=None, urllib3_proxy_kwargs=None, connect_timeout=5., read_timeout=5.): if urllib3_proxy_kwargs is None: urllib3_proxy_kwargs = dict() self._connect_timeout = connect_timeout sockopts = HTTPConnection.default_socket_options + [ (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)] # TODO: Support other platforms like mac and windows. if 'linux' in sys.platform: sockopts.append((socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 120)) # pylint: disable=no-member sockopts.append((socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 30)) # pylint: disable=no-member sockopts.append((socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 8)) # pylint: disable=no-member self._con_pool_size = con_pool_size # This was performed on Windows only, but it shouldn't be a problem # managing cacert.pem on Linux as well # if os.name == 'nt': try: import urllib2 import tempfile capath = os.path.join(tempfile.gettempdir(), 'tg-cacert.pem') # Check if tg-cacert.pem exists and if it's older than 7 days if not os.path.exists(capath) or (os.path.exists(capath) and (time.time() - os.path.getctime(capath)) // (24 * 3600) >= 7): CACERT_URL = "https://curl.haxx.se/ca/cacert.pem" request = urllib2.Request(CACERT_URL) file_contents = urllib2.urlopen(request).read() log.debug("## Telegramer downloaded "+os.path.realpath(capath)) cafile = open(os.path.realpath(capath), 'wb') cafile.write(file_contents) cafile.close() except Exception as e: try: capath = certifi.where() except Exception as e: capath = os.path.join(tempfile.gettempdir(), 'tg-cacert.pem') kwargs = dict( maxsize=con_pool_size, cert_reqs='CERT_REQUIRED', ca_certs=capath, # certifi.where(), socket_options=sockopts, timeout=urllib3.Timeout( connect=self._connect_timeout, read=read_timeout, total=None)) # Set a proxy according to the following order: # * proxy defined in proxy_url (+ urllib3_proxy_kwargs) # * proxy set in `HTTPS_PROXY` env. var. # * proxy set in `https_proxy` env. var. # * None (if no proxy is configured) if not proxy_url: proxy_url = os.environ.get('HTTPS_PROXY') or os.environ.get('https_proxy') if not proxy_url: if appengine.is_appengine_sandbox(): # Use URLFetch service if running in App Engine mgr = appengine.AppEngineManager() else: mgr = urllib3.PoolManager(**kwargs) else: kwargs.update(urllib3_proxy_kwargs) if proxy_url.startswith('socks'): try: from telegram.vendor.ptb_urllib3.urllib3.contrib.socks import SOCKSProxyManager except ImportError: raise RuntimeError('PySocks is missing') mgr = SOCKSProxyManager(proxy_url, **kwargs) else: mgr = urllib3.proxy_from_url(proxy_url, **kwargs) if mgr.proxy.auth: # TODO: what about other auth types? auth_hdrs = urllib3.make_headers(proxy_basic_auth=mgr.proxy.auth) mgr.proxy_headers.update(auth_hdrs) self._con_pool = mgr
def __init__(self, con_pool_size=1, proxy_url=None, urllib3_proxy_kwargs=None, connect_timeout=5., read_timeout=5.): if urllib3_proxy_kwargs is None: urllib3_proxy_kwargs = dict() self._connect_timeout = connect_timeout sockopts = HTTPConnection.default_socket_options + [ (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)] # TODO: Support other platforms like mac and windows. if 'linux' in sys.platform: sockopts.append((socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 120)) sockopts.append((socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 30)) sockopts.append((socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 8)) self._con_pool_size = con_pool_size # This was performed on Windows only, but it shouldn't be a problem # managing cacert.pem on Linux as well #if os.name == 'nt': try: import urllib2 import tempfile capath = os.path.join(tempfile.gettempdir(), 'tg-cacert.pem') # Check if tg-cacert.pem exists and if it's older than 7 days if not os.path.exists(capath) or (os.path.exists(capath) \ and (time.time() - os.path.getctime(capath)) // (24 * 3600) >= 7): CACERT_URL = "https://curl.haxx.se/ca/cacert.pem" request = urllib2.Request(CACERT_URL) file_contents = urllib2.urlopen(request).read() log.debug("## Telegramer downloaded "+os.path.realpath(capath)) cafile = open(os.path.realpath(capath), 'wb') cafile.write(file_contents) cafile.close() except: try: capath = certifi.where() except: capath = os.path.join(tempfile.gettempdir(), 'tg-cacert.pem') kwargs = dict( maxsize=con_pool_size, cert_reqs='CERT_REQUIRED', ca_certs=capath, #certifi.where(), socket_options=sockopts, timeout=urllib3.Timeout( connect=self._connect_timeout, read=read_timeout, total=None)) # Set a proxy according to the following order: # * proxy defined in proxy_url (+ urllib3_proxy_kwargs) # * proxy set in `HTTPS_PROXY` env. var. # * proxy set in `https_proxy` env. var. # * None (if no proxy is configured) if not proxy_url: proxy_url = os.environ.get('HTTPS_PROXY') or os.environ.get('https_proxy') if not proxy_url: if appengine.is_appengine_sandbox(): # Use URLFetch service if running in App Engine mgr = appengine.AppEngineManager() else: mgr = urllib3.PoolManager(**kwargs) else: kwargs.update(urllib3_proxy_kwargs) if proxy_url.startswith('socks'): try: from telegram.vendor.ptb_urllib3.urllib3.contrib.socks import SOCKSProxyManager except ImportError: raise RuntimeError('PySocks is missing') mgr = SOCKSProxyManager(proxy_url, **kwargs) else: mgr = urllib3.proxy_from_url(proxy_url, **kwargs) if mgr.proxy.auth: # TODO: what about other auth types? auth_hdrs = urllib3.make_headers(proxy_basic_auth=mgr.proxy.auth) mgr.proxy_headers.update(auth_hdrs) self._con_pool = mgr
bot.send_message(chat_id=settings.ADMIN_ID, text=u'\U0001F50B\U000026A1 Bot started') except Exception as e: print("[EXCEPTION] _notify_start") if __name__=="__main__": # proxy authentication REQUEST_KWARGS=None if settings.PROXY: import telegram.vendor.ptb_urllib3.urllib3 as urllib3 REQUEST_KWARGS={"proxy_url": settings.PROXY_TYPE+settings.PROXY_URL, "urllib3_proxy_kwargs": {'proxy_headers': urllib3.make_headers(proxy_basic_auth=settings.PROXY_AUTH)}} # frontend to telegram.Bot updater=ext.Updater(settings.TOKEN, use_context=True, request_kwargs=REQUEST_KWARGS) dispatcher=updater.dispatcher # admin command handlers dispatcher.add_handler(ext.CommandHandler(["users", "users_list", "users_detail", "users_delete"], functions.admin.users)) dispatcher.add_handler(ext.CommandHandler(["data", "data_set", "data_delete"], functions.admin.manage_data)) dispatcher.add_handler(ext.CommandHandler(["message"], functions.admin.message)) # command handlers dispatcher.add_handler(ext.CommandHandler(["start", "restart"], functions.commands.start)) dispatcher.add_handler(ext.CommandHandler(["help"], functions.commands.help)) dispatcher.add_handler(ext.CommandHandler(["pin"], functions.commands.pin)) dispatcher.add_handler(ext.CommandHandler(["everybody"], functions.commands.everybody))
TOKEN = 'TOKEN' use_proxy = False proxy = 'https://localhost:1080/' # proxy with auth is not tested proxy_username, proxy_password = None, None if use_proxy: request_kw = {'proxy_url': proxy} if proxy_username != None: from telegram.vendor.ptb_urllib3.urllib3 import make_headers request_kw['urllib3_proxy_kwargs'] = { 'headers': make_headers(proxy_basic_auth=proxy_username + ':' + proxy_password) } else: request_kw = None