Merge pull request #76 from simple-login/api-random-alias
able to create word-based or uuid-based in /api/alias/random/new
This commit is contained in:
commit
50173483d3
|
@ -697,6 +697,7 @@ Create a new random alias.
|
||||||
Input:
|
Input:
|
||||||
- `Authentication` header that contains the api key
|
- `Authentication` header that contains the api key
|
||||||
- (Optional but recommended) `hostname` passed in query string
|
- (Optional but recommended) `hostname` passed in query string
|
||||||
|
- (Optional) mode: either `uuid` or `word`. By default, use the user setting when creating new random alias.
|
||||||
|
|
||||||
Output:
|
Output:
|
||||||
If success, 201 with the new alias, for example
|
If success, 201 with the new alias, for example
|
||||||
|
|
|
@ -3,11 +3,10 @@ from flask import jsonify, request
|
||||||
from flask_cors import cross_origin
|
from flask_cors import cross_origin
|
||||||
|
|
||||||
from app.api.base import api_bp, verify_api_key
|
from app.api.base import api_bp, verify_api_key
|
||||||
from app.config import EMAIL_DOMAIN, MAX_NB_EMAIL_FREE_PLAN
|
from app.config import MAX_NB_EMAIL_FREE_PLAN
|
||||||
from app.extensions import db
|
from app.extensions import db
|
||||||
from app.log import LOG
|
from app.log import LOG
|
||||||
from app.models import GenEmail, AliasUsedOn
|
from app.models import GenEmail, AliasUsedOn, AliasGeneratorEnum
|
||||||
from app.utils import convert_to_id
|
|
||||||
|
|
||||||
|
|
||||||
@api_bp.route("/alias/random/new", methods=["POST"])
|
@api_bp.route("/alias/random/new", methods=["POST"])
|
||||||
|
@ -32,6 +31,15 @@ def new_random_alias():
|
||||||
)
|
)
|
||||||
|
|
||||||
scheme = user.alias_generator
|
scheme = user.alias_generator
|
||||||
|
mode = request.args.get("mode")
|
||||||
|
if mode:
|
||||||
|
if mode == "word":
|
||||||
|
scheme = AliasGeneratorEnum.word.value
|
||||||
|
elif mode == "uuid":
|
||||||
|
scheme = AliasGeneratorEnum.uuid.value
|
||||||
|
else:
|
||||||
|
return jsonify(error=f"{mode} must be either word or alias"), 400
|
||||||
|
|
||||||
gen_email = GenEmail.create_new_random(user_id=user.id, scheme=scheme)
|
gen_email = GenEmail.create_new_random(user_id=user.id, scheme=scheme)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import uuid
|
||||||
|
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
|
|
||||||
from app.config import EMAIL_DOMAIN, MAX_NB_EMAIL_FREE_PLAN
|
from app.config import EMAIL_DOMAIN, MAX_NB_EMAIL_FREE_PLAN
|
||||||
|
@ -24,6 +26,28 @@ def test_success(flask_client):
|
||||||
assert r.json["alias"].endswith(EMAIL_DOMAIN)
|
assert r.json["alias"].endswith(EMAIL_DOMAIN)
|
||||||
|
|
||||||
|
|
||||||
|
def test_custom_mode(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()
|
||||||
|
|
||||||
|
r = flask_client.post(
|
||||||
|
url_for("api.new_random_alias", hostname="www.test.com", mode="uuid"),
|
||||||
|
headers={"Authentication": api_key.code},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert r.status_code == 201
|
||||||
|
# extract the uuid part
|
||||||
|
alias = r.json["alias"]
|
||||||
|
uuid_part = alias[: len(alias) - len(EMAIL_DOMAIN) - 1]
|
||||||
|
assert is_valid_uuid(uuid_part)
|
||||||
|
|
||||||
|
|
||||||
def test_out_of_quota(flask_client):
|
def test_out_of_quota(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
|
||||||
|
@ -49,3 +73,11 @@ def test_out_of_quota(flask_client):
|
||||||
r.json["error"]
|
r.json["error"]
|
||||||
== "You have reached the limitation of a free account with the maximum of 3 aliases, please upgrade your plan to create more aliases"
|
== "You have reached the limitation of a free account with the maximum of 3 aliases, please upgrade your plan to create more aliases"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def is_valid_uuid(val):
|
||||||
|
try:
|
||||||
|
uuid.UUID(str(val))
|
||||||
|
return True
|
||||||
|
except ValueError:
|
||||||
|
return False
|
||||||
|
|
Loading…
Reference in New Issue