Merge pull request #1965 from lbryio/certifi
fix ssl errors, use certifi to make ssl contexts
This commit is contained in:
commit
be4a96c1b3
6 changed files with 28 additions and 13 deletions
|
@ -1,6 +1,5 @@
|
||||||
import os
|
import os
|
||||||
import asyncio
|
import asyncio
|
||||||
import aiohttp
|
|
||||||
import logging
|
import logging
|
||||||
import math
|
import math
|
||||||
import binascii
|
import binascii
|
||||||
|
@ -54,11 +53,10 @@ async def gather_dict(tasks: dict):
|
||||||
|
|
||||||
async def get_external_ip(): # used if upnp is disabled or non-functioning
|
async def get_external_ip(): # used if upnp is disabled or non-functioning
|
||||||
try:
|
try:
|
||||||
async with aiohttp.ClientSession() as session:
|
async with utils.aiohttp_request("get", "https://api.lbry.io/ip") as resp:
|
||||||
async with session.get("https://api.lbry.io/ip") as resp:
|
response = await resp.json()
|
||||||
response = await resp.json()
|
if response['success']:
|
||||||
if response['success']:
|
return response['data']['ip']
|
||||||
return response['data']['ip']
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -149,7 +147,7 @@ class HeadersComponent(Component):
|
||||||
async def fetch_headers_from_s3(self):
|
async def fetch_headers_from_s3(self):
|
||||||
local_header_size = self.local_header_file_size()
|
local_header_size = self.local_header_file_size()
|
||||||
resume_header = {"Range": f"bytes={local_header_size}-"}
|
resume_header = {"Range": f"bytes={local_header_size}-"}
|
||||||
async with aiohttp.request('get', HEADERS_URL, headers=resume_header) as response:
|
async with utils.aiohttp_request('get', HEADERS_URL, headers=resume_header) as response:
|
||||||
if response.status == 406 or response.content_length < HEADER_SIZE: # our file is bigger
|
if response.status == 406 or response.content_length < HEADER_SIZE: # our file is bigger
|
||||||
log.warning("s3 is more out of date than we are")
|
log.warning("s3 is more out of date than we are")
|
||||||
return
|
return
|
||||||
|
|
|
@ -81,7 +81,7 @@ class Manager:
|
||||||
'cookies': self.cookies
|
'cookies': self.cookies
|
||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
async with aiohttp.request(**request_kwargs) as response:
|
async with utils.aiohttp_request(**request_kwargs) as response:
|
||||||
self.cookies.update(response.cookies)
|
self.cookies.update(response.cookies)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.exception('Encountered an exception while POSTing to %s: ', self.url + endpoint, exc_info=e)
|
log.exception('Encountered an exception while POSTing to %s: ', self.url + endpoint, exc_info=e)
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import aiohttp
|
|
||||||
import time
|
import time
|
||||||
import logging
|
import logging
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from lbrynet.error import InvalidExchangeRateResponse, CurrencyConversionError
|
from lbrynet.error import InvalidExchangeRateResponse, CurrencyConversionError
|
||||||
|
from lbrynet.utils import aiohttp_request
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -52,8 +52,8 @@ class MarketFeed:
|
||||||
def is_online(self):
|
def is_online(self):
|
||||||
return self._online
|
return self._online
|
||||||
|
|
||||||
async def _make_request(self):
|
async def _make_request(self) -> str:
|
||||||
async with aiohttp.request('get', self.url, params=self.params) as response:
|
async with aiohttp_request('get', self.url, params=self.params) as response:
|
||||||
return (await response.read()).decode()
|
return (await response.read()).decode()
|
||||||
|
|
||||||
def _handle_response(self, response):
|
def _handle_response(self, response):
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import aiohttp
|
|
||||||
import json
|
import json
|
||||||
import logging.handlers
|
import logging.handlers
|
||||||
import traceback
|
import traceback
|
||||||
|
@ -51,7 +50,7 @@ class HTTPSLogglyHandler(logging.Handler):
|
||||||
|
|
||||||
async def _emit(self, record):
|
async def _emit(self, record):
|
||||||
payload = self.format(record)
|
payload = self.format(record)
|
||||||
async with aiohttp.request('post', self.url, data=payload.encode(), cookies=self.cookies) as response:
|
async with utils.aiohttp_request('post', self.url, data=payload.encode(), cookies=self.cookies) as response:
|
||||||
self.cookies.update(response.cookies)
|
self.cookies.update(response.cookies)
|
||||||
|
|
||||||
def emit(self, record):
|
def emit(self, record):
|
||||||
|
|
|
@ -7,9 +7,13 @@ import string
|
||||||
import json
|
import json
|
||||||
import typing
|
import typing
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import ssl
|
||||||
import logging
|
import logging
|
||||||
import ipaddress
|
import ipaddress
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
|
import contextlib
|
||||||
|
import certifi
|
||||||
|
import aiohttp
|
||||||
from lbrynet.schema.claim import ClaimDict
|
from lbrynet.schema.claim import ClaimDict
|
||||||
from lbrynet.cryptoutils import get_lbry_hash_obj
|
from lbrynet.cryptoutils import get_lbry_hash_obj
|
||||||
|
|
||||||
|
@ -156,3 +160,16 @@ async def resolve_host(url: str, port: int, proto: str) -> str:
|
||||||
proto=socket.IPPROTO_TCP if proto == 'tcp' else socket.IPPROTO_UDP,
|
proto=socket.IPPROTO_TCP if proto == 'tcp' else socket.IPPROTO_UDP,
|
||||||
type=socket.SOCK_STREAM if proto == 'tcp' else socket.SOCK_DGRAM
|
type=socket.SOCK_STREAM if proto == 'tcp' else socket.SOCK_DGRAM
|
||||||
))[0][4][0]
|
))[0][4][0]
|
||||||
|
|
||||||
|
|
||||||
|
def get_ssl_context() -> ssl.SSLContext:
|
||||||
|
return ssl.create_default_context(
|
||||||
|
purpose=ssl.Purpose.CLIENT_AUTH, capath=certifi.where()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@contextlib.asynccontextmanager
|
||||||
|
async def aiohttp_request(method, url, **kwargs) -> typing.AsyncContextManager[aiohttp.ClientResponse]:
|
||||||
|
async with aiohttp.ClientSession() as session:
|
||||||
|
async with session.request(method, url, ssl=get_ssl_context(), **kwargs) as response:
|
||||||
|
yield response
|
||||||
|
|
1
setup.py
1
setup.py
|
@ -26,6 +26,7 @@ setup(
|
||||||
'aiohttp==3.5.4',
|
'aiohttp==3.5.4',
|
||||||
'aioupnp',
|
'aioupnp',
|
||||||
'appdirs==1.4.3',
|
'appdirs==1.4.3',
|
||||||
|
'certifi>=2018.11.29',
|
||||||
'colorama==0.3.7',
|
'colorama==0.3.7',
|
||||||
'distro==1.4.0',
|
'distro==1.4.0',
|
||||||
'base58==1.0.0',
|
'base58==1.0.0',
|
||||||
|
|
Loading…
Add table
Reference in a new issue