From d45b43a9b133f0eef40805c98adba77efcbf408b Mon Sep 17 00:00:00 2001
From: "neiljp (Neil Pilgrim)" <github@kepier.clara.net>
Date: Thu, 31 May 2018 10:29:00 -0700
Subject: [PATCH] matrix bridge: Configure using config(parser) file instead of
python module.
---
zulip/integrations/matrix/matrix_bridge.conf | 12 +++++++
zulip/integrations/matrix/matrix_bridge.py | 33 ++++++++++++++++---
.../matrix/matrix_bridge_config.py | 15 ---------
3 files changed, 41 insertions(+), 19 deletions(-)
create mode 100644 zulip/integrations/matrix/matrix_bridge.conf
delete mode 100644 zulip/integrations/matrix/matrix_bridge_config.py
diff --git a/zulip/integrations/matrix/matrix_bridge.conf b/zulip/integrations/matrix/matrix_bridge.conf
new file mode 100644
index 00000000..c1ebcf85
--- /dev/null
+++ b/zulip/integrations/matrix/matrix_bridge.conf
@@ -0,0 +1,12 @@
+[matrix]
+host = https://matrix.org
+username = username
+password = password
+room_id = #zulip:matrix.org
+
+[zulip]
+email = glitch-bot@chat.zulip.org
+api_key = aPiKeY
+site = https://chat.zulip.org
+stream = test here
+topic = matrix
diff --git a/zulip/integrations/matrix/matrix_bridge.py b/zulip/integrations/matrix/matrix_bridge.py
index 9191d011..5be58e56 100644
--- a/zulip/integrations/matrix/matrix_bridge.py
+++ b/zulip/integrations/matrix/matrix_bridge.py
@@ -7,11 +7,11 @@ import zulip
import sys
import argparse
import re
+import configparser
from types import FrameType
from typing import Any, Callable, Dict, Optional
-from matrix_bridge_config import config
from matrix_client.api import MatrixRequestError
from matrix_client.client import MatrixClient
from requests.exceptions import MissingSchema
@@ -23,6 +23,9 @@ MATRIX_USERNAME_REGEX = '@([a-zA-Z0-9-_]+):matrix.org'
ZULIP_MESSAGE_TEMPLATE = "**{username}**: {message}"
MATRIX_MESSAGE_TEMPLATE = "<{username}> {message}"
+class Bridge_ConfigException(Exception):
+ pass
+
def matrix_login(matrix_client: Any, matrix_config: Dict[str, Any]) -> None:
try:
matrix_client.login_with_password(matrix_config["username"],
@@ -149,21 +152,43 @@ def check_zulip_message_validity(msg: Dict[str, Any], config: Dict[str, Any]) ->
def parse_args():
# type: () -> Any
parser = argparse.ArgumentParser()
+ parser.add_argument('-c', '--config', required=True,
+ help="Path to the config file for the bridge.")
parser.add_argument('--no_noise',
default=True,
help="Suppress the IRC join/leave events.")
return parser.parse_args()
+def read_configuration(config_file: str) -> Dict[str, Dict[str, str]]:
+ config = configparser.ConfigParser()
+
+ try:
+ config.read(config_file)
+ except configparser.Error as e:
+ raise Bridge_ConfigException(str(e))
+
+ if set(config.sections()) != {'matrix', 'zulip'}:
+ raise Bridge_ConfigException("Please ensure the configuration has zulip & matrix sections.")
+
+ # TODO Could add more checks for configuration content here
+
+ return {section: dict(config[section]) for section in config.sections()}
+
def main() -> None:
signal.signal(signal.SIGINT, die)
logging.basicConfig(level=logging.WARNING)
- # Get config for each clients
+ options = parse_args()
+
+ try:
+ config = read_configuration(options.config)
+ except Bridge_ConfigException as exception:
+ sys.exit("Could not parse config file: {}".format(exception))
+
+ # Get config for each client
zulip_config = config["zulip"]
matrix_config = config["matrix"]
- options = parse_args()
-
# Initiate clients
backoff = zulip.RandomExponentialBackoff(timeout_success_equivalent=300)
while backoff.keep_going():
diff --git a/zulip/integrations/matrix/matrix_bridge_config.py b/zulip/integrations/matrix/matrix_bridge_config.py
deleted file mode 100644
index ca8e251b..00000000
--- a/zulip/integrations/matrix/matrix_bridge_config.py
+++ /dev/null
@@ -1,15 +0,0 @@
-config = {
- "matrix": {
- "host": "https://matrix.org",
- "username": "username",
- "password": "password",
- "room_id": "#zulip:matrix.org"
- },
- "zulip": {
- "email": "glitch-bot@chat.zulip.org",
- "api_key": "aPiKeY",
- "site": "https://chat.zulip.org",
- "stream": "test here",
- "topic": "matrix"
- }
-}