Browse Source

make sure to set mailbox_id when creating GenEmail

Son NK 5 years ago
parent
commit
a6f4059d5d

+ 5 - 3
app/api/views/new_custom_alias.py

@@ -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:

+ 1 - 1
app/api/views/new_random_alias.py

@@ -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")

+ 6 - 6
app/dashboard/views/custom_alias.py

@@ -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")
 
 

+ 1 - 3
app/dashboard/views/index.py

@@ -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(
-                    user_id=current_user.id, scheme=scheme
-                )
+                gen_email = GenEmail.create_new_random(user=current_user, scheme=scheme)
 
 
                 gen_email.mailbox_id = current_user.default_mailbox_id
                 gen_email.mailbox_id = current_user.default_mailbox_id
 
 

+ 4 - 2
app/models.py

@@ -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:

+ 6 - 2
app/oauth/views/authorize.py

@@ -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()
 
 

+ 6 - 1
email_handler.py

@@ -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
 
 

+ 4 - 4
tests/api/test_alias.py

@@ -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

+ 1 - 1
tests/test_models.py

@@ -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)