From ce660ac03f093f0996cbee0e1a9dfeaeaf9e3f04 Mon Sep 17 00:00:00 2001 From: Zev Benjamin Date: Tue, 4 Mar 2014 19:08:50 -0500 Subject: [PATCH] jabber_mirror: Add option to append a suffix to Zulip usernames This is needed for the ist.mit.edu realm, where the same email address could be used for all three of Zulip, Jabber, and Zephyr. To disambiguate Jabber mirror dummy users from Zephyr mirror dummy users with the same email address (but which would be in a different realm), we force all email addresses in the ist.mit.edu realm to have local parts that end in "+ist". (imported from commit 5ebad2cc8f6c7286b4b9426d57ed75578703fb86) --- bots/jabber_mirror.py | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/bots/jabber_mirror.py b/bots/jabber_mirror.py index c2956a7..a5dd024 100755 --- a/bots/jabber_mirror.py +++ b/bots/jabber_mirror.py @@ -57,7 +57,18 @@ def stream_to_room(stream): return stream.lower().rpartition("/xmpp")[0] def jid_to_zulip(jid): - return "%s@%s" % (jid.username, options.zulip_domain) + suffix = '' + if not jid.username.endswith("-bot"): + suffix = options.zulip_email_suffix + return "%s%s@%s" % (jid.username, suffix, options.zulip_domain) + +def zulip_to_jid(email, jabber_domain): + jid = JID(email, domain=jabber_domain) + if (options.zulip_email_suffix + and options.zulip_email_suffix in jid.username + and not jid.username.endswith("-bot")): + jid.username = jid.username.rpartition(options.zulip_email_suffix)[0] + return jid class JabberToZulipBot(ClientXMPP): def __init__(self, jid, password, rooms): @@ -226,7 +237,7 @@ class ZulipToJabberBot(object): if recipient["email"] == self.client.email: continue recip_email = recipient['email'] - jabber_recipient = JID(recip_email, domain=self.jabber.boundjid.domain) + jabber_recipient = zulip_to_jid(recip_email, self.jabber.boundjid.domain) outgoing = self.jabber.make_message( mto = jabber_recipient, mbody = msg['content'], @@ -289,6 +300,16 @@ all messages they send on Zulip to Jabber and all private Jabber messages to Zulip. In "public" mode, the mirror uses the credentials for a dedicated mirror user and mirrors messages sent to Jabber rooms to Zulip. Defaults to "personal"'''.replace("\n", " ")) + parser.add_option('--zulip-email-suffix', + default=None, + action='store', + help= \ +'''Add the specified suffix to the local part of email addresses constructed +from JIDs and nicks before sending requests to the Zulip server, and remove the +suffix before sending requests to the Jabber server. For example, specifying +"+foo" will cause messages that are sent to the "bar" room by nickname "qux" to +be mirrored to the "bar/xmpp" stream in Zulip by user "qux+foo@example.com". This +option does not affect login credentials.'''.replace("\n", " ")) parser.add_option('-d', '--debug', help='set logging to DEBUG. Can not be set via config file.', action='store_const', @@ -336,7 +357,7 @@ user and mirrors messages sent to Jabber rooms to Zulip. Defaults to config.readfp(f, config_file) except IOError: pass - for option in ("jid", "jabber_password", "conference_domain", "mode"): + for option in ("jid", "jabber_password", "conference_domain", "mode", "zulip_email_suffix"): if (getattr(options, option) is None and config.has_option("jabber_mirror", option)): setattr(options, option, config.get("jabber_mirror", option)) @@ -351,6 +372,9 @@ user and mirrors messages sent to Jabber rooms to Zulip. Defaults to if options.mode is None: options.mode = "personal" + if options.zulip_email_suffix is None: + options.zulip_email_suffix = '' + if options.mode not in ('public', 'personal'): sys.exit("Bad value for --mode: must be one of 'public' or 'personal'")