delete /alias/options v1,v2,v3
This commit is contained in:
parent
60b1145670
commit
886d3a761c
|
@ -2,243 +2,11 @@ from flask import jsonify, request, g
|
||||||
from sqlalchemy import desc
|
from sqlalchemy import desc
|
||||||
|
|
||||||
from app.api.base import api_bp, require_api_auth
|
from app.api.base import api_bp, require_api_auth
|
||||||
from app.config import ALIAS_DOMAINS, DISABLE_ALIAS_SUFFIX
|
|
||||||
from app.dashboard.views.custom_alias import available_suffixes
|
from app.dashboard.views.custom_alias import available_suffixes
|
||||||
from app.extensions import db
|
from app.extensions import db
|
||||||
from app.log import LOG
|
from app.log import LOG
|
||||||
from app.models import AliasUsedOn, Alias, User
|
from app.models import AliasUsedOn, Alias, User
|
||||||
from app.utils import convert_to_id, random_word
|
from app.utils import convert_to_id
|
||||||
|
|
||||||
|
|
||||||
@api_bp.route("/alias/options")
|
|
||||||
@require_api_auth
|
|
||||||
def options():
|
|
||||||
"""
|
|
||||||
Return what options user has when creating new alias.
|
|
||||||
Input:
|
|
||||||
a valid api-key in "Authentication" header and
|
|
||||||
optional "hostname" in args
|
|
||||||
Output: cf README
|
|
||||||
optional recommendation:
|
|
||||||
optional custom
|
|
||||||
can_create_custom: boolean
|
|
||||||
existing: array of existing aliases
|
|
||||||
|
|
||||||
"""
|
|
||||||
LOG.exception("/alias/options is obsolete")
|
|
||||||
user = g.user
|
|
||||||
hostname = request.args.get("hostname")
|
|
||||||
|
|
||||||
ret = {
|
|
||||||
"existing": [ge.email for ge in Alias.query.filter_by(user_id=user.id)],
|
|
||||||
"can_create_custom": user.can_create_new_alias(),
|
|
||||||
}
|
|
||||||
|
|
||||||
# recommendation alias if exist
|
|
||||||
if hostname:
|
|
||||||
# put the latest used alias first
|
|
||||||
q = (
|
|
||||||
db.session.query(AliasUsedOn, Alias, User)
|
|
||||||
.filter(
|
|
||||||
AliasUsedOn.alias_id == Alias.id,
|
|
||||||
Alias.user_id == user.id,
|
|
||||||
AliasUsedOn.hostname == hostname,
|
|
||||||
)
|
|
||||||
.order_by(desc(AliasUsedOn.created_at))
|
|
||||||
)
|
|
||||||
|
|
||||||
r = q.first()
|
|
||||||
if r:
|
|
||||||
_, alias, _ = r
|
|
||||||
LOG.d("found alias %s %s %s", alias, hostname, user)
|
|
||||||
ret["recommendation"] = {"alias": alias.email, "hostname": hostname}
|
|
||||||
|
|
||||||
# custom alias suggestion and suffix
|
|
||||||
ret["custom"] = {}
|
|
||||||
if hostname:
|
|
||||||
# keep only the domain name of hostname, ignore TLD and subdomain
|
|
||||||
# for ex www.groupon.com -> groupon
|
|
||||||
domain_name = hostname
|
|
||||||
if "." in hostname:
|
|
||||||
parts = hostname.split(".")
|
|
||||||
domain_name = parts[-2]
|
|
||||||
domain_name = convert_to_id(domain_name)
|
|
||||||
ret["custom"]["suggestion"] = domain_name
|
|
||||||
else:
|
|
||||||
ret["custom"]["suggestion"] = ""
|
|
||||||
|
|
||||||
ret["custom"]["suffixes"] = []
|
|
||||||
# maybe better to make sure the suffix is never used before
|
|
||||||
# but this is ok as there's a check when creating a new custom alias
|
|
||||||
for domain in ALIAS_DOMAINS:
|
|
||||||
if DISABLE_ALIAS_SUFFIX:
|
|
||||||
ret["custom"]["suffixes"].append(f"@{domain}")
|
|
||||||
else:
|
|
||||||
ret["custom"]["suffixes"].append(f".{random_word()}@{domain}")
|
|
||||||
|
|
||||||
for custom_domain in user.verified_custom_domains():
|
|
||||||
ret["custom"]["suffixes"].append("@" + custom_domain.domain)
|
|
||||||
|
|
||||||
# custom domain should be put first
|
|
||||||
ret["custom"]["suffixes"] = list(reversed(ret["custom"]["suffixes"]))
|
|
||||||
|
|
||||||
return jsonify(ret)
|
|
||||||
|
|
||||||
|
|
||||||
@api_bp.route("/v2/alias/options")
|
|
||||||
@require_api_auth
|
|
||||||
def options_v2():
|
|
||||||
"""
|
|
||||||
Return what options user has when creating new alias.
|
|
||||||
Input:
|
|
||||||
a valid api-key in "Authentication" header and
|
|
||||||
optional "hostname" in args
|
|
||||||
Output: cf README
|
|
||||||
can_create: bool
|
|
||||||
suffixes: [str]
|
|
||||||
prefix_suggestion: str
|
|
||||||
existing: [str]
|
|
||||||
recommendation: Optional dict
|
|
||||||
alias: str
|
|
||||||
hostname: str
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
LOG.exception("/v2/alias/options is obsolete")
|
|
||||||
|
|
||||||
user = g.user
|
|
||||||
hostname = request.args.get("hostname")
|
|
||||||
|
|
||||||
ret = {
|
|
||||||
"existing": [
|
|
||||||
ge.email for ge in Alias.query.filter_by(user_id=user.id, enabled=True)
|
|
||||||
],
|
|
||||||
"can_create": user.can_create_new_alias(),
|
|
||||||
"suffixes": [],
|
|
||||||
"prefix_suggestion": "",
|
|
||||||
}
|
|
||||||
|
|
||||||
# recommendation alias if exist
|
|
||||||
if hostname:
|
|
||||||
# put the latest used alias first
|
|
||||||
q = (
|
|
||||||
db.session.query(AliasUsedOn, Alias, User)
|
|
||||||
.filter(
|
|
||||||
AliasUsedOn.alias_id == Alias.id,
|
|
||||||
Alias.user_id == user.id,
|
|
||||||
AliasUsedOn.hostname == hostname,
|
|
||||||
)
|
|
||||||
.order_by(desc(AliasUsedOn.created_at))
|
|
||||||
)
|
|
||||||
|
|
||||||
r = q.first()
|
|
||||||
if r:
|
|
||||||
_, alias, _ = r
|
|
||||||
LOG.d("found alias %s %s %s", alias, hostname, user)
|
|
||||||
ret["recommendation"] = {"alias": alias.email, "hostname": hostname}
|
|
||||||
|
|
||||||
# custom alias suggestion and suffix
|
|
||||||
if hostname:
|
|
||||||
# keep only the domain name of hostname, ignore TLD and subdomain
|
|
||||||
# for ex www.groupon.com -> groupon
|
|
||||||
domain_name = hostname
|
|
||||||
if "." in hostname:
|
|
||||||
parts = hostname.split(".")
|
|
||||||
domain_name = parts[-2]
|
|
||||||
domain_name = convert_to_id(domain_name)
|
|
||||||
ret["prefix_suggestion"] = domain_name
|
|
||||||
|
|
||||||
# maybe better to make sure the suffix is never used before
|
|
||||||
# but this is ok as there's a check when creating a new custom alias
|
|
||||||
for domain in ALIAS_DOMAINS:
|
|
||||||
if DISABLE_ALIAS_SUFFIX:
|
|
||||||
ret["suffixes"].append(f"@{domain}")
|
|
||||||
else:
|
|
||||||
ret["suffixes"].append(f".{random_word()}@{domain}")
|
|
||||||
|
|
||||||
for custom_domain in user.verified_custom_domains():
|
|
||||||
ret["suffixes"].append("@" + custom_domain.domain)
|
|
||||||
|
|
||||||
# custom domain should be put first
|
|
||||||
ret["suffixes"] = list(reversed(ret["suffixes"]))
|
|
||||||
|
|
||||||
return jsonify(ret)
|
|
||||||
|
|
||||||
|
|
||||||
@api_bp.route("/v3/alias/options")
|
|
||||||
@require_api_auth
|
|
||||||
def options_v3():
|
|
||||||
"""
|
|
||||||
Return what options user has when creating new alias.
|
|
||||||
Same as v2 but do NOT return existing alias
|
|
||||||
Input:
|
|
||||||
a valid api-key in "Authentication" header and
|
|
||||||
optional "hostname" in args
|
|
||||||
Output: cf README
|
|
||||||
can_create: bool
|
|
||||||
suffixes: [str]
|
|
||||||
prefix_suggestion: str
|
|
||||||
recommendation: Optional dict
|
|
||||||
alias: str
|
|
||||||
hostname: str
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
LOG.exception("/v3/alias/options is obsolete")
|
|
||||||
user = g.user
|
|
||||||
hostname = request.args.get("hostname")
|
|
||||||
|
|
||||||
ret = {
|
|
||||||
"can_create": user.can_create_new_alias(),
|
|
||||||
"suffixes": [],
|
|
||||||
"prefix_suggestion": "",
|
|
||||||
}
|
|
||||||
|
|
||||||
# recommendation alias if exist
|
|
||||||
if hostname:
|
|
||||||
# put the latest used alias first
|
|
||||||
q = (
|
|
||||||
db.session.query(AliasUsedOn, Alias, User)
|
|
||||||
.filter(
|
|
||||||
AliasUsedOn.alias_id == Alias.id,
|
|
||||||
Alias.user_id == user.id,
|
|
||||||
AliasUsedOn.hostname == hostname,
|
|
||||||
)
|
|
||||||
.order_by(desc(AliasUsedOn.created_at))
|
|
||||||
)
|
|
||||||
|
|
||||||
r = q.first()
|
|
||||||
if r:
|
|
||||||
_, alias, _ = r
|
|
||||||
LOG.d("found alias %s %s %s", alias, hostname, user)
|
|
||||||
ret["recommendation"] = {"alias": alias.email, "hostname": hostname}
|
|
||||||
|
|
||||||
# custom alias suggestion and suffix
|
|
||||||
if hostname:
|
|
||||||
# keep only the domain name of hostname, ignore TLD and subdomain
|
|
||||||
# for ex www.groupon.com -> groupon
|
|
||||||
domain_name = hostname
|
|
||||||
if "." in hostname:
|
|
||||||
parts = hostname.split(".")
|
|
||||||
domain_name = parts[-2]
|
|
||||||
domain_name = convert_to_id(domain_name)
|
|
||||||
ret["prefix_suggestion"] = domain_name
|
|
||||||
|
|
||||||
# maybe better to make sure the suffix is never used before
|
|
||||||
# but this is ok as there's a check when creating a new custom alias
|
|
||||||
for domain in ALIAS_DOMAINS:
|
|
||||||
if DISABLE_ALIAS_SUFFIX:
|
|
||||||
ret["suffixes"].append(f"@{domain}")
|
|
||||||
else:
|
|
||||||
ret["suffixes"].append(f".{random_word()}@{domain}")
|
|
||||||
|
|
||||||
for custom_domain in user.verified_custom_domains():
|
|
||||||
ret["suffixes"].append("@" + custom_domain.domain)
|
|
||||||
|
|
||||||
# custom domain should be put first
|
|
||||||
ret["suffixes"] = list(reversed(ret["suffixes"]))
|
|
||||||
|
|
||||||
return jsonify(ret)
|
|
||||||
|
|
||||||
|
|
||||||
@api_bp.route("/v4/alias/options")
|
@api_bp.route("/v4/alias/options")
|
||||||
|
|
|
@ -302,10 +302,6 @@ def fake_data():
|
||||||
)
|
)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
for d in ["d1.localhost", "d2.localhost"]:
|
|
||||||
SLDomain.create(domain=d)
|
|
||||||
db.session.commit()
|
|
||||||
|
|
||||||
|
|
||||||
@login_manager.user_loader
|
@login_manager.user_loader
|
||||||
def load_user(user_id):
|
def load_user(user_id):
|
||||||
|
@ -669,9 +665,12 @@ def local_main():
|
||||||
|
|
||||||
# warning: only used in local
|
# warning: only used in local
|
||||||
if RESET_DB:
|
if RESET_DB:
|
||||||
|
from init_app import add_sl_domains
|
||||||
|
|
||||||
LOG.warning("reset db, add fake data")
|
LOG.warning("reset db, add fake data")
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
fake_data()
|
fake_data()
|
||||||
|
add_sl_domains()
|
||||||
|
|
||||||
if URL.startswith("https"):
|
if URL.startswith("https"):
|
||||||
LOG.d("enable https")
|
LOG.d("enable https")
|
||||||
|
|
Loading…
Reference in a new issue