From f12992c5d9ff1f657f9c4652e63d7c07f2a163f3 Mon Sep 17 00:00:00 2001 From: Giacomo Leidi Date: Thu, 11 Nov 2021 16:25:09 +0100 Subject: [PATCH] publishers: zulip: Let the user specify their instance. (#95) --- mobilizon_reshare/.secrets.toml | 2 ++ mobilizon_reshare/config/notifiers.py | 1 + mobilizon_reshare/config/publishers.py | 1 + mobilizon_reshare/publishers/platforms/zulip.py | 11 ++++++----- tests/publishers/test_zulip.py | 3 +++ 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/mobilizon_reshare/.secrets.toml b/mobilizon_reshare/.secrets.toml index 9347db2..979ff57 100644 --- a/mobilizon_reshare/.secrets.toml +++ b/mobilizon_reshare/.secrets.toml @@ -7,6 +7,7 @@ username="xxx" active=false [default.publisher.zulip] active=true +instance="xxx" chat_id="xxx" subject="xxx" bot_token="xxx" @@ -31,6 +32,7 @@ token="xxx" username="xxx" [default.notifier.zulip] active=true +instance="xxx" chat_id="xxx" subject="xxx" bot_token="xxx" diff --git a/mobilizon_reshare/config/notifiers.py b/mobilizon_reshare/config/notifiers.py index abcb896..f44b7f9 100644 --- a/mobilizon_reshare/config/notifiers.py +++ b/mobilizon_reshare/config/notifiers.py @@ -14,6 +14,7 @@ zulip_validators = [ Validator("notifier.zulip.bot_email", must_exist=True), ] mastodon_validators = [ + Validator("publisher.zulip.instance", must_exist=True), Validator("notifier.mastodon.instance", must_exist=True), Validator("notifier.mastodon.token", must_exist=True), Validator("notifier.mastodon.name", must_exist=True), diff --git a/mobilizon_reshare/config/publishers.py b/mobilizon_reshare/config/publishers.py index a6b7958..3659109 100644 --- a/mobilizon_reshare/config/publishers.py +++ b/mobilizon_reshare/config/publishers.py @@ -12,6 +12,7 @@ telegram_validators = [ Validator("publisher.telegram.username", must_exist=True), ] zulip_validators = [ + Validator("publisher.zulip.instance", must_exist=True), Validator("publisher.zulip.chat_id", must_exist=True), Validator("publisher.zulip.subject", must_exist=True), Validator("publisher.zulip.msg_template_path", must_exist=True, default=None), diff --git a/mobilizon_reshare/publishers/platforms/zulip.py b/mobilizon_reshare/publishers/platforms/zulip.py index de3a04e..5335a72 100644 --- a/mobilizon_reshare/publishers/platforms/zulip.py +++ b/mobilizon_reshare/publishers/platforms/zulip.py @@ -1,3 +1,5 @@ +from urllib.parse import urljoin + import pkg_resources import requests from requests import Response @@ -54,8 +56,7 @@ class ZulipPlatform(AbstractPlatform): """ _conf = ("publisher", "zulip") - - api_uri = "https://zulip.twc-italia.org/api/v1/" + api_uri = "api/v1/" name = "zulip" def _send_private(self, message: str) -> Response: @@ -63,7 +64,7 @@ class ZulipPlatform(AbstractPlatform): Send private messages """ return requests.post( - url=self.api_uri + "messages", + url=urljoin(self.conf.instance, self.api_uri) + "messages", auth=HTTPBasicAuth(self.conf.bot_email, self.conf.bot_token), data={"type": "private", "to": f"[{self.user_id}]", "content": message}, ) @@ -73,7 +74,7 @@ class ZulipPlatform(AbstractPlatform): Send stream messages """ return requests.post( - url=self.api_uri + "messages", + url=urljoin(self.conf.instance, self.api_uri) + "messages", auth=HTTPBasicAuth(self.conf.bot_email, self.conf.bot_token), data={ "type": "stream", @@ -88,7 +89,7 @@ class ZulipPlatform(AbstractPlatform): res = requests.get( auth=HTTPBasicAuth(self.conf.bot_email, self.conf.bot_token), - url=self.api_uri + "users/me", + url=urljoin(self.conf.instance, self.api_uri) + "users/me", ) data = self._validate_response(res) diff --git a/tests/publishers/test_zulip.py b/tests/publishers/test_zulip.py index 0656a55..f0096bd 100644 --- a/tests/publishers/test_zulip.py +++ b/tests/publishers/test_zulip.py @@ -96,6 +96,9 @@ async def setup_db(event_model_generator, publication_model_generator): settings["publisher"]["zulip"][ "bot_email" ] = "giacomotest2-bot@zulip.twc-italia.org" + settings["publisher"]["zulip"][ + "instance" + ] = "https://zulip.twc-italia.org" await update_publishers(["zulip"]) publisher = await Publisher.filter(name="zulip").first()