- {{ form.email(class="form-control",
- pattern="[0-9|A-Z|a-z|-]{3,}",
- title="Only letter, number or dash can be used and alias must have at least 3 characters.",
- autofocus=True) }}
- {{ render_field_errors(form.email) }}
+
@@ -40,6 +40,33 @@
+
+ {% if custom_domains %}
+
+
OR with your custom domains
+ {% for custom_domain in custom_domains %}
+
+ {% endfor %}
+ {% endif %}
{% endblock %}
diff --git a/app/dashboard/views/custom_alias.py b/app/dashboard/views/custom_alias.py
index e06ce105..56f6a14f 100644
--- a/app/dashboard/views/custom_alias.py
+++ b/app/dashboard/views/custom_alias.py
@@ -1,20 +1,14 @@
from flask import render_template, redirect, url_for, flash, request, session
from flask_login import login_required, current_user
-from flask_wtf import FlaskForm
-from wtforms import StringField, validators
from app.config import EMAIL_DOMAIN, HIGHLIGHT_GEN_EMAIL_ID
from app.dashboard.base import dashboard_bp
from app.extensions import db
from app.log import LOG
-from app.models import GenEmail, DeletedAlias
+from app.models import GenEmail, DeletedAlias, CustomDomain
from app.utils import convert_to_id, random_string
-class CustomAliasForm(FlaskForm):
- email = StringField("Email", validators=[validators.DataRequired()])
-
-
@dashboard_bp.route("/custom_alias", methods=["GET", "POST"])
@login_required
def custom_alias():
@@ -25,41 +19,81 @@ def custom_alias():
flash("ony premium user can choose custom alias", "warning")
return redirect(url_for("dashboard.index"))
- form = CustomAliasForm()
error = ""
- if form.validate_on_submit():
- email = form.email.data
- email = convert_to_id(email)
- email_suffix = request.form.get("email-suffix")
+ if request.method == "POST":
+ if request.form.get("form-name") == "non-custom-domain-name":
+ email_prefix = request.form.get("email-prefix")
+ email_prefix = convert_to_id(email_prefix)
+ email_suffix = request.form.get("email-suffix")
- if len(email) < 3:
- error = "email must be at least 3 letters"
- else:
- full_email = f"{email}.{email_suffix}@{EMAIL_DOMAIN}"
- # check if email already exists
- if GenEmail.get_by(email=full_email) or DeletedAlias.get_by(
- email=full_email
- ):
- error = "email already chosen, please choose another one"
+ if len(email_prefix) < 3:
+ error = "email must be at least 3 letters"
else:
- # create the new alias
- LOG.d("create custom alias %s for user %s", full_email, current_user)
+ full_email = f"{email_prefix}.{email_suffix}@{EMAIL_DOMAIN}"
+ # check if email already exists
+ if GenEmail.get_by(email=full_email) or DeletedAlias.get_by(
+ email=full_email
+ ):
+ error = "email already chosen, please choose another one"
+ else:
+ # create the new alias
+ LOG.d(
+ "create custom alias %s for user %s", full_email, current_user
+ )
+ gen_email = GenEmail.create(
+ email=full_email, user_id=current_user.id, custom=True
+ )
+ db.session.commit()
+
+ flash(f"Alias {full_email} has been created", "success")
+ session[HIGHLIGHT_GEN_EMAIL_ID] = gen_email.id
+
+ return redirect(url_for("dashboard.index"))
+ elif request.form.get("form-name") == "custom-domain-name":
+ custom_domain_id = request.form.get("custom-domain-id")
+ email = request.form.get("email")
+
+ custom_domain = CustomDomain.get(custom_domain_id)
+
+ if not custom_domain:
+ flash("Unknown error. Refresh the page", "warning")
+ return redirect(url_for("dashboard.custom_alias"))
+ elif custom_domain.user_id != current_user.id:
+ flash("Unknown error. Refresh the page", "warning")
+ return redirect(url_for("dashboard.custom_alias"))
+ elif not custom_domain.verified:
+ flash("Unknown error. Refresh the page", "warning")
+ return redirect(url_for("dashboard.custom_alias"))
+
+ full_email = f"{email}@{custom_domain.domain}"
+
+ if GenEmail.get_by(email=full_email):
+ error = f"{full_email} already exist, please choose another one"
+ else:
+ LOG.d(
+ "create custom alias %s for custom domain %s",
+ full_email,
+ custom_domain.domain,
+ )
+ # todo: add custom_id to GenEmail
gen_email = GenEmail.create(
- email=full_email, user_id=current_user.id, custom=True
+ email=full_email,
+ user_id=current_user.id,
+ custom=True,
+ custom_domain_id=custom_domain.id,
)
db.session.commit()
+ flash(f"Alias {full_email} has been created", "success")
- flash(f"Email alias {full_email} has been created", "success")
session[HIGHLIGHT_GEN_EMAIL_ID] = gen_email.id
-
return redirect(url_for("dashboard.index"))
email_suffix = random_string(6)
return render_template(
"dashboard/custom_alias.html",
- form=form,
error=error,
email_suffix=email_suffix,
EMAIL_DOMAIN=EMAIL_DOMAIN,
+ custom_domains=current_user.verified_custom_domains(),
)