take into account user.include_website_in_one_click_alias in /api/alias/random/new

This commit is contained in:
Son 2021-11-12 09:45:31 +01:00
parent 293cc74c53
commit 611fb8a20c
2 changed files with 43 additions and 14 deletions

View file

@ -1,3 +1,4 @@
import tldextract
from flask import g from flask import g
from flask import jsonify, request from flask import jsonify, request
@ -11,6 +12,7 @@ from app.db import Session
from app.extensions import limiter from app.extensions import limiter
from app.log import LOG from app.log import LOG
from app.models import Alias, AliasUsedOn, AliasGeneratorEnum from app.models import Alias, 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"])
@ -41,20 +43,33 @@ def new_random_alias():
if data: if data:
note = data.get("note") note = data.get("note")
scheme = user.alias_generator # custom alias suggestion and suffix
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 uuid"), 400
alias = Alias.create_new_random(user=user, scheme=scheme, note=note)
Session.commit()
hostname = request.args.get("hostname") hostname = request.args.get("hostname")
if hostname and user.include_website_in_one_click_alias:
LOG.d("Use %s to create new alias", hostname)
# keep only the domain name of hostname, ignore TLD and subdomain
# for ex www.groupon.com -> groupon
ext = tldextract.extract(hostname)
prefix_suggestion = ext.domain
prefix_suggestion = convert_to_id(prefix_suggestion)
alias = Alias.create_new(user, prefix_suggestion, note=note)
Session.commit()
else:
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 uuid"), 400
alias = Alias.create_new_random(user=user, scheme=scheme, note=note)
Session.commit()
if hostname: if hostname:
AliasUsedOn.create(alias_id=alias.id, hostname=hostname, user_id=alias.user_id) AliasUsedOn.create(alias_id=alias.id, hostname=hostname, user_id=alias.user_id)
Session.commit() Session.commit()

View file

@ -8,7 +8,7 @@ from app.models import Alias
from tests.utils import login from tests.utils import login
def test_success(flask_client): def test_with_hostname(flask_client):
login(flask_client) login(flask_client)
r = flask_client.post( r = flask_client.post(
@ -18,6 +18,9 @@ def test_success(flask_client):
assert r.status_code == 201 assert r.status_code == 201
assert r.json["alias"].endswith(EMAIL_DOMAIN) assert r.json["alias"].endswith(EMAIL_DOMAIN)
# make sure alias starts with the suggested prefix
assert r.json["alias"].startswith("test")
# assert returned field # assert returned field
res = r.json res = r.json
assert "id" in res assert "id" in res
@ -31,6 +34,17 @@ def test_success(flask_client):
assert "note" in res assert "note" in res
def test_without_hostname(flask_client):
login(flask_client)
r = flask_client.post(
url_for("api.new_random_alias"),
)
assert r.status_code == 201
assert r.json["alias"].endswith(EMAIL_DOMAIN)
def test_custom_mode(flask_client): def test_custom_mode(flask_client):
login(flask_client) login(flask_client)