From c90a4899d2bdb365af8c2bdcc8603c0501b7900d Mon Sep 17 00:00:00 2001 From: Son NK Date: Wed, 5 Feb 2020 18:21:17 +0700 Subject: [PATCH] Add DELETE /api/aliases/:alias_id endpoint --- README.md | 18 ++++++++++++++++++ app/api/views/alias.py | 30 +++++++++++++++++++++++++----- tests/api/test_alias.py | 22 ++++++++++++++++++++++ 3 files changed, 65 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 46b741a4..35bfcbf3 100644 --- a/README.md +++ b/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 diff --git a/app/api/views/alias.py b/app/api/views/alias.py index 76a51a5e..3e838d5f 100644 --- a/app/api/views/alias.py +++ b/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/", 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 diff --git a/tests/api/test_alias.py b/tests/api/test_alias.py index 9138c5c2..b790a83b 100644 --- a/tests/api/test_alias.py +++ b/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}