mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 03:53:50 +00:00 
			
		
		
		
	Change humbug => zulip in zephyr_mirror_backend internal variables.
(imported from commit 7cc5d78bfb5db8c9d5a44ed862da304d9e44ff0e)
This commit is contained in:
		| @@ -76,7 +76,7 @@ class States: | |||||||
|     Startup, ZulipToZephyr, ZephyrToZulip, ChildSending = range(4) |     Startup, ZulipToZephyr, ZephyrToZulip, ChildSending = range(4) | ||||||
| CURRENT_STATE = States.Startup | CURRENT_STATE = States.Startup | ||||||
|  |  | ||||||
| def to_humbug_username(zephyr_username): | def to_zulip_username(zephyr_username): | ||||||
|     if "@" in zephyr_username: |     if "@" in zephyr_username: | ||||||
|         (user, realm) = zephyr_username.split("@") |         (user, realm) = zephyr_username.split("@") | ||||||
|     else: |     else: | ||||||
| @@ -85,13 +85,13 @@ def to_humbug_username(zephyr_username): | |||||||
|         return user.lower() + "@mit.edu" |         return user.lower() + "@mit.edu" | ||||||
|     return user.lower() + "|" + realm.upper() + "@mit.edu" |     return user.lower() + "|" + realm.upper() + "@mit.edu" | ||||||
|  |  | ||||||
| def to_zephyr_username(humbug_username): | def to_zephyr_username(zulip_username): | ||||||
|     (user, realm) = humbug_username.split("@") |     (user, realm) = zulip_username.split("@") | ||||||
|     if "|" not in user: |     if "|" not in user: | ||||||
|         return user.lower() + "@ATHENA.MIT.EDU" |         return user.lower() + "@ATHENA.MIT.EDU" | ||||||
|     match_user = re.match(r'([a-zA-Z0-9_]+)\|(.+)', user) |     match_user = re.match(r'([a-zA-Z0-9_]+)\|(.+)', user) | ||||||
|     if not match_user: |     if not match_user: | ||||||
|         raise Exception("Could not parse Zephyr realm for cross-realm user %s" % (humbug_username,)) |         raise Exception("Could not parse Zephyr realm for cross-realm user %s" % (zulip_username,)) | ||||||
|     return match_user.group(1).lower() + "@" + match_user.group(2).upper() |     return match_user.group(1).lower() + "@" + match_user.group(2).upper() | ||||||
|  |  | ||||||
| # Checks whether the pair of adjacent lines would have been | # Checks whether the pair of adjacent lines would have been | ||||||
| @@ -135,13 +135,13 @@ def unwrap_lines(body): | |||||||
|     result += previous_line |     result += previous_line | ||||||
|     return result |     return result | ||||||
|  |  | ||||||
| def send_humbug(zeph): | def send_zulip(zeph): | ||||||
|     message = {} |     message = {} | ||||||
|     if options.forward_class_messages: |     if options.forward_class_messages: | ||||||
|         message["forged"] = "yes" |         message["forged"] = "yes" | ||||||
|     message['type'] = zeph['type'] |     message['type'] = zeph['type'] | ||||||
|     message['time'] = zeph['time'] |     message['time'] = zeph['time'] | ||||||
|     message['sender'] = to_humbug_username(zeph['sender']) |     message['sender'] = to_zulip_username(zeph['sender']) | ||||||
|     if "subject" in zeph: |     if "subject" in zeph: | ||||||
|         # Truncate the subject to the current limit in Zulip.  No |         # Truncate the subject to the current limit in Zulip.  No | ||||||
|         # need to do this for stream names, since we're only |         # need to do this for stream names, since we're only | ||||||
| @@ -167,10 +167,10 @@ def send_humbug(zeph): | |||||||
|  |  | ||||||
|     return humbug_client.send_message(message) |     return humbug_client.send_message(message) | ||||||
|  |  | ||||||
| def send_error_humbug(error_msg): | def send_error_zulip(error_msg): | ||||||
|     message = {"type": "private", |     message = {"type": "private", | ||||||
|                "sender": humbug_account_email, |                "sender": zulip_account_email, | ||||||
|                "to": humbug_account_email, |                "to": zulip_account_email, | ||||||
|                "content": error_msg, |                "content": error_msg, | ||||||
|                } |                } | ||||||
|     humbug_client.send_message(message) |     humbug_client.send_message(message) | ||||||
| @@ -332,10 +332,10 @@ def process_notice(notice, log): | |||||||
|         if body.startswith("CC:"): |         if body.startswith("CC:"): | ||||||
|             is_huddle = True |             is_huddle = True | ||||||
|             # Map "CC: sipbtest espuser" => "starnine@mit.edu,espuser@mit.edu" |             # Map "CC: sipbtest espuser" => "starnine@mit.edu,espuser@mit.edu" | ||||||
|             huddle_recipients = [to_humbug_username(x.strip()) for x in |             huddle_recipients = [to_zulip_username(x.strip()) for x in | ||||||
|                                  body.split("\n")[0][4:].split()] |                                  body.split("\n")[0][4:].split()] | ||||||
|             if notice.sender not in huddle_recipients: |             if notice.sender not in huddle_recipients: | ||||||
|                 huddle_recipients.append(to_humbug_username(notice.sender)) |                 huddle_recipients.append(to_zulip_username(notice.sender)) | ||||||
|             body = body.split("\n", 1)[1] |             body = body.split("\n", 1)[1] | ||||||
|  |  | ||||||
|     zeph = { 'time'      : str(notice.time), |     zeph = { 'time'      : str(notice.time), | ||||||
| @@ -347,7 +347,7 @@ def process_notice(notice, log): | |||||||
|         zeph['recipient'] = huddle_recipients |         zeph['recipient'] = huddle_recipients | ||||||
|     elif is_personal: |     elif is_personal: | ||||||
|         zeph['type'] = 'private' |         zeph['type'] = 'private' | ||||||
|         zeph['recipient'] = to_humbug_username(notice.recipient) |         zeph['recipient'] = to_zulip_username(notice.recipient) | ||||||
|     else: |     else: | ||||||
|         zeph['type'] = 'stream' |         zeph['type'] = 'stream' | ||||||
|         zeph['stream'] = zephyr_class |         zeph['stream'] = zephyr_class | ||||||
| @@ -381,7 +381,7 @@ def process_notice(notice, log): | |||||||
|         CURRENT_STATE = States.ChildSending |         CURRENT_STATE = States.ChildSending | ||||||
|         # Actually send the message in a child process, to avoid blocking. |         # Actually send the message in a child process, to avoid blocking. | ||||||
|         try: |         try: | ||||||
|             res = send_humbug(zeph) |             res = send_zulip(zeph) | ||||||
|             if res.get("result") != "success": |             if res.get("result") != "success": | ||||||
|                 logger.error("Error relaying zephyr:\n%s\n%s" % (zeph, res)) |                 logger.error("Error relaying zephyr:\n%s\n%s" % (zeph, res)) | ||||||
|         except Exception: |         except Exception: | ||||||
| @@ -434,7 +434,7 @@ def zephyr_subscribe_autoretry(sub): | |||||||
|  |  | ||||||
|     quit_failed_initialization("Could not subscribe to personals, quitting!") |     quit_failed_initialization("Could not subscribe to personals, quitting!") | ||||||
|  |  | ||||||
| def zephyr_to_humbug(options): | def zephyr_to_zulip(options): | ||||||
|     zephyr_init_autoretry() |     zephyr_init_autoretry() | ||||||
|     if options.forward_class_messages: |     if options.forward_class_messages: | ||||||
|         update_subscriptions() |         update_subscriptions() | ||||||
| @@ -465,7 +465,7 @@ def zephyr_to_humbug(options): | |||||||
|                     logger.info("sending saved message to %s from %s..." % |                     logger.info("sending saved message to %s from %s..." % | ||||||
|                                 (zeph.get('stream', zeph.get('recipient')), |                                 (zeph.get('stream', zeph.get('recipient')), | ||||||
|                                  zeph['sender'])) |                                  zeph['sender'])) | ||||||
|                     send_humbug(zeph) |                     send_zulip(zeph) | ||||||
|                 except Exception: |                 except Exception: | ||||||
|                     logger.exception("Could not send saved zephyr:") |                     logger.exception("Could not send saved zephyr:") | ||||||
|                     time.sleep(2) |                     time.sleep(2) | ||||||
| @@ -534,7 +534,7 @@ def forward_to_zephyr(message): | |||||||
|         elif len(message['display_recipient']) == 2: |         elif len(message['display_recipient']) == 2: | ||||||
|             recipient = "" |             recipient = "" | ||||||
|             for r in message["display_recipient"]: |             for r in message["display_recipient"]: | ||||||
|                 if r["email"].lower() != humbug_account_email.lower(): |                 if r["email"].lower() != zulip_account_email.lower(): | ||||||
|                     recipient = to_zephyr_username(r["email"]) |                     recipient = to_zephyr_username(r["email"]) | ||||||
|                     break |                     break | ||||||
|             recipients = [recipient] |             recipients = [recipient] | ||||||
| @@ -560,7 +560,7 @@ Feedback tab or at support@zulip.com.""" | |||||||
|     if code == 0 and stderr == "": |     if code == 0 and stderr == "": | ||||||
|         return |         return | ||||||
|     elif code == 0: |     elif code == 0: | ||||||
|         return send_error_humbug("""%s |         return send_error_zulip("""%s | ||||||
|  |  | ||||||
| Your last message was successfully mirrored to zephyr, but zwrite \ | Your last message was successfully mirrored to zephyr, but zwrite \ | ||||||
| returned the following warning: | returned the following warning: | ||||||
| @@ -574,7 +574,7 @@ returned the following warning: | |||||||
|         # just notify the user that they need to renew their tickets |         # just notify the user that they need to renew their tickets | ||||||
|         (code, stderr) = send_unauthed_zephyr(zwrite_args, wrapped_content) |         (code, stderr) = send_unauthed_zephyr(zwrite_args, wrapped_content) | ||||||
|         if code == 0: |         if code == 0: | ||||||
|             return send_error_humbug("""%s |             return send_error_zulip("""%s | ||||||
|  |  | ||||||
| Your last message was forwarded from Zulip to Zephyr unauthenticated, \ | Your last message was forwarded from Zulip to Zephyr unauthenticated, \ | ||||||
| because your Kerberos tickets have expired. It was sent successfully, \ | because your Kerberos tickets have expired. It was sent successfully, \ | ||||||
| @@ -587,7 +587,7 @@ authenticated Zephyr messages for you again. | |||||||
|     # zwrite failed and it wasn't because of expired tickets: This is |     # zwrite failed and it wasn't because of expired tickets: This is | ||||||
|     # probably because the recipient isn't subscribed to personals, |     # probably because the recipient isn't subscribed to personals, | ||||||
|     # but regardless, we should just notify the user. |     # but regardless, we should just notify the user. | ||||||
|     return send_error_humbug("""%s |     return send_error_zulip("""%s | ||||||
|  |  | ||||||
| Your Zulip-Zephyr mirror bot was unable to forward that last message \ | Your Zulip-Zephyr mirror bot was unable to forward that last message \ | ||||||
| from Zulip to Zephyr. That means that while Zulip users (like you) \ | from Zulip to Zephyr. That means that while Zulip users (like you) \ | ||||||
| @@ -598,7 +598,7 @@ received it, Zephyr users did not.  The error message from zwrite was: | |||||||
| %s""" % (heading, stderr, support_closing)) | %s""" % (heading, stderr, support_closing)) | ||||||
|  |  | ||||||
| def maybe_forward_to_zephyr(message): | def maybe_forward_to_zephyr(message): | ||||||
|     if (message["sender_email"] == humbug_account_email): |     if (message["sender_email"] == zulip_account_email): | ||||||
|         if not ((message["type"] == "stream") or |         if not ((message["type"] == "stream") or | ||||||
|                 (message["type"] == "private" and |                 (message["type"] == "private" and | ||||||
|                  False not in [u["email"].lower().endswith("mit.edu") for u in |                  False not in [u["email"].lower().endswith("mit.edu") for u in | ||||||
| @@ -618,8 +618,8 @@ def maybe_forward_to_zephyr(message): | |||||||
|             # whole process |             # whole process | ||||||
|             logger.exception("Error forwarding message:") |             logger.exception("Error forwarding message:") | ||||||
|  |  | ||||||
| def humbug_to_zephyr(options): | def zulip_to_zephyr(options): | ||||||
|     # Sync messages from zephyr to humbug |     # Sync messages from zephyr to zulip | ||||||
|     logger.info("Starting syncing messages.") |     logger.info("Starting syncing messages.") | ||||||
|     while True: |     while True: | ||||||
|         try: |         try: | ||||||
| @@ -642,7 +642,7 @@ def subscribed_to_mail_messages(): | |||||||
|     os.environ["HUMBUG_FORWARD_MAIL_ZEPHYRS"] = "False" |     os.environ["HUMBUG_FORWARD_MAIL_ZEPHYRS"] = "False" | ||||||
|     return False |     return False | ||||||
|  |  | ||||||
| def add_humbug_subscriptions(verbose): | def add_zulip_subscriptions(verbose): | ||||||
|     zephyr_subscriptions = set() |     zephyr_subscriptions = set() | ||||||
|     skipped = set() |     skipped = set() | ||||||
|     for (cls, instance, recipient) in parse_zephyr_subs(verbose=verbose): |     for (cls, instance, recipient) in parse_zephyr_subs(verbose=verbose): | ||||||
| @@ -656,8 +656,8 @@ def add_humbug_subscriptions(verbose): | |||||||
|                 if recipient == "*": |                 if recipient == "*": | ||||||
|                     skipped.add((cls, instance, recipient, "subscribing to all of class message is not supported.")) |                     skipped.add((cls, instance, recipient, "subscribing to all of class message is not supported.")) | ||||||
|                 continue |                 continue | ||||||
|             # If you're on -i white-magic on zephyr, get on stream white-magic on humbug |             # If you're on -i white-magic on zephyr, get on stream white-magic on zulip | ||||||
|             # instead of subscribing to stream "message" on humbug |             # instead of subscribing to stream "message" on zulip | ||||||
|             zephyr_subscriptions.add(instance) |             zephyr_subscriptions.add(instance) | ||||||
|             continue |             continue | ||||||
|         elif cls.lower() == "mail" and instance.lower() == "inbox": |         elif cls.lower() == "mail" and instance.lower() == "inbox": | ||||||
| @@ -753,7 +753,7 @@ def open_logger(): | |||||||
|         else: |         else: | ||||||
|             log_file = "/home/humbug/mirror-log" |             log_file = "/home/humbug/mirror-log" | ||||||
|     else: |     else: | ||||||
|         f = tempfile.NamedTemporaryFile(prefix="humbug-log.%s." % (options.user,), |         f = tempfile.NamedTemporaryFile(prefix="zulip-log.%s." % (options.user,), | ||||||
|                                         delete=False) |                                         delete=False) | ||||||
|         log_file = f.name |         log_file = f.name | ||||||
|         # Close the file descriptor, since the logging system will |         # Close the file descriptor, since the logging system will | ||||||
| @@ -806,9 +806,9 @@ def parse_args(): | |||||||
|                       help=optparse.SUPPRESS_HELP, |                       help=optparse.SUPPRESS_HELP, | ||||||
|                       default=True, |                       default=True, | ||||||
|                       action='store_false') |                       action='store_false') | ||||||
|     parser.add_option('--no-forward-from-humbug', |     parser.add_option('--no-forward-from-zulip', | ||||||
|                       default=True, |                       default=True, | ||||||
|                       dest='forward_from_humbug', |                       dest='forward_from_zulip', | ||||||
|                       help=optparse.SUPPRESS_HELP, |                       help=optparse.SUPPRESS_HELP, | ||||||
|                       action='store_false') |                       action='store_false') | ||||||
|     parser.add_option('--verbose', |     parser.add_option('--verbose', | ||||||
| @@ -842,7 +842,7 @@ def die_gracefully(signal, frame): | |||||||
|  |  | ||||||
|     if CURRENT_STATE == States.ZephyrToZulip: |     if CURRENT_STATE == States.ZephyrToZulip: | ||||||
|         try: |         try: | ||||||
|             # zephyr=>humbug processes may have added subs, so run cancelSubs |             # zephyr=>zulip processes may have added subs, so run cancelSubs | ||||||
|             zephyr._z.cancelSubs() |             zephyr._z.cancelSubs() | ||||||
|         except IOError: |         except IOError: | ||||||
|             # We don't care whether we failed to cancel subs properly, but we should log it |             # We don't care whether we failed to cancel subs properly, but we should log it | ||||||
| @@ -891,10 +891,10 @@ or specify the --api-key-file option.""" % (options.api_key_file,)))) | |||||||
|         # don't need to read it in |         # don't need to read it in | ||||||
|         os.environ["HUMBUG_API_KEY"] = api_key |         os.environ["HUMBUG_API_KEY"] = api_key | ||||||
|  |  | ||||||
|     humbug_account_email = options.user + "@mit.edu" |     zulip_account_email = options.user + "@mit.edu" | ||||||
|     import humbug |     import humbug | ||||||
|     humbug_client = humbug.Client( |     humbug_client = humbug.Client( | ||||||
|         email=humbug_account_email, |         email=zulip_account_email, | ||||||
|         api_key=api_key, |         api_key=api_key, | ||||||
|         verbose=True, |         verbose=True, | ||||||
|         client="zephyr_mirror", |         client="zephyr_mirror", | ||||||
| @@ -905,7 +905,7 @@ or specify the --api-key-file option.""" % (options.api_key_file,)))) | |||||||
|     if options.sync_subscriptions: |     if options.sync_subscriptions: | ||||||
|         configure_logger(logger, None)  # make the output cleaner |         configure_logger(logger, None)  # make the output cleaner | ||||||
|         logger.info("Syncing your ~/.zephyr.subs to your Zulip Subscriptions!") |         logger.info("Syncing your ~/.zephyr.subs to your Zulip Subscriptions!") | ||||||
|         add_humbug_subscriptions(True) |         add_zulip_subscriptions(True) | ||||||
|         sys.exit(0) |         sys.exit(0) | ||||||
|  |  | ||||||
|     # Kill all zephyr_mirror processes other than this one and its parent. |     # Kill all zephyr_mirror processes other than this one and its parent. | ||||||
| @@ -931,27 +931,27 @@ or specify the --api-key-file option.""" % (options.api_key_file,)))) | |||||||
|  |  | ||||||
|     if options.shard is not None and set(options.shard) != set("a"): |     if options.shard is not None and set(options.shard) != set("a"): | ||||||
|         # The shard that is all "a"s is the one that handles personals |         # The shard that is all "a"s is the one that handles personals | ||||||
|         # forwarding and humbug => zephyr forwarding |         # forwarding and zulip => zephyr forwarding | ||||||
|         options.forward_personals = False |         options.forward_personals = False | ||||||
|         options.forward_from_humbug = False |         options.forward_from_zulip = False | ||||||
|  |  | ||||||
|     if options.forward_from_humbug: |     if options.forward_from_zulip: | ||||||
|         child_pid = os.fork() |         child_pid = os.fork() | ||||||
|         if child_pid == 0: |         if child_pid == 0: | ||||||
|             CURRENT_STATE = States.ZulipToZephyr |             CURRENT_STATE = States.ZulipToZephyr | ||||||
|             # Run the humbug => zephyr mirror in the child |             # Run the zulip => zephyr mirror in the child | ||||||
|             configure_logger(logger, "humbug=>zephyr") |             configure_logger(logger, "zulip=>zephyr") | ||||||
|             humbug_to_zephyr(options) |             zulip_to_zephyr(options) | ||||||
|             sys.exit(0) |             sys.exit(0) | ||||||
|     else: |     else: | ||||||
|         child_pid = None |         child_pid = None | ||||||
|     CURRENT_STATE = States.ZephyrToZulip |     CURRENT_STATE = States.ZephyrToZulip | ||||||
|  |  | ||||||
|     import zephyr |     import zephyr | ||||||
|     logger_name = "zephyr=>humbug" |     logger_name = "zephyr=>zulip" | ||||||
|     if options.shard is not None: |     if options.shard is not None: | ||||||
|         logger_name += "(%s)" % (options.shard,) |         logger_name += "(%s)" % (options.shard,) | ||||||
|     configure_logger(logger, logger_name) |     configure_logger(logger, logger_name) | ||||||
|     # Have the kernel reap children for when we fork off processes to send Zulips |     # Have the kernel reap children for when we fork off processes to send Zulips | ||||||
|     signal.signal(signal.SIGCHLD, signal.SIG_IGN) |     signal.signal(signal.SIGCHLD, signal.SIG_IGN) | ||||||
|     zephyr_to_humbug(options) |     zephyr_to_zulip(options) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user