mirror of
https://github.com/simple-login/app.git
synced 2024-11-17 09:28:29 +01:00
35f6e67053
* feat: set up UserAuditLog * refactor: extract payment callbacks into their own files + handle subscription user_audit_log * feat: handle account linking for user audit log * chore: user_audit_log for mailboxes * chore: user_audit_log for custom domains * chore: user_audit_log for contacts * chore: user_audit_log for directories * fix: do not enforce cronjob being defined in choices + enable user deletion * chore: user_audit_log for user deletion * refactor: change emit_user_audit_log function to receive the full user object * feat: add user_audit_log migration * test: fix tests * test: add some tests for user_audit_log * fix: spf record verification user_audit_log * chore: add missing index to user_audit_log.created_at * chore: add missing index to alias_audit_log.created_at
56 lines
2 KiB
Python
56 lines
2 KiB
Python
import arrow
|
|
from flask import flash, redirect, url_for, request, render_template
|
|
from flask_login import login_required, current_user
|
|
from flask_wtf import FlaskForm
|
|
|
|
from app.config import JOB_DELETE_ACCOUNT
|
|
from app.dashboard.base import dashboard_bp
|
|
from app.dashboard.views.enter_sudo import sudo_required
|
|
from app.log import LOG
|
|
from app.models import Subscription, Job
|
|
from app.user_audit_log_utils import emit_user_audit_log, UserAuditLogAction
|
|
|
|
|
|
class DeleteDirForm(FlaskForm):
|
|
pass
|
|
|
|
|
|
@dashboard_bp.route("/delete_account", methods=["GET", "POST"])
|
|
@login_required
|
|
@sudo_required
|
|
def delete_account():
|
|
delete_form = DeleteDirForm()
|
|
if request.method == "POST" and request.form.get("form-name") == "delete-account":
|
|
if not delete_form.validate():
|
|
flash("Invalid request", "warning")
|
|
return render_template(
|
|
"dashboard/delete_account.html", delete_form=delete_form
|
|
)
|
|
sub: Subscription = current_user.get_paddle_subscription()
|
|
# user who has canceled can also re-subscribe
|
|
if sub and not sub.cancelled:
|
|
flash("Please cancel your current subscription first", "warning")
|
|
return redirect(url_for("dashboard.setting"))
|
|
|
|
# Schedule delete account job
|
|
LOG.w("schedule delete account job for %s", current_user)
|
|
emit_user_audit_log(
|
|
user=current_user,
|
|
action=UserAuditLogAction.UserMarkedForDeletion,
|
|
message=f"User {current_user.id} ({current_user.email}) marked for deletion via webapp",
|
|
)
|
|
Job.create(
|
|
name=JOB_DELETE_ACCOUNT,
|
|
payload={"user_id": current_user.id},
|
|
run_at=arrow.now(),
|
|
commit=True,
|
|
)
|
|
|
|
flash(
|
|
"Your account deletion has been scheduled. "
|
|
"You'll receive an email when the deletion is finished",
|
|
"info",
|
|
)
|
|
return redirect(url_for("dashboard.setting"))
|
|
|
|
return render_template("dashboard/delete_account.html", delete_form=delete_form)
|