From 1703f4b5f6e3f5e8e3e1e0082c25ad287e736b71 Mon Sep 17 00:00:00 2001 From: Son NK Date: Wed, 3 Jul 2019 22:13:41 +0200 Subject: [PATCH] add param WORDS_FILE_PATH, use random_words when generating email --- app/config.py | 2 ++ app/models.py | 6 +++--- app/utils.py | 13 +++++++++++++ tests/test_utils.py | 11 +++++++++++ 4 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 tests/test_utils.py diff --git a/app/config.py b/app/config.py index 16fab92c..b478af72 100644 --- a/app/config.py +++ b/app/config.py @@ -57,3 +57,5 @@ PARTNER_CODES = ["SL2019"] # Allow user to have 1 year of premium: set the expiration_date to 1 year more PROMO_CODE = "SIMPLEISBETTER" + +WORDS_FILE_PATH = os.environ.get("WORDS_FILE_PATH") diff --git a/app/models.py b/app/models.py index 70b9c760..bfce2305 100644 --- a/app/models.py +++ b/app/models.py @@ -9,11 +9,11 @@ from flask_login import UserMixin from sqlalchemy_utils import ArrowType from app import s3 -from app.config import URL, MAX_NB_EMAIL_FREE_PLAN, EMAIL_DOMAIN +from app.config import EMAIL_DOMAIN, MAX_NB_EMAIL_FREE_PLAN, URL from app.extensions import db from app.log import LOG from app.oauth_models import Scope -from app.utils import convert_to_id, random_string +from app.utils import convert_to_id, random_string, random_words class ModelMixin(object): @@ -308,7 +308,7 @@ class OauthToken(db.Model, ModelMixin): def generate_email() -> str: """generate an email address that does not exist before""" - random_email = random_string(40) + "@" + EMAIL_DOMAIN + random_email = random_words() + "@" + EMAIL_DOMAIN # check that the client does not exist yet if not GenEmail.get_by(email=random_email): diff --git a/app/utils.py b/app/utils.py index 25688180..5dd21e98 100644 --- a/app/utils.py +++ b/app/utils.py @@ -4,6 +4,19 @@ import urllib.parse from unidecode import unidecode +from .config import WORDS_FILE_PATH +from .log import LOG + +with open(WORDS_FILE_PATH) as f: + LOG.d("load words file: %s", WORDS_FILE_PATH) + _words = f.read().split() + + +def random_words(): + """Generate a random words. Used to generate user-facing string, for ex email addresses""" + nb_words = random.randint(3, 5) + return "_".join([random.choice(_words) for i in range(nb_words)]) + def random_string(length=10): """Generate a random string of fixed length """ diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 00000000..d11438ab --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,11 @@ +from app.utils import random_string, random_words + + +def test_random_words(): + s = random_words() + assert len(s) > 0 + + +def test_random_string(): + s = random_string() + assert len(s) > 0