mirror of
https://github.com/simple-login/app.git
synced 2024-09-20 15:05:59 +08:00
Support mailbox_ids in PUT /api/aliases/:alias_id
This commit is contained in:
parent
165d986561
commit
90dae2e3c8
|
@ -1042,6 +1042,7 @@ Input:
|
||||||
- (optional) `note` in request body
|
- (optional) `note` in request body
|
||||||
- (optional) `mailbox_id` in request body
|
- (optional) `mailbox_id` in request body
|
||||||
- (optional) `name` in request body
|
- (optional) `name` in request body
|
||||||
|
- (optional) `mailbox_ids` in request body: array of mailbox_id
|
||||||
|
|
||||||
Output:
|
Output:
|
||||||
If success, return 200
|
If success, return 200
|
||||||
|
|
|
@ -285,6 +285,37 @@ def update_alias(alias_id):
|
||||||
alias.mailbox_id = mailbox_id
|
alias.mailbox_id = mailbox_id
|
||||||
changed = True
|
changed = True
|
||||||
|
|
||||||
|
if "mailbox_ids" in data:
|
||||||
|
mailbox_ids = [int(m_id) for m_id in data.get("mailbox_ids")]
|
||||||
|
mailboxes: [Mailbox] = []
|
||||||
|
|
||||||
|
# check if all mailboxes belong to user
|
||||||
|
for mailbox_id in mailbox_ids:
|
||||||
|
mailbox = Mailbox.get(mailbox_id)
|
||||||
|
if not mailbox or mailbox.user_id != user.id or not mailbox.verified:
|
||||||
|
return jsonify(error="Forbidden"), 400
|
||||||
|
mailboxes.append(mailbox)
|
||||||
|
|
||||||
|
if not mailboxes:
|
||||||
|
return jsonify(error="Must choose at least one mailbox"), 400
|
||||||
|
|
||||||
|
# <<< update alias mailboxes >>>
|
||||||
|
# first remove all existing alias-mailboxes links
|
||||||
|
AliasMailbox.query.filter_by(alias_id=alias.id).delete()
|
||||||
|
db.session.flush()
|
||||||
|
|
||||||
|
# then add all new mailboxes
|
||||||
|
for i, mailbox in enumerate(mailboxes):
|
||||||
|
if i == 0:
|
||||||
|
alias.mailbox_id = mailboxes[0].id
|
||||||
|
else:
|
||||||
|
AliasMailbox.create(
|
||||||
|
user_id=alias.user_id, alias_id=alias.id, mailbox_id=mailbox.id
|
||||||
|
)
|
||||||
|
# <<< END update alias mailboxes >>>
|
||||||
|
|
||||||
|
changed = True
|
||||||
|
|
||||||
if "name" in data:
|
if "name" in data:
|
||||||
new_name = data.get("name")
|
new_name = data.get("name")
|
||||||
alias.name = new_name
|
alias.name = new_name
|
||||||
|
|
|
@ -362,6 +362,43 @@ def test_update_alias_name(flask_client):
|
||||||
assert alias.name == "Test Name"
|
assert alias.name == "Test Name"
|
||||||
|
|
||||||
|
|
||||||
|
def test_update_alias_mailboxes(flask_client):
|
||||||
|
user = User.create(
|
||||||
|
email="a@b.c", password="password", name="Test User", activated=True
|
||||||
|
)
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
mb1 = Mailbox.create(user_id=user.id, email="ab1@cd.com", verified=True)
|
||||||
|
mb2 = Mailbox.create(user_id=user.id, email="ab2@cd.com", verified=True)
|
||||||
|
|
||||||
|
# create api_key
|
||||||
|
api_key = ApiKey.create(user.id, "for test")
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
alias = Alias.create_new_random(user)
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
r = flask_client.put(
|
||||||
|
url_for("api.update_alias", alias_id=alias.id),
|
||||||
|
headers={"Authentication": api_key.code},
|
||||||
|
json={"mailbox_ids": [mb1.id, mb2.id]},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert r.status_code == 200
|
||||||
|
alias = Alias.get(alias.id)
|
||||||
|
|
||||||
|
assert alias.mailbox
|
||||||
|
assert len(alias._mailboxes) == 1
|
||||||
|
|
||||||
|
# fail when update with empty mailboxes
|
||||||
|
r = flask_client.put(
|
||||||
|
url_for("api.update_alias", alias_id=alias.id),
|
||||||
|
headers={"Authentication": api_key.code},
|
||||||
|
json={"mailbox_ids": []},
|
||||||
|
)
|
||||||
|
assert r.status_code == 400
|
||||||
|
|
||||||
|
|
||||||
def test_alias_contacts(flask_client):
|
def test_alias_contacts(flask_client):
|
||||||
user = User.create(
|
user = User.create(
|
||||||
email="a@b.c", password="password", name="Test User", activated=True
|
email="a@b.c", password="password", name="Test User", activated=True
|
||||||
|
|
Loading…
Reference in a new issue