diff --git a/app/s3.py b/app/s3.py index 1008d0ca..133f9433 100644 --- a/app/s3.py +++ b/app/s3.py @@ -53,3 +53,11 @@ def get_url(key: str, expires_in=3600) -> str: ClientMethod="get_object", Params={"Bucket": BUCKET, "Key": key}, ) + + +def delete(path: str): + if LOCAL_FILE_UPLOAD: + os.remove(os.path.join(UPLOAD_DIR, path)) + else: + o = _session.resource("s3").Bucket(BUCKET).Object(path) + o.delete() diff --git a/cron.py b/cron.py index 0c1a7d66..fa0a742c 100644 --- a/cron.py +++ b/cron.py @@ -2,6 +2,7 @@ import argparse import arrow +from app import s3 from app.config import IGNORED_EMAILS, ADMIN_EMAIL from app.email_utils import send_email, send_trial_end_soon_email, render from app.extensions import db @@ -15,6 +16,7 @@ from app.models import ( CustomDomain, Client, ManualSubscription, + RefusedEmail, ) from server import create_app @@ -30,6 +32,21 @@ def notify_trial_end(): send_trial_end_soon_email(user) +def delete_refused_emails(): + for refused_email in RefusedEmail.query.filter(RefusedEmail.deleted == False).all(): + if arrow.now().shift(days=1) > refused_email.deleted_at >= arrow.now(): + LOG.d("Delete refused email %s", refused_email) + s3.delete(refused_email.path) + s3.delete(refused_email.full_report_path) + + # do not set path and full_report_path to null + # so we can check later that the files are indeed deleted + refused_email.deleted = True + db.session.commit() + + LOG.d("Finish delete_refused_emails") + + def notify_premium_end(): """sent to user who has canceled their subscription and who has their subscription ending soon""" for sub in Subscription.query.filter(Subscription.cancelled == True).all(): @@ -172,6 +189,7 @@ if __name__ == "__main__": "notify_trial_end", "notify_manual_subscription_end", "notify_premium_end", + "delete_refused_emails" ], ) args = parser.parse_args() @@ -191,3 +209,6 @@ if __name__ == "__main__": elif args.job == "notify_premium_end": LOG.d("Notify users with premium ending soon") notify_premium_end() + elif args.job == "delete_refused_emails": + LOG.d("Deleted refused emails") + delete_refused_emails() diff --git a/crontab.yml b/crontab.yml index 6b742e59..0c453757 100644 --- a/crontab.yml +++ b/crontab.yml @@ -22,3 +22,9 @@ jobs: shell: /bin/bash schedule: "0 10 * * *" captureStderr: true + + - name: SimpleLogin Delete Refused Emails + command: python /code/cron.py -j delete_refused_emails + shell: /bin/bash + schedule: "0 11 * * *" + captureStderr: true