#!/usr/bin/python3 # Sieve pipe handler for processing Zoom login codes import email import email.policy import os import re import subprocess import sys import syslog from tempfile import NamedTemporaryFile def fail(msg): syslog.syslog(syslog.LOG_ERR, msg) sys.exit(0) def mumble(msg): syslog.syslog(syslog.LOG_INFO, msg) def main(): msg = email.message_from_file(sys.stdin, policy=email.policy.default) to = msg.get('To', "") m = re.match('(zoom(-m)?-[0-9]{1,2})@', to) if not m: fail('Cannot determine recipient account') user = m[1] body = msg.get_body() body_ct = body.get_content_type() if body_ct == 'text/html': tmpf = NamedTemporaryFile(mode='w') tmpf.write(body.get_content()) tmpf.flush() res = subprocess.run(['/usr/bin/lynx', '-force_html', '-nolist', '-display_charset=utf-8', '-dump', tmpf.name], stdout=subprocess.PIPE, text=True) if res.returncode != 0: fail(f'Subprocess failed with return code {res.returncode}') out = res.stdout else: out = body.get_content() os.umask(0o022) with open(f"/srv/mffzoom/code/www/{user}.txt", "w") as f: f.write(out) try: syslog.openlog('zoom-code') main() mumble('Login code stored') except Exception as e: fail(str(e))