mirror of
https://github.com/simple-login/app.git
synced 2024-09-20 15:05:59 +08:00
Moved global flag to config
This commit is contained in:
parent
8b3dc765fa
commit
4d07bc9d31
|
@ -464,3 +464,5 @@ def setup_nameservers():
|
||||||
|
|
||||||
|
|
||||||
NAMESERVERS = setup_nameservers()
|
NAMESERVERS = setup_nameservers()
|
||||||
|
|
||||||
|
DISABLE_CREATE_CONTACTS_FOR_FREE_USERS = False
|
||||||
|
|
|
@ -8,7 +8,7 @@ from flask_wtf import FlaskForm
|
||||||
from sqlalchemy import and_, func, case
|
from sqlalchemy import and_, func, case
|
||||||
from wtforms import StringField, validators, ValidationError
|
from wtforms import StringField, validators, ValidationError
|
||||||
|
|
||||||
from app.config import PAGE_LIMIT
|
from app import config
|
||||||
from app.dashboard.base import dashboard_bp
|
from app.dashboard.base import dashboard_bp
|
||||||
from app.db import Session
|
from app.db import Session
|
||||||
from app.email_utils import (
|
from app.email_utils import (
|
||||||
|
@ -26,19 +26,6 @@ from app.log import LOG
|
||||||
from app.models import Alias, Contact, EmailLog, User
|
from app.models import Alias, Contact, EmailLog, User
|
||||||
|
|
||||||
|
|
||||||
# TODO: Move this to a scoped config once the global config gets scoped.
|
|
||||||
# This allows this config to be modified from tests so we can test both scenarios.
|
|
||||||
# By default allow users to create contacts
|
|
||||||
class AllowFreeUsersToCreateContacts:
|
|
||||||
allow: bool = True
|
|
||||||
|
|
||||||
def set(self, allow: bool):
|
|
||||||
self.allow = allow
|
|
||||||
|
|
||||||
|
|
||||||
allow_free_users_to_create_contacts = AllowFreeUsersToCreateContacts()
|
|
||||||
|
|
||||||
|
|
||||||
def email_validator():
|
def email_validator():
|
||||||
"""validate email address. Handle both only email and email with name:
|
"""validate email address. Handle both only email and email with name:
|
||||||
- ab@cd.com
|
- ab@cd.com
|
||||||
|
@ -81,7 +68,7 @@ def create_contact(
|
||||||
raise ErrContactAlreadyExists(contact)
|
raise ErrContactAlreadyExists(contact)
|
||||||
return contact
|
return contact
|
||||||
|
|
||||||
if not allow_free_users_to_create_contacts.allow and (
|
if config.DISABLE_CREATE_CONTACTS_FOR_FREE_USERS and (
|
||||||
not user.is_premium() and user.flags & User.FLAG_FREE_DISABLE_CREATE_ALIAS > 0
|
not user.is_premium() and user.flags & User.FLAG_FREE_DISABLE_CREATE_ALIAS > 0
|
||||||
):
|
):
|
||||||
raise ErrContactErrorUpgradeNeeded()
|
raise ErrContactErrorUpgradeNeeded()
|
||||||
|
@ -196,7 +183,11 @@ def get_contact_infos(
|
||||||
],
|
],
|
||||||
else_=Contact.created_at,
|
else_=Contact.created_at,
|
||||||
)
|
)
|
||||||
q = q.order_by(latest_activity.desc()).limit(PAGE_LIMIT).offset(page * PAGE_LIMIT)
|
q = (
|
||||||
|
q.order_by(latest_activity.desc())
|
||||||
|
.limit(config.PAGE_LIMIT)
|
||||||
|
.offset(page * config.PAGE_LIMIT)
|
||||||
|
)
|
||||||
|
|
||||||
ret = []
|
ret = []
|
||||||
for contact, latest_email_log, nb_reply, nb_forward in q:
|
for contact, latest_email_log, nb_reply, nb_forward in q:
|
||||||
|
@ -293,7 +284,7 @@ def alias_contact_manager(alias_id):
|
||||||
)
|
)
|
||||||
|
|
||||||
contact_infos = get_contact_infos(alias, page, query=query)
|
contact_infos = get_contact_infos(alias, page, query=query)
|
||||||
last_page = len(contact_infos) < PAGE_LIMIT
|
last_page = len(contact_infos) < config.PAGE_LIMIT
|
||||||
nb_contact = Contact.filter(Contact.alias_id == alias.id).count()
|
nb_contact = Contact.filter(Contact.alias_id == alias.id).count()
|
||||||
|
|
||||||
# if highlighted contact isn't included, fetch it
|
# if highlighted contact isn't included, fetch it
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
import arrow
|
import arrow
|
||||||
|
|
||||||
from app.config import PAGE_LIMIT
|
from app import config
|
||||||
from app.dashboard.views.alias_contact_manager import (
|
|
||||||
allow_free_users_to_create_contacts,
|
|
||||||
)
|
|
||||||
from app.db import Session
|
from app.db import Session
|
||||||
from app.email_utils import is_reverse_alias
|
from app.email_utils import is_reverse_alias
|
||||||
from app.models import User, ApiKey, Alias, Contact, EmailLog, Mailbox
|
from app.models import User, ApiKey, Alias, Contact, EmailLog, Mailbox
|
||||||
|
@ -46,17 +43,17 @@ def test_get_aliases_with_pagination(flask_client):
|
||||||
api_key = ApiKey.create(user.id, "for test")
|
api_key = ApiKey.create(user.id, "for test")
|
||||||
Session.commit()
|
Session.commit()
|
||||||
|
|
||||||
# create more aliases than PAGE_LIMIT
|
# create more aliases than config.PAGE_LIMIT
|
||||||
for _ in range(PAGE_LIMIT + 1):
|
for _ in range(config.PAGE_LIMIT + 1):
|
||||||
Alias.create_new_random(user)
|
Alias.create_new_random(user)
|
||||||
Session.commit()
|
Session.commit()
|
||||||
|
|
||||||
# get aliases on the 1st page, should return PAGE_LIMIT aliases
|
# get aliases on the 1st page, should return config.PAGE_LIMIT aliases
|
||||||
r = flask_client.get(
|
r = flask_client.get(
|
||||||
url_for("api.get_aliases", page_id=0), headers={"Authentication": api_key.code}
|
url_for("api.get_aliases", page_id=0), headers={"Authentication": api_key.code}
|
||||||
)
|
)
|
||||||
assert r.status_code == 200
|
assert r.status_code == 200
|
||||||
assert len(r.json["aliases"]) == PAGE_LIMIT
|
assert len(r.json["aliases"]) == config.PAGE_LIMIT
|
||||||
|
|
||||||
# assert returned field
|
# assert returned field
|
||||||
for a in r.json["aliases"]:
|
for a in r.json["aliases"]:
|
||||||
|
@ -71,7 +68,7 @@ def test_get_aliases_with_pagination(flask_client):
|
||||||
assert "note" in a
|
assert "note" in a
|
||||||
|
|
||||||
# get aliases on the 2nd page, should return 2 aliases
|
# get aliases on the 2nd page, should return 2 aliases
|
||||||
# as the total number of aliases is PAGE_LIMIT +2
|
# as the total number of aliases is config.PAGE_LIMIT +2
|
||||||
# 1 alias is created when user is created
|
# 1 alias is created when user is created
|
||||||
r = flask_client.get(
|
r = flask_client.get(
|
||||||
url_for("api.get_aliases", page_id=1), headers={"Authentication": api_key.code}
|
url_for("api.get_aliases", page_id=1), headers={"Authentication": api_key.code}
|
||||||
|
@ -90,7 +87,7 @@ def test_get_aliases_query(flask_client):
|
||||||
api_key = ApiKey.create(user.id, "for test")
|
api_key = ApiKey.create(user.id, "for test")
|
||||||
Session.commit()
|
Session.commit()
|
||||||
|
|
||||||
# create more aliases than PAGE_LIMIT
|
# create more aliases than config.PAGE_LIMIT
|
||||||
Alias.create_new(user, "prefix1")
|
Alias.create_new(user, "prefix1")
|
||||||
Alias.create_new(user, "prefix2")
|
Alias.create_new(user, "prefix2")
|
||||||
Session.commit()
|
Session.commit()
|
||||||
|
@ -281,7 +278,7 @@ def test_alias_activities(flask_client):
|
||||||
)
|
)
|
||||||
Session.commit()
|
Session.commit()
|
||||||
|
|
||||||
for _ in range(int(PAGE_LIMIT / 2)):
|
for _ in range(int(config.PAGE_LIMIT / 2)):
|
||||||
EmailLog.create(
|
EmailLog.create(
|
||||||
contact_id=contact.id,
|
contact_id=contact.id,
|
||||||
is_reply=True,
|
is_reply=True,
|
||||||
|
@ -289,7 +286,7 @@ def test_alias_activities(flask_client):
|
||||||
alias_id=contact.alias_id,
|
alias_id=contact.alias_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
for _ in range(int(PAGE_LIMIT / 2) + 2):
|
for _ in range(int(config.PAGE_LIMIT / 2) + 2):
|
||||||
EmailLog.create(
|
EmailLog.create(
|
||||||
contact_id=contact.id,
|
contact_id=contact.id,
|
||||||
blocked=True,
|
blocked=True,
|
||||||
|
@ -303,7 +300,7 @@ def test_alias_activities(flask_client):
|
||||||
)
|
)
|
||||||
|
|
||||||
assert r.status_code == 200
|
assert r.status_code == 200
|
||||||
assert len(r.json["activities"]) == PAGE_LIMIT
|
assert len(r.json["activities"]) == config.PAGE_LIMIT
|
||||||
for ac in r.json["activities"]:
|
for ac in r.json["activities"]:
|
||||||
assert ac["from"]
|
assert ac["from"]
|
||||||
assert ac["to"]
|
assert ac["to"]
|
||||||
|
@ -456,7 +453,7 @@ def test_alias_contacts(flask_client):
|
||||||
Session.commit()
|
Session.commit()
|
||||||
|
|
||||||
# create some alias log
|
# create some alias log
|
||||||
for i in range(PAGE_LIMIT + 1):
|
for i in range(config.PAGE_LIMIT + 1):
|
||||||
contact = Contact.create(
|
contact = Contact.create(
|
||||||
website_email=f"marketing-{i}@example.com",
|
website_email=f"marketing-{i}@example.com",
|
||||||
reply_email=f"reply-{i}@a.b",
|
reply_email=f"reply-{i}@a.b",
|
||||||
|
@ -476,7 +473,7 @@ def test_alias_contacts(flask_client):
|
||||||
r = flask_client.get(f"/api/aliases/{alias.id}/contacts?page_id=0")
|
r = flask_client.get(f"/api/aliases/{alias.id}/contacts?page_id=0")
|
||||||
|
|
||||||
assert r.status_code == 200
|
assert r.status_code == 200
|
||||||
assert len(r.json["contacts"]) == PAGE_LIMIT
|
assert len(r.json["contacts"]) == config.PAGE_LIMIT
|
||||||
for ac in r.json["contacts"]:
|
for ac in r.json["contacts"]:
|
||||||
assert ac["creation_date"]
|
assert ac["creation_date"]
|
||||||
assert ac["creation_timestamp"]
|
assert ac["creation_timestamp"]
|
||||||
|
@ -582,14 +579,14 @@ def test_create_contact_route_free_users(flask_client):
|
||||||
assert r.status_code == 201
|
assert r.status_code == 201
|
||||||
|
|
||||||
# Set the global config to disable free users from create contacts
|
# Set the global config to disable free users from create contacts
|
||||||
allow_free_users_to_create_contacts.set(False)
|
config.DISABLE_CREATE_CONTACTS_FOR_FREE_USERS = True
|
||||||
r = flask_client.post(
|
r = flask_client.post(
|
||||||
url_for("api.create_contact_route", alias_id=alias.id),
|
url_for("api.create_contact_route", alias_id=alias.id),
|
||||||
headers={"Authentication": api_key.code},
|
headers={"Authentication": api_key.code},
|
||||||
json={"contact": f"First Last <first@{random_domain()}>"},
|
json={"contact": f"First Last <first@{random_domain()}>"},
|
||||||
)
|
)
|
||||||
assert r.status_code == 403
|
assert r.status_code == 403
|
||||||
allow_free_users_to_create_contacts.set(True)
|
config.DISABLE_CREATE_CONTACTS_FOR_FREE_USERS = False
|
||||||
|
|
||||||
|
|
||||||
def test_create_contact_route_empty_contact_address(flask_client):
|
def test_create_contact_route_empty_contact_address(flask_client):
|
||||||
|
@ -644,11 +641,11 @@ def test_delete_contact(flask_client):
|
||||||
def test_get_alias(flask_client):
|
def test_get_alias(flask_client):
|
||||||
user, api_key = get_new_user_and_api_key()
|
user, api_key = get_new_user_and_api_key()
|
||||||
|
|
||||||
# create more aliases than PAGE_LIMIT
|
# create more aliases than config.PAGE_LIMIT
|
||||||
alias = Alias.create_new_random(user)
|
alias = Alias.create_new_random(user)
|
||||||
Session.commit()
|
Session.commit()
|
||||||
|
|
||||||
# get aliases on the 1st page, should return PAGE_LIMIT aliases
|
# get aliases on the 1st page, should return config.PAGE_LIMIT aliases
|
||||||
r = flask_client.get(
|
r = flask_client.get(
|
||||||
url_for("api.get_alias", alias_id=alias.id),
|
url_for("api.get_alias", alias_id=alias.id),
|
||||||
headers={"Authentication": api_key.code},
|
headers={"Authentication": api_key.code},
|
||||||
|
|
Loading…
Reference in a new issue