@@ -145,7 +145,7 @@ def request(
145145 print ("Requesting %s" % dest , file = sys .stderr )
146146
147147 s = requests .Session ()
148- s .mount ("matrix-federation://" , MatrixConnectionAdapter ())
148+ s .mount ("matrix-federation://" , MatrixConnectionAdapter (verify_tls = verify_tls ))
149149
150150 headers : dict [str , str ] = {
151151 "Authorization" : authorization_headers [0 ],
@@ -267,6 +267,17 @@ def read_args_from_config(args: argparse.Namespace) -> None:
267267
268268
269269class MatrixConnectionAdapter (HTTPAdapter ):
270+ """
271+ A Matrix federation-aware HTTP Adapter.
272+ """
273+
274+ verify_tls : bool
275+ """whether to verify the remote server's TLS certificate."""
276+
277+ def __init__ (self , verify_tls : bool = True ) -> None :
278+ self .verify_tls = verify_tls
279+ super ().__init__ ()
280+
270281 def send (
271282 self ,
272283 request : PreparedRequest ,
@@ -280,7 +291,7 @@ def send(
280291 assert isinstance (request .url , str )
281292 parsed = urlparse .urlsplit (request .url )
282293 server_name = parsed .netloc
283- well_known = self ._get_well_known (parsed .netloc )
294+ well_known = self ._get_well_known (parsed .netloc , verify_tls = self . verify_tls )
284295
285296 if well_known :
286297 server_name = well_known
@@ -318,6 +329,21 @@ def get_connection_with_tls_context(
318329 print (
319330 f"Connecting to { host } :{ port } with SNI { ssl_server_name } " , file = sys .stderr
320331 )
332+
333+ if proxies :
334+ scheme = parsed .scheme
335+ if isinstance (scheme , bytes ):
336+ scheme = scheme .decode ("utf-8" )
337+
338+ proxy_for_scheme = proxies .get (scheme )
339+ if proxy_for_scheme :
340+ return self .proxy_manager_for (proxy_for_scheme ).connection_from_host (
341+ host ,
342+ port = port ,
343+ scheme = "https" ,
344+ pool_kwargs = {"server_hostname" : ssl_server_name },
345+ )
346+
321347 return self .poolmanager .connection_from_host (
322348 host ,
323349 port = port ,
@@ -368,7 +394,7 @@ def _lookup(server_name: str) -> tuple[str, int, str]:
368394 return server_name , 8448 , server_name
369395
370396 @staticmethod
371- def _get_well_known (server_name : str ) -> str | None :
397+ def _get_well_known (server_name : str , verify_tls : bool = True ) -> str | None :
372398 if ":" in server_name :
373399 # explicit port, or ipv6 literal. Either way, no .well-known
374400 return None
@@ -379,7 +405,7 @@ def _get_well_known(server_name: str) -> str | None:
379405 print (f"fetching { uri } " , file = sys .stderr )
380406
381407 try :
382- resp = requests .get (uri )
408+ resp = requests .get (uri , verify = verify_tls )
383409 if resp .status_code != 200 :
384410 print ("%s gave %i" % (uri , resp .status_code ), file = sys .stderr )
385411 return None
0 commit comments