Quellcode durchsuchen

Add DELETE /api/aliases/:alias_id endpoint

Son NK vor 5 Jahren
Ursprung
Commit
c90a4899d2
3 geänderte Dateien mit 65 neuen und 5 gelöschten Zeilen
  1. 18 0
      README.md
  2. 25 5
      app/api/views/alias.py
  3. 22 0
      tests/api/test_alias.py

+ 18 - 0
README.md

@@ -773,6 +773,24 @@ If success, 200 with the list of aliases, for example:
 }
 ```
 
+#### DELETE /api/aliases/:alias_id
+
+Delete an alias
+
+Input:
+- `Authentication` header that contains the api key
+- `alias_id` in url. 
+
+Output:
+If success, 200.
+
+
+```json
+{
+    "deleted": true
+}
+```
+
 
 ### Database migration
 

+ 25 - 5
app/api/views/alias.py

@@ -3,13 +3,9 @@ from flask import jsonify, request
 from flask_cors import cross_origin
 
 from app.api.base import api_bp, verify_api_key
-from app.config import MAX_NB_EMAIL_FREE_PLAN
-from app.dashboard.views.custom_alias import verify_prefix_suffix
 from app.dashboard.views.index import get_alias_info, AliasInfo
 from app.extensions import db
-from app.log import LOG
-from app.models import GenEmail, AliasUsedOn
-from app.utils import convert_to_id
+from app.models import GenEmail
 
 
 @api_bp.route("/aliases")
@@ -56,3 +52,27 @@ def get_aliases():
         ),
         200,
     )
+
+
+@api_bp.route("/aliases/<int:alias_id>", methods=["DELETE"])
+@cross_origin()
+@verify_api_key
+def delete_alias(alias_id):
+    """
+    Delete alias
+    Input:
+        alias_id: in url
+    Output:
+        200 if deleted successfully
+
+    """
+    user = g.user
+    gen_email = GenEmail.get(alias_id)
+
+    if gen_email.user_id != user.id:
+        return jsonify(error="Forbidden"), 403
+
+    GenEmail.delete(alias_id)
+    db.session.commit()
+
+    return jsonify(deleted=True), 200

+ 22 - 0
tests/api/test_alias.py

@@ -54,3 +54,25 @@ def test_success_with_pagination(flask_client):
     )
     assert r.status_code == 200
     assert len(r.json["aliases"]) == 2
+
+
+def test_delete_alias(flask_client):
+    user = User.create(
+        email="a@b.c", password="password", name="Test User", activated=True
+    )
+    db.session.commit()
+
+    # create api_key
+    api_key = ApiKey.create(user.id, "for test")
+    db.session.commit()
+
+    gen_email = GenEmail.create_new_random(user.id)
+    db.session.commit()
+
+    r = flask_client.delete(
+        url_for("api.delete_alias", alias_id=gen_email.id),
+        headers={"Authentication": api_key.code},
+    )
+
+    assert r.status_code == 200
+    assert r.json == {"deleted": True}