Skip to content
Snippets Groups Projects
Commit 03abff5a authored by Martin Mareš's avatar Martin Mareš
Browse files

DSN: Expirace nedoručenek

Nemažeme nedoručenky, na které se odkazuje nějaký účet.
Ale o registraci se nestaráme, ta velmi pravděpodobně expiruje dřív.
parent 111787ed
No related branches found
No related tags found
1 merge request!138Zpracování nedoručenek
......@@ -80,6 +80,9 @@ REG_MAX_PER_MINUTE = 10
# Jak dlouho vydrží tokeny používané při registraci a změnách e-mailu [min]
REG_TOKEN_VALIDITY = 10
# Jak dlouho si pamatujeme e-mailovou nedoručenku [min]
DSN_EXPIRATION = 30 * 1440
# Aktuální ročník MO
CURRENT_YEAR = 71
......
# Utility na práci s mailovými nedoručenkami
from datetime import timedelta
from sqlalchemy import select
from typing import Optional
import mo
import mo.config as config
import mo.db as db
dsn_explanation = {
'4.2.2': 'schránka je plná',
......@@ -26,3 +32,19 @@ def format_dsn_status(status: Optional[str]) -> str:
return f'{status}{explain}'
else:
return status
def expire_dsns() -> None:
expiration = getattr(config, 'DSN_EXPIRATION', None)
if expiration is None:
return
sess = db.get_session()
conn = sess.connection()
user_table = db.User.__table__
dsn_table = db.EmailDSN.__table__
conn.execute(dsn_table.delete()
.where(dsn_table.c.arrived_at < mo.now - timedelta(days=expiration))
.where(dsn_table.c.dsn_id.not_in(select(user_table.c.dsn_id))))
sess.commit()
......@@ -23,6 +23,7 @@ import mo.jobs.submit
import mo.rights
import mo.users
import mo.util
import mo.util_dsn
class MOFlask(Flask):
......@@ -210,11 +211,13 @@ app.before_request(init_request)
# - projdeme joby pro případ, že by se ztratil signál
# - expirujeme zastaralé joby
# - expirujeme zastaralé registrační tokeny
# - expirujeme zastaralé nedoručenky
def collect_garbage() -> None:
mo.now = mo.util.get_now()
mo.jobs.submit.check_broken_submits()
mo.jobs.process_jobs()
mo.users.expire_reg_requests()
mo.util_dsn.expire_dsns()
@app.cli.command('gc')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment