multi-domain support

This commit is contained in:
Finn Stutzenstein committed 2022-03-15 18:36:41 +01:00
1 parent 58f46d0bbe
commit a1c6b656d7
14 files changed
+167 -46

No files matched your search

+29 -5
View File
@@ -1,6 +1,6 @@
from flask import flash
from max.db import EmailAlreadyExists, create_alias
from max.db import EmailAlreadyExists, create_alias, get_domains
from max.permissions import AllowAdminOrSelf
from max.translations import t
@@ -26,7 +26,21 @@ class AliasCreate(
else:
self.email = email
if not self.is_email_valid(email):
if self.user.can_use_different_alias_domain:
domain = self.request.form.get("domain")
if not isinstance(domain, str) or not domain:
flash(t("Domain must be given"), category="error")
error = True
elif domain not in get_domains():
flash(t("Invalid domain"), category="error")
error = True
else:
self.domain = domain
else:
self.domain = self.get_user_domain()
full_email = f"{self.email}@{self.domain}"
if not self.is_email_valid(full_email):
error = True
enabled = self.request.form.get("enabled")
@@ -49,7 +63,7 @@ class AliasCreate(
return # force re-rendering
try:
create_alias(self.email, self.user, self.enabled, self.note)
create_alias(full_email, self.user, self.enabled, self.note)
except EmailAlreadyExists as e:
if self.auth_user.is_admin:
flash(
@@ -61,14 +75,24 @@ class AliasCreate(
return
flash(
t("Creation of alias {email} was successful!", email=email),
t("Creation of alias {email} was successful!", email=full_email),
category="success",
)
return self.redirect()
def get_context(self):
context = super().get_context()
for key in ("email", "enabled", "note"):
for key in ("email", "domain", "enabled", "note"):
if hasattr(self, key):
context[key] = getattr(self, key)
context[
"can_use_different_alias_domain"
] = self.user.can_use_different_alias_domain
if self.user.can_use_different_alias_domain:
context["domains"] = get_domains()
else:
context["domain"] = self.get_user_domain()
return context
def get_user_domain(self):
return self.user.email.split("@")[1]