diff --git a/app/api/views/alias.py b/app/api/views/alias.py index a898a9d8..cff85601 100644 --- a/app/api/views/alias.py +++ b/app/api/views/alias.py @@ -1,3 +1,4 @@ +from deprecated import deprecated from flanker.addresslib import address from flanker.addresslib.address import EmailAddress from flask import g @@ -27,6 +28,7 @@ from app.models import Alias, Contact, Mailbox, AliasMailbox from app.utils import sanitize_email +@deprecated @api_bp.route("/aliases", methods=["GET", "POST"]) @require_api_auth def get_aliases(): @@ -76,6 +78,7 @@ def get_aliases_v2(): Get aliases Input: page_id: in query + pinned: in query Output: - aliases: list of alias: - id @@ -106,13 +109,15 @@ def get_aliases_v2(): except (ValueError, TypeError): return jsonify(error="page_id must be provided in request query"), 400 + pinned = "pinned" in request.args + query = None data = request.get_json(silent=True) if data: query = data.get("query") alias_infos: [AliasInfo] = get_alias_infos_with_pagination_v3( - user, page_id=page_id, query=query + user, page_id=page_id, query=query, alias_filter="pinned" if pinned else None ) return ( diff --git a/docs/api.md b/docs/api.md index 969c077c..4588a54a 100644 --- a/docs/api.md +++ b/docs/api.md @@ -304,6 +304,7 @@ Input: - `Authentication` header that contains the api key - `page_id` in query. Used for the pagination. The endpoint returns maximum 20 aliases for each page. `page_id` starts at 0. +- (Optional) `pinned` in query. If set, only pinned aliases are returned. - (Optional) query: included in request body. Some frameworks might prevent GET request having a non-empty body, in this case this endpoint also supports POST. diff --git a/tests/api/test_alias.py b/tests/api/test_alias.py index 0a378b3a..82dc9095 100644 --- a/tests/api/test_alias.py +++ b/tests/api/test_alias.py @@ -180,6 +180,25 @@ def test_get_aliases_v2(flask_client): assert "pinned" in r0 +def test_get_pinned_aliases_v2(flask_client): + user = login(flask_client) + + a0 = Alias.create_new(user, "prefix0") + a0.pinned = True + Session.commit() + + r = flask_client.get("/api/v2/aliases?page_id=0") + assert r.status_code == 200 + # the default alias (created when user is created) and a0 are returned + assert len(r.json["aliases"]) == 2 + + r = flask_client.get("/api/v2/aliases?page_id=0&pinned=true") + assert r.status_code == 200 + # only a0 is returned + assert len(r.json["aliases"]) == 1 + assert r.json["aliases"][0]["id"] == a0.id + + def test_delete_alias(flask_client): user = login(flask_client)