From 2ff8a71aebe280635fbebb914e25db87762769b6 Mon Sep 17 00:00:00 2001 From: Boris Rybalkin Date: Fri, 24 Nov 2023 07:09:14 +0000 Subject: [PATCH 1/4] unix socket support --- .gitignore | 1 + mautrix/api.py | 14 ++++++++++---- mautrix/appservice/appservice.py | 11 +++++++++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 96e4ceb9..73c64f1f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ dist/ pip-selfcheck.json *.pyc __pycache__ +.idea \ No newline at end of file diff --git a/mautrix/api.py b/mautrix/api.py index d034149b..2c94f4dc 100644 --- a/mautrix/api.py +++ b/mautrix/api.py @@ -16,7 +16,7 @@ import platform import time -from aiohttp import ClientResponse, ClientSession, __version__ as aiohttp_version +from aiohttp import ClientResponse, ClientSession, UnixConnector, __version__ as aiohttp_version from aiohttp.client_exceptions import ClientError, ContentTypeError from yarl import URL @@ -229,9 +229,15 @@ def __init__( self.base_url = URL(base_url) self.token = token self.log = log or logging.getLogger("mau.http") - self.session = client_session or ClientSession( - loop=loop, headers={"User-Agent": self.default_ua} - ) + if client_session: + self.session = client_session + else: + connector = None + if base_url.startswith('unix://'): + connector = UnixConnector(path=base_url.replace('unix://', '')) + self.session = ClientSession( + loop=loop, headers={"User-Agent": self.default_ua}, connector=connector + ) self.as_user_id = as_user_id self.as_device_id = as_device_id if txn_id is not None: diff --git a/mautrix/appservice/appservice.py b/mautrix/appservice/appservice.py index 892db195..aff6d278 100644 --- a/mautrix/appservice/appservice.py +++ b/mautrix/appservice/appservice.py @@ -152,7 +152,11 @@ async def __aexit__(self) -> None: async def start(self, host: str = "127.0.0.1", port: int = 8080) -> None: await self.state_store.open() self.log.debug(f"Starting appservice web server on {host}:{port}") - if self.server.startswith("https://") and not self.verify_ssl: + if self.server.startswith("unix://"): + path = self.server.replace('unix://', '') + self.server = 'http://localhost' + connector = aiohttp.UnixConnector(limit=self.connection_limit, path=path) + elif self.server.startswith("https://") and not self.verify_ssl: connector = aiohttp.TCPConnector(limit=self.connection_limit, verify_ssl=False) else: connector = aiohttp.TCPConnector(limit=self.connection_limit) @@ -176,7 +180,10 @@ async def start(self, host: str = "127.0.0.1", port: int = 8080) -> None: ssl_ctx.load_cert_chain(self.tls_cert, self.tls_key) self.runner = web.AppRunner(self.app) await self.runner.setup() - site = web.TCPSite(self.runner, host, port, ssl_context=ssl_ctx) + if host.startswith("/"): + site = web.UnixSite(self.runner, host) + else: + site = web.TCPSite(self.runner, host, port, ssl_context=ssl_ctx) await site.start() async def stop(self) -> None: From 778f03137f8636585d515a252890e1cc6793bff1 Mon Sep 17 00:00:00 2001 From: Boris Rybalkin Date: Sun, 26 Nov 2023 19:51:47 +0000 Subject: [PATCH 2/4] ling quotes --- mautrix/api.py | 4 ++-- mautrix/appservice/appservice.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mautrix/api.py b/mautrix/api.py index 2c94f4dc..b8ee2897 100644 --- a/mautrix/api.py +++ b/mautrix/api.py @@ -233,8 +233,8 @@ def __init__( self.session = client_session else: connector = None - if base_url.startswith('unix://'): - connector = UnixConnector(path=base_url.replace('unix://', '')) + if base_url.startswith("unix://"): + connector = UnixConnector(path=base_url.replace("unix://", "")) self.session = ClientSession( loop=loop, headers={"User-Agent": self.default_ua}, connector=connector ) diff --git a/mautrix/appservice/appservice.py b/mautrix/appservice/appservice.py index aff6d278..c877e942 100644 --- a/mautrix/appservice/appservice.py +++ b/mautrix/appservice/appservice.py @@ -153,8 +153,8 @@ async def start(self, host: str = "127.0.0.1", port: int = 8080) -> None: await self.state_store.open() self.log.debug(f"Starting appservice web server on {host}:{port}") if self.server.startswith("unix://"): - path = self.server.replace('unix://', '') - self.server = 'http://localhost' + path = self.server.replace("unix://", "") + self.server = "http://localhost" connector = aiohttp.UnixConnector(limit=self.connection_limit, path=path) elif self.server.startswith("https://") and not self.verify_ssl: connector = aiohttp.TCPConnector(limit=self.connection_limit, verify_ssl=False) From 789d159e1a302aa69879203b0a13ae743965ab4e Mon Sep 17 00:00:00 2001 From: Boris Rybalkin Date: Sun, 26 Nov 2023 19:55:50 +0000 Subject: [PATCH 3/4] end of file --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 73c64f1f..30ec94e7 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,4 @@ dist/ pip-selfcheck.json *.pyc __pycache__ -.idea \ No newline at end of file +.idea From 0b3fa0071154a35a9f8a3609ecb6b2a417487da5 Mon Sep 17 00:00:00 2001 From: Boris Rybalkin Date: Tue, 2 Jan 2024 17:35:54 +0000 Subject: [PATCH 4/4] Update .gitignore Co-authored-by: Sumner Evans --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 30ec94e7..96e4ceb9 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,3 @@ dist/ pip-selfcheck.json *.pyc __pycache__ -.idea