make sure to set mailbox_id when creating GenEmail

This commit is contained in:
Son NK 2020-03-05 17:03:07 +01:00
parent faa82e7b5a
commit a6f4059d5d
9 changed files with 34 additions and 23 deletions

View File

@ -7,7 +7,7 @@ from app.config import MAX_NB_EMAIL_FREE_PLAN
from app.dashboard.views.custom_alias import verify_prefix_suffix from app.dashboard.views.custom_alias import verify_prefix_suffix
from app.extensions import db from app.extensions import db
from app.log import LOG from app.log import LOG
from app.models import GenEmail, AliasUsedOn from app.models import GenEmail, AliasUsedOn, User
from app.utils import convert_to_id from app.utils import convert_to_id
@ -26,7 +26,7 @@ def new_custom_alias():
409 if the alias already exists 409 if the alias already exists
""" """
user = g.user user: User = g.user
if not user.can_create_new_alias(): if not user.can_create_new_alias():
LOG.d("user %s cannot create any custom alias", user) LOG.d("user %s cannot create any custom alias", user)
return ( return (
@ -56,7 +56,9 @@ def new_custom_alias():
LOG.d("full alias already used %s", full_alias) LOG.d("full alias already used %s", full_alias)
return jsonify(error=f"alias {full_alias} already exists"), 409 return jsonify(error=f"alias {full_alias} already exists"), 409
gen_email = GenEmail.create(user_id=user.id, email=full_alias) gen_email = GenEmail.create(
user_id=user.id, email=full_alias, mailbox_id=user.default_mailbox_id
)
db.session.commit() db.session.commit()
if hostname: if hostname:

View File

@ -40,7 +40,7 @@ def new_random_alias():
else: else:
return jsonify(error=f"{mode} must be either word or alias"), 400 return jsonify(error=f"{mode} must be either word or alias"), 400
gen_email = GenEmail.create_new_random(user_id=user.id, scheme=scheme) gen_email = GenEmail.create_new_random(user=user, scheme=scheme)
db.session.commit() db.session.commit()
hostname = request.args.get("hostname") hostname = request.args.get("hostname")

View File

@ -69,8 +69,13 @@ def custom_alias():
"warning", "warning",
) )
else: else:
mailbox = Mailbox.get_by(email=mailbox_email)
gen_email = GenEmail.create( gen_email = GenEmail.create(
user_id=current_user.id, email=full_alias, note=alias_note user_id=current_user.id,
email=full_alias,
note=alias_note,
mailbox_id=mailbox.id,
) )
# get the custom_domain_id if alias is created with a custom domain # get the custom_domain_id if alias is created with a custom domain
@ -80,11 +85,6 @@ def custom_alias():
LOG.d("Set alias %s domain to %s", full_alias, custom_domain) LOG.d("Set alias %s domain to %s", full_alias, custom_domain)
gen_email.custom_domain_id = custom_domain.id gen_email.custom_domain_id = custom_domain.id
# assign alias to a mailbox
mailbox = Mailbox.get_by(email=mailbox_email)
gen_email.mailbox_id = mailbox.id
LOG.d("Set alias %s mailbox to %s", full_alias, mailbox)
db.session.commit() db.session.commit()
flash(f"Alias {full_alias} has been created", "success") flash(f"Alias {full_alias} has been created", "success")

View File

@ -71,9 +71,7 @@ def index():
) )
if not scheme or not AliasGeneratorEnum.has_value(scheme): if not scheme or not AliasGeneratorEnum.has_value(scheme):
scheme = current_user.alias_generator scheme = current_user.alias_generator
gen_email = GenEmail.create_new_random( gen_email = GenEmail.create_new_random(user=current_user, scheme=scheme)
user_id=current_user.id, scheme=scheme
)
gen_email.mailbox_id = current_user.default_mailbox_id gen_email.mailbox_id = current_user.default_mailbox_id

View File

@ -571,11 +571,13 @@ class GenEmail(db.Model, ModelMixin):
@classmethod @classmethod
def create_new_random( def create_new_random(
cls, user_id, scheme: int = AliasGeneratorEnum.word.value, in_hex: bool = False cls, user, scheme: int = AliasGeneratorEnum.word.value, in_hex: bool = False
): ):
"""create a new random alias""" """create a new random alias"""
random_email = generate_email(scheme=scheme, in_hex=in_hex) random_email = generate_email(scheme=scheme, in_hex=in_hex)
return GenEmail.create(user_id=user_id, email=random_email) return GenEmail.create(
user_id=user.id, email=random_email, mailbox_id=user.default_mailbox_id
)
def mailbox_email(self): def mailbox_email(self):
if self.mailbox_id: if self.mailbox_id:

View File

@ -184,7 +184,9 @@ def authorize():
return redirect(request.url) return redirect(request.url)
else: else:
gen_email = GenEmail.create( gen_email = GenEmail.create(
user_id=current_user.id, email=full_alias user_id=current_user.id,
email=full_alias,
mailbox_id=current_user.default_mailbox_id,
) )
# get the custom_domain_id if alias is created with a custom domain # get the custom_domain_id if alias is created with a custom domain
@ -207,7 +209,9 @@ def authorize():
gen_email = GenEmail.get_by(email=chosen_email) gen_email = GenEmail.get_by(email=chosen_email)
if not gen_email: if not gen_email:
gen_email = GenEmail.create( gen_email = GenEmail.create(
email=chosen_email, user_id=current_user.id email=chosen_email,
user_id=current_user.id,
mailbox_id=current_user.default_mailbox_id,
) )
db.session.flush() db.session.flush()

View File

@ -146,7 +146,10 @@ def try_auto_create_directory(alias: str) -> Optional[GenEmail]:
LOG.d("create alias %s for directory %s", alias, directory) LOG.d("create alias %s for directory %s", alias, directory)
gen_email = GenEmail.create( gen_email = GenEmail.create(
email=alias, user_id=directory.user_id, directory_id=directory.id, email=alias,
user_id=directory.user_id,
directory_id=directory.id,
mailbox_id=dir_user.default_mailbox_id,
) )
db.session.commit() db.session.commit()
return gen_email return gen_email
@ -191,7 +194,9 @@ def try_auto_create_catch_all_domain(alias: str) -> Optional[GenEmail]:
user_id=custom_domain.user_id, user_id=custom_domain.user_id,
custom_domain_id=custom_domain.id, custom_domain_id=custom_domain.id,
automatic_creation=True, automatic_creation=True,
mailbox_id=domain_user.default_mailbox_id,
) )
db.session.commit() db.session.commit()
return gen_email return gen_email

View File

@ -38,7 +38,7 @@ def test_success_with_pagination(flask_client):
# create more aliases than PAGE_LIMIT # create more aliases than PAGE_LIMIT
for _ in range(PAGE_LIMIT + 1): for _ in range(PAGE_LIMIT + 1):
GenEmail.create_new_random(user.id) GenEmail.create_new_random(user)
db.session.commit() db.session.commit()
# get aliases on the 1st page, should return PAGE_LIMIT aliases # get aliases on the 1st page, should return PAGE_LIMIT aliases
@ -68,7 +68,7 @@ def test_delete_alias(flask_client):
api_key = ApiKey.create(user.id, "for test") api_key = ApiKey.create(user.id, "for test")
db.session.commit() db.session.commit()
gen_email = GenEmail.create_new_random(user.id) gen_email = GenEmail.create_new_random(user)
db.session.commit() db.session.commit()
r = flask_client.delete( r = flask_client.delete(
@ -90,7 +90,7 @@ def test_toggle_alias(flask_client):
api_key = ApiKey.create(user.id, "for test") api_key = ApiKey.create(user.id, "for test")
db.session.commit() db.session.commit()
gen_email = GenEmail.create_new_random(user.id) gen_email = GenEmail.create_new_random(user)
db.session.commit() db.session.commit()
r = flask_client.post( r = flask_client.post(
@ -112,7 +112,7 @@ def test_alias_activities(flask_client):
api_key = ApiKey.create(user.id, "for test") api_key = ApiKey.create(user.id, "for test")
db.session.commit() db.session.commit()
gen_email = GenEmail.create_new_random(user.id) gen_email = GenEmail.create_new_random(user)
db.session.commit() db.session.commit()
# create some alias log # create some alias log

View File

@ -61,5 +61,5 @@ def test_gen_email_create_random(flask_client):
) )
db.session.commit() db.session.commit()
alias = GenEmail.create_new_random(user.id) alias = GenEmail.create_new_random(user)
assert alias.email.endswith(EMAIL_DOMAIN) assert alias.email.endswith(EMAIL_DOMAIN)