save deleted alias to domain trash if it belongs to a custom domain, otherwise global trash

This commit is contained in:
Son NK 2020-05-23 11:49:34 +02:00
parent a3ff19dac4
commit 17acaec214
1 changed files with 22 additions and 9 deletions

View File

@ -16,6 +16,7 @@ from app.models import (
Directory,
User,
DeletedAlias,
DomainDeletedAlias,
)
@ -130,15 +131,27 @@ def try_auto_create_catch_all_domain(address: str) -> Optional[Alias]:
def delete_alias(alias: Alias, user: User):
email = alias.email
Alias.delete(alias.id)
db.session.commit()
# try to save deleted alias
try:
DeletedAlias.create(email=email)
db.session.commit()
# this can happen when a previously deleted alias is re-created via catch-all or directory feature
except IntegrityError:
LOG.error("alias %s has been added before to DeletedAlias", email)
db.session.rollback()
# save deleted alias to either global or domain trash
if alias.custom_domain_id:
try:
DomainDeletedAlias.create(
user_id=user.id, email=alias.email, domain_id=alias.custom_domain_id
)
db.session.commit()
except IntegrityError:
LOG.error(
"alias %s domain %s has been added before to DeletedAlias",
alias.email,
alias.custom_domain_id,
)
db.session.rollback()
else:
try:
DeletedAlias.create(email=alias.email)
db.session.commit()
except IntegrityError:
LOG.error("alias %s has been added before to DeletedAlias", alias.email)
db.session.rollback()