1
0

pass proxy settings to aionostr Manager

rebase on master
This commit is contained in:
f321x
2025-02-13 14:55:09 +01:00
parent 7030f3de18
commit 2290650faa
2 changed files with 34 additions and 12 deletions

View File

@@ -27,7 +27,8 @@ from .bitcoin import (script_to_p2wsh, opcodes,
from .transaction import PartialTxInput, PartialTxOutput, PartialTransaction, Transaction, TxInput, TxOutpoint
from .transaction import script_GetOp, match_script_against_template, OPPushDataGeneric, OPPushDataPubkey
from .util import (log_exceptions, ignore_exceptions, BelowDustLimit, OldTaskGroup, age, ca_path,
gen_nostr_ann_pow, get_nostr_ann_pow_amount)
gen_nostr_ann_pow, get_nostr_ann_pow_amount, make_aiohttp_proxy_connector, get_running_loop,
get_asyncio_loop)
from .lnutil import REDEEM_AFTER_DOUBLE_SPENT_DELAY
from .bitcoin import dust_threshold, DummyAddress
from .logging import Logger
@@ -53,6 +54,7 @@ if TYPE_CHECKING:
from .lnworker import LNWallet
from .lnchannel import Channel
from .simple_config import SimpleConfig
from aiohttp_socks import ProxyConnector
@@ -1322,8 +1324,8 @@ class NostrTransport(SwapServerTransport):
self.nostr_private_key = to_nip19('nsec', keypair.privkey.hex())
self.nostr_pubkey = keypair.pubkey.hex()[2:]
self.dm_replies = defaultdict(asyncio.Future) # type: Dict[bytes, asyncio.Future]
ssl_context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile=ca_path)
self.relay_manager = aionostr.Manager(self.relays, private_key=self.nostr_private_key, log=self.logger, ssl_context=ssl_context)
self.ssl_context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile=ca_path)
self.relay_manager = None
self.taskgroup = OldTaskGroup()
self.server_relays = None
@@ -1339,6 +1341,7 @@ class NostrTransport(SwapServerTransport):
async def main_loop(self):
self.logger.info(f'starting nostr transport with pubkey: {self.nostr_pubkey}')
self.logger.info(f'nostr relays: {self.relays}')
self.relay_manager = self.get_relay_manager()
await self.relay_manager.connect()
connected_relays = self.relay_manager.relays
self.logger.info(f'connected relays: {[relay.url for relay in connected_relays]}')
@@ -1375,6 +1378,21 @@ class NostrTransport(SwapServerTransport):
def relays(self):
return self.network.config.NOSTR_RELAYS.split(',')
def get_relay_manager(self):
assert get_running_loop() == get_asyncio_loop(), f"this must be run on the asyncio thread!"
if not self.relay_manager:
if self.network.proxy:
proxy = make_aiohttp_proxy_connector(self.network.proxy, self.ssl_context)
else:
proxy: Optional['ProxyConnector'] = None
return aionostr.Manager(
self.relays,
private_key=self.nostr_private_key,
log=self.logger,
ssl_context=self.ssl_context,
proxy=proxy)
return self.relay_manager
def get_offer(self, pubkey):
offer = self._offers.get(pubkey)
return self._parse_offer(offer)

View File

@@ -1313,6 +1313,18 @@ def format_short_id(short_channel_id: Optional[bytes]):
+ 'x' + str(int.from_bytes(short_channel_id[6:], 'big'))
def make_aiohttp_proxy_connector(proxy: 'ProxySettings', ssl_context: Optional[ssl.SSLContext] = None) -> ProxyConnector:
return ProxyConnector(
proxy_type=ProxyType.SOCKS5 if proxy.mode == 'socks5' else ProxyType.SOCKS4,
host=proxy.host,
port=int(proxy.port),
username=proxy.user,
password=proxy.password,
rdns=True, # needed to prevent DNS leaks over proxy
ssl=ssl_context,
)
def make_aiohttp_session(proxy: Optional['ProxySettings'], headers=None, timeout=None):
if headers is None:
headers = {'User-Agent': 'Electrum'}
@@ -1325,15 +1337,7 @@ def make_aiohttp_session(proxy: Optional['ProxySettings'], headers=None, timeout
ssl_context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile=ca_path)
if proxy and proxy.enabled:
connector = ProxyConnector(
proxy_type=ProxyType.SOCKS5 if proxy.mode == 'socks5' else ProxyType.SOCKS4,
host=proxy.host,
port=int(proxy.port),
username=proxy.user,
password=proxy.password,
rdns=True, # needed to prevent DNS leaks over proxy
ssl=ssl_context,
)
connector = make_aiohttp_proxy_connector(proxy, ssl_context)
else:
connector = aiohttp.TCPConnector(ssl=ssl_context)