From 1915c8d09d9eb63765a283216a890f7fb2899803 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Mon, 8 Mar 2021 20:35:28 +0100 Subject: [PATCH] Export and import mailbox info with alias --- app/api/views/export.py | 5 ++-- .../templates/dashboard/batch_import.html | 1 + job_runner.py | 29 ++++++++++++++++++- static/batch_import_template.csv | 6 ++-- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/app/api/views/export.py b/app/api/views/export.py index 8cfb148c..3557a116 100644 --- a/app/api/views/export.py +++ b/app/api/views/export.py @@ -53,9 +53,10 @@ def export_aliases(): """ user = g.user - data = [["alias", "note", "enabled"]] + data = [["alias", "note", "enabled", "mailboxes"]] for alias in Alias.filter_by(user_id=user.id).all(): # type: Alias - data.append([alias.email, alias.note, alias.enabled]) + mailboxes = " ".join([mailbox.email for mailbox in alias.mailboxes]) + data.append([alias.email, alias.note, alias.enabled, mailboxes]) si = StringIO() cw = csv.writer(si) diff --git a/app/dashboard/templates/dashboard/batch_import.html b/app/dashboard/templates/dashboard/batch_import.html index 24b90733..db8882c5 100644 --- a/app/dashboard/templates/dashboard/batch_import.html +++ b/app/dashboard/templates/dashboard/batch_import.html @@ -10,6 +10,7 @@

Alias Batch Import

Only aliases created with your verified domains can be imported.
+ If mailboxes are set for an alias, they will only be linked if they already exist.
Please make sure to use the csv template file.
diff --git a/job_runner.py b/job_runner.py index b414f791..b426332f 100644 --- a/job_runner.py +++ b/job_runner.py @@ -31,6 +31,8 @@ from app.models import ( DeletedAlias, DomainDeletedAlias, CustomDomain, + Mailbox, + AliasMailbox, ) from server import create_app @@ -152,17 +154,42 @@ def handle_batch_import(batch_import: BatchImport): LOG.d("alias already used %s", full_alias) continue + mailboxes = [] + + if "mailboxes" in row: + for mailbox_email in row["mailboxes"].split(): + mailbox_email = sanitize_email(mailbox_email) + mailbox = Mailbox.get_by(email=mailbox_email) + + if not mailbox or not mailbox.verified or mailbox.user_id != user.id: + LOG.d("mailbox %s can't be used %s", mailbox, user) + continue + + mailboxes.append(mailbox.id) + + if len(mailboxes) == 0: + mailboxes = [user.default_mailbox_id] + alias = Alias.create( user_id=user.id, email=full_alias, note=note, - mailbox_id=user.default_mailbox_id, + mailbox_id=mailboxes[0], custom_domain_id=custom_domain.id, batch_import_id=batch_import.id, ) db.session.commit() + db.session.flush() LOG.d("Create %s", alias) + for i in range(1, len(mailboxes)): + alias_mailbox = AliasMailbox.create( + alias_id=alias.id, + mailbox_id=mailboxes[i], + ) + db.session.commit() + LOG.d("Create %s", alias_mailbox) + if __name__ == "__main__": while True: diff --git a/static/batch_import_template.csv b/static/batch_import_template.csv index c9af19f0..a06b6439 100644 --- a/static/batch_import_template.csv +++ b/static/batch_import_template.csv @@ -1,3 +1,3 @@ -"alias","note" -"ebay@my-domain.com","Used on eBay" -"facebook@my-domain.com","Used on Facebook, Instagram." \ No newline at end of file +"alias","note","mailboxes" +"ebay@my-domain.com","Used on eBay","destination@my-destionation-domain.com" +"facebook@my-domain.com","Used on Facebook, Instagram.","destination1@my-destionation-domain.com destination2@my-destination-domain.com" \ No newline at end of file