diff options
author | Konstantin Ryabitsev <konstantin@linuxfoundation.org> | 2022-10-11 17:40:33 -0400 |
---|---|---|
committer | Konstantin Ryabitsev <konstantin@linuxfoundation.org> | 2022-10-11 17:40:33 -0400 |
commit | a72a55b06660b249c82cdba32a4dc54e8a7ea2f3 (patch) | |
tree | e0b7ebb348f4fcbf673d63d4aec1bcd550151218 | |
parent | f0dbc2734d7e51ccfbba99f2e4b89fbe1dce0bdc (diff) | |
download | korg-helpers-a72a55b06660b249c82cdba32a4dc54e8a7ea2f3.tar.gz |
Optimize emergency saving of messages
Instead of duplicating code, just use a single instance of _save_emerg.
Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
-rw-r--r-- | groupsio-webhook.py | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/groupsio-webhook.py b/groupsio-webhook.py index b140acb..e11ef84 100644 --- a/groupsio-webhook.py +++ b/groupsio-webhook.py @@ -12,6 +12,7 @@ import socket import email import email.utils import email.header +import email.policy import hmac import smtplib import os @@ -25,6 +26,8 @@ from configparser import ConfigParser, ExtendedInterpolation logger = logging.getLogger('groupsio-webhook') logger.setLevel(logging.DEBUG) +emlpolicy = email.policy.EmailPolicy(utf8=True, cte_type='8bit', max_line_length=None) + # noinspection PyBroadException, PyMethodMayBeStatic class GroupsioListener(object): @@ -108,12 +111,8 @@ class GroupsioListener(object): except Exception as ex: logger.critical('Failed processing message %s:', msgnum) logger.critical(str(ex)) - emerg_dir = self._config['main'].get('emerg_dir') - if emerg_dir and os.path.isdir(emerg_dir): - efile = os.path.join(emerg_dir, f'{groupaddr}-{msgnum}.txt') - with open(efile, 'w') as fh: - fh.write(doc['message']) - logger.critical('Saved message as %s', efile) + filen = f'{groupaddr}-{msgnum}.txt' + self._save_emerg(filen, doc['message'].encode()) return success @@ -134,14 +133,18 @@ class GroupsioListener(object): def _send_smtp(self, msg: email.message.Message, mailfrom: str) -> bool: mailhost = self._config['main'].get('mailhost', 'localhost') mailto = self._config['main'].get('mailto', 'webhook@archiver.kernel.org') + bdata = msg.as_string(policy=emlpolicy).encode() try: smtp = smtplib.SMTP(mailhost) - smtp.sendmail(mailfrom, [mailto], msg.as_bytes()) + smtp.sendmail(mailfrom, [mailto], bdata) smtp.close() logger.info('Successfully sent via SMTP to <%s>', mailto) except Exception as ex: logger.critical('Could not send SMTP') logger.critical(str(ex)) + dt = datetime.datetime.now() + fname = dt.strftime('%Y%m%d-%H%M%S-%f') + '.eml' + self._save_emerg(fname, bdata) return False return True @@ -151,6 +154,15 @@ class GroupsioListener(object): hm.update(raw) return hmac.compare_digest(vdigest, hm.hexdigest()) + def _save_emerg(self, filen: str, bdata: bytes): + emerg_dir = self._config['main'].get('emerg_dir') + if not (emerg_dir or os.path.isdir(emerg_dir)): + return + efile = os.path.join(emerg_dir, filen) + with open(efile, 'wb') as fh: + fh.write(bdata) + logger.debug('Wrote emergency content into %s', efile) + def on_post(self, req, resp): if not req.content_length: resp.status = falcon.HTTP_500 @@ -172,14 +184,9 @@ class GroupsioListener(object): if self._config['main'].get('loglevel', 'info') == 'debug': # In debug mode, we save all json submissions in the emerg dir - emerg_dir = self._config['main'].get('emerg_dir') - if emerg_dir and os.path.isdir(emerg_dir): - dt = datetime.datetime.now() - fname = dt.strftime('%Y%m%d-%H%M%S-%f') - efile = os.path.join(emerg_dir, f'{fname}.js') - with open(efile, 'w') as fh: - fh.write(raw) - logger.debug('Wrote raw json into %s', efile) + dt = datetime.datetime.now() + fname = dt.strftime('%Y%m%d-%H%M%S-%f') + '.js' + self._save_emerg(fname, raw) try: doc = json.loads(raw) |