From 61548211eddf844b63b68320e2214b44dac3a140 Mon Sep 17 00:00:00 2001 From: "max.mehl" Date: Mon, 20 Dec 2021 18:46:26 +0100 Subject: [PATCH] create .qmail and message file if needed --- .gitignore | 2 +- autoreply_editor/main.py | 70 ++++++++++++++++++++++++++++++++-------- 2 files changed, 57 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index b8eb931..0700268 100644 --- a/.gitignore +++ b/.gitignore @@ -142,7 +142,7 @@ dmypy.json cython_debug/ # Project specific -message.txt +message*.txt config.py inventory.txt ansible/host_vars/* diff --git a/autoreply_editor/main.py b/autoreply_editor/main.py index 6f5461e..039a2a0 100644 --- a/autoreply_editor/main.py +++ b/autoreply_editor/main.py @@ -1,7 +1,9 @@ """Provide basic settings and views""" import fileinput +import os import re +import shutil from pathlib import Path from flask import request, render_template from flask_basicauth import BasicAuth @@ -9,24 +11,66 @@ from autoreply_editor import app basic_auth = BasicAuth(app) -qmail_prefix = f"{str(Path.home())}/.qmail-" maildrop_line = "|maildrop $HOME/.filter-autoreply" + def qmail_status(user): """Find out whether the filter is currently activated for the given mail user""" - with open(f"{qmail_prefix}{user}", encoding="utf8") as dotqmail: - # TODO: RE not necessary here - if not re.search( - r"^\|maildrop \$HOME/\.filter-autoreply$", dotqmail.read(), re.MULTILINE + with open(get_qmailfile(app.config.get("MAIL_USER")), encoding="utf8") as qmailfile: + # trigger to check whether we have to re-open the file for initialisation + initialise = False + + # try to find active filter + if re.search( + r"^\|maildrop \$HOME/\.filter-autoreply$", qmailfile.read(), re.MULTILINE ): - return False - else: return True + else: + # jump back to top of file because we've read it in the "if" + qmailfile.seek(0) + + # filter is deactivated (commented) + if re.search( + r"^#\|maildrop \$HOME/\.filter-autoreply$", + qmailfile.read(), + re.MULTILINE, + ): + return False + else: + initialise = True + + # Append a commented filter command to the file + if initialise: + with open( + get_qmailfile(app.config.get("MAIL_USER")), mode="a", encoding="utf8" + ) as qmailfile: + qmailfile.write("#|maildrop $HOME/.filter-autoreply") + + return False + + +def get_messagefile(user): + """Return message file of user, and create if necessary""" + filepath = f"message-{user}.txt" + if not os.path.isfile(filepath): + Path(filepath).touch() + + return filepath + + +def get_qmailfile(user): + """Return qmail file of user, and create if necessary based on default qmail""" + qmail_base = f"{str(Path.home())}/.qmail" + filepath = f"{qmail_base}-{user}" + if not os.path.isfile(filepath): + shutil.copy(f"{qmail_base}-default", filepath) + + return filepath @app.route("/") def index(): - with open(app.config.get("MESSAGE_FILE"), "r", encoding="utf-8") as messagefile: + with open(get_messagefile("user"), "r", encoding="utf-8") as messagefile: message = messagefile.read() return render_template( @@ -41,9 +85,7 @@ def index_post(): if request.method == "POST": if request.form["action"] == "message": input_message = request.form["message"] - with open( - app.config.get("MESSAGE_FILE"), "w", encoding="utf-8" - ) as messagefile: + with open(get_messagefile("user"), "w", encoding="utf-8") as messagefile: messagefile.write(str(input_message)) result = "Success: The autoreply message has been updated!" @@ -57,11 +99,11 @@ def index_post(): preshould = "#" with fileinput.FileInput( - f"{qmail_prefix}{app.config.get('MAIL_USER')}", + get_qmailfile(app.config.get("MAIL_USER")), inplace=True, backup=".bak", - ) as dotqmail: - for line in dotqmail: + ) as qmailfile: + for line in qmailfile: print( line.replace( f"{preis}{maildrop_line}", f"{preshould}{maildrop_line}"