From 4b3e4140248c38fc0fa1d5e535cf7eadaaad92d8 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Mon, 10 Oct 2022 12:22:00 +0200 Subject: [PATCH] feat(chalice): refactored signup --- api/chalicelib/core/signup.py | 40 ++++++----------- api/chalicelib/core/tenants.py | 2 +- api/chalicelib/utils/helper.py | 13 ++---- api/schemas.py | 1 - ee/api/chalicelib/core/signup.py | 43 +++++++------------ ee/api/chalicelib/core/tenants.py | 4 +- .../db/init_dbs/postgresql/1.8.2/1.8.2.sql | 3 +- .../db/init_dbs/postgresql/init_schema.sql | 1 - .../db/init_dbs/postgresql/1.8.2/1.8.2.sql | 3 +- .../db/init_dbs/postgresql/init_schema.sql | 1 - 10 files changed, 37 insertions(+), 74 deletions(-) diff --git a/api/chalicelib/core/signup.py b/api/chalicelib/core/signup.py index 9106084ad..c1092c47c 100644 --- a/api/chalicelib/core/signup.py +++ b/api/chalicelib/core/signup.py @@ -1,7 +1,5 @@ import json -from decouple import config - import schemas from chalicelib.core import users, telemetry, tenants from chalicelib.utils import captcha @@ -20,55 +18,41 @@ def create_step1(data: schemas.UserSignupSchema): print(f"=====================> {email}") password = data.password - print("Verifying email validity") if email is None or len(email) < 5: errors.append("Invalid email address.") else: - print("Verifying email existance") if users.email_exists(email): errors.append("Email address already in use.") if users.get_deleted_user_by_email(email) is not None: errors.append("Email address previously deleted.") - print("Verifying captcha") if helper.allow_captcha() and not captcha.is_valid(data.g_recaptcha_response): errors.append("Invalid captcha.") - print("Verifying password validity") if len(password) < 6: errors.append("Password is too short, it must be at least 6 characters long.") - print("Verifying fullname validity") fullname = data.fullname if fullname is None or len(fullname) < 1 or not helper.is_alphabet_space_dash(fullname): errors.append("Invalid full name.") - print("Verifying company's name validity") - company_name = data.organizationName - if company_name is None or len(company_name) < 1: - errors.append("invalid organization's name") - - print("Verifying project's name validity") - project_name = data.projectName - if project_name is None or len(project_name) < 1: - project_name = "my first project" + organization_name = data.organizationName + if organization_name is None or len(organization_name) < 1: + errors.append("Invalid organization name.") if len(errors) > 0: - print("==> error") + print(f"==> error for email:{data.email}, fullname:{data.fullname}, organizationName:{data.organizationName}") print(errors) return {"errors": errors} - print("No errors detected") + + project_name = "my first project" params = { - "email": email, "password": password, - "fullname": fullname, - "projectName": project_name, - "data": json.dumps({"lastAnnouncementView": TimeUTC.now()}), - "organizationName": company_name + "email": email, "password": password, "fullname": fullname, "projectName": project_name, + "data": json.dumps({"lastAnnouncementView": TimeUTC.now()}), "organizationName": organization_name } - query = f"""\ - WITH t AS ( - INSERT INTO public.tenants (name, version_number) - VALUES (%(organizationName)s, (SELECT openreplay_version())) + query = f"""WITH t AS ( + INSERT INTO public.tenants (name) + VALUES (%(organizationName)s) RETURNING api_key ), u AS ( @@ -106,7 +90,7 @@ def create_step1(data: schemas.UserSignupSchema): } c = { "tenantId": 1, - "name": company_name, + "name": organization_name, "apiKey": api_key, "remainingTrial": 14, "trialEnded": False, diff --git a/api/chalicelib/core/tenants.py b/api/chalicelib/core/tenants.py index e5b8cc63c..f61456de5 100644 --- a/api/chalicelib/core/tenants.py +++ b/api/chalicelib/core/tenants.py @@ -14,7 +14,7 @@ def get_by_tenant_id(tenant_id): api_key, created_at, '{license.EDITION}' AS edition, - version_number, + openreplay_version() AS version_number, opt_out FROM public.tenants LIMIT 1;""", diff --git a/api/chalicelib/utils/helper.py b/api/chalicelib/utils/helper.py index 919ac9d9f..7639f1950 100644 --- a/api/chalicelib/utils/helper.py +++ b/api/chalicelib/utils/helper.py @@ -4,25 +4,18 @@ import re import string from typing import Union -import requests +from decouple import config import schemas from chalicelib.utils.TimeUTC import TimeUTC -local_prefix = 'local-' -from decouple import config - - -def get_version_number(): - return config("version") - def get_stage_name(): return "OpenReplay" -def generate_salt(): - return "".join(random.choices(string.hexdigits, k=36)) +def random_string(length=36): + return "".join(random.choices(string.hexdigits, k=length)) def list_to_camel_case(items, flatten=False): diff --git a/api/schemas.py b/api/schemas.py index ce6b00439..f1f3d9cb7 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -28,7 +28,6 @@ class UserLoginSchema(_Grecaptcha): class UserSignupSchema(UserLoginSchema): fullname: str = Field(...) organizationName: str = Field(...) - projectName: str = Field(default="my first project") class Config: alias_generator = attribute_to_camel_case diff --git a/ee/api/chalicelib/core/signup.py b/ee/api/chalicelib/core/signup.py index 86299c838..402477245 100644 --- a/ee/api/chalicelib/core/signup.py +++ b/ee/api/chalicelib/core/signup.py @@ -19,55 +19,42 @@ def create_step1(data: schemas.UserSignupSchema): print(f"=====================> {email}") password = data.password - print("Verifying email validity") - if email is None or len(email) < 5 or not helper.is_valid_email(email): + if email is None or len(email) < 5: errors.append("Invalid email address.") else: - print("Verifying email existance") if users.email_exists(email): errors.append("Email address already in use.") if users.get_deleted_user_by_email(email) is not None: errors.append("Email address previously deleted.") - print("Verifying captcha") if helper.allow_captcha() and not captcha.is_valid(data.g_recaptcha_response): errors.append("Invalid captcha.") - print("Verifying password validity") if len(password) < 6: errors.append("Password is too short, it must be at least 6 characters long.") - print("Verifying fullname validity") fullname = data.fullname if fullname is None or len(fullname) < 1 or not helper.is_alphabet_space_dash(fullname): errors.append("Invalid full name.") - print("Verifying company's name validity") - company_name = data.organizationName - if company_name is None or len(company_name) < 1: - errors.append("invalid organization's name") - - print("Verifying project's name validity") - project_name = data.projectName - if project_name is None or len(project_name) < 1: - project_name = "my first project" + organization_name = data.organizationName + if organization_name is None or len(organization_name) < 1: + errors.append("Invalid organization name.") if len(errors) > 0: - print("==> error") + print(f"==> error for email:{data.email}, fullname:{data.fullname}, organizationName:{data.organizationName}") print(errors) return {"errors": errors} - print("No errors detected") - print("Decomposed infos") - params = {"email": email, "password": password, - "fullname": fullname, "companyName": company_name, - "projectName": project_name, - "data": json.dumps({"lastAnnouncementView": TimeUTC.now()}), - "permissions": [p.value for p in schemas_ee.Permissions]} - query = """\ - WITH t AS ( - INSERT INTO public.tenants (name, version_number) - VALUES (%(companyName)s, (SELECT openreplay_version())) + project_name = "my first project" + params = { + "email": email, "password": password, "fullname": fullname, "projectName": project_name, + "data": json.dumps({"lastAnnouncementView": TimeUTC.now()}), "organizationName": organization_name, + "permissions": [p.value for p in schemas_ee.Permissions] + } + query = """WITH t AS ( + INSERT INTO public.tenants (name) + VALUES (%(organizationName)s) RETURNING tenant_id, api_key ), r AS ( @@ -111,7 +98,7 @@ def create_step1(data: schemas.UserSignupSchema): } c = { "tenantId": 1, - "name": company_name, + "name": organization_name, "apiKey": api_key, "remainingTrial": 14, "trialEnded": False, diff --git a/ee/api/chalicelib/core/tenants.py b/ee/api/chalicelib/core/tenants.py index 71119fd13..c50deaea7 100644 --- a/ee/api/chalicelib/core/tenants.py +++ b/ee/api/chalicelib/core/tenants.py @@ -13,7 +13,7 @@ def get_by_tenant_key(tenant_key): t.api_key, t.created_at, '{license.EDITION}' AS edition, - t.version_number, + openreplay_version() AS version_number, t.opt_out FROM public.tenants AS t WHERE t.tenant_key = %(tenant_key)s AND t.deleted_at ISNULL @@ -33,7 +33,7 @@ def get_by_tenant_id(tenant_id): t.api_key, t.created_at, '{license.EDITION}' AS edition, - t.version_number, + openreplay_version() AS version_number, t.opt_out, t.tenant_key FROM public.tenants AS t diff --git a/ee/scripts/helm/db/init_dbs/postgresql/1.8.2/1.8.2.sql b/ee/scripts/helm/db/init_dbs/postgresql/1.8.2/1.8.2.sql index 1fd27342f..5e0856f7e 100644 --- a/ee/scripts/helm/db/init_dbs/postgresql/1.8.2/1.8.2.sql +++ b/ee/scripts/helm/db/init_dbs/postgresql/1.8.2/1.8.2.sql @@ -6,7 +6,8 @@ SELECT 'v1.8.2-ee' $$ LANGUAGE sql IMMUTABLE; ALTER TABLE IF EXISTS public.tenants - ADD COLUMN IF NOT EXISTS last_telemetry bigint NOT NULL DEFAULT CAST(EXTRACT(epoch FROM date_trunc('day', now())) * 1000 AS BIGINT); + ADD COLUMN IF NOT EXISTS last_telemetry bigint NOT NULL DEFAULT CAST(EXTRACT(epoch FROM date_trunc('day', now())) * 1000 AS BIGINT), + DROP COLUMN IF EXISTS version_number; CREATE TABLE IF NOT EXISTS sessions_notes ( diff --git a/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql b/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql index 13f2db5cf..1a11bb8a9 100644 --- a/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql +++ b/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql @@ -148,7 +148,6 @@ $$ api_key text UNIQUE default generate_api_key(20) not null, created_at timestamp without time zone NOT NULL DEFAULT (now() at time zone 'utc'), deleted_at timestamp without time zone NULL DEFAULT NULL, - version_number text NOT NULL, license text NULL, opt_out bool NOT NULL DEFAULT FALSE, t_projects integer NOT NULL DEFAULT 1, diff --git a/scripts/helm/db/init_dbs/postgresql/1.8.2/1.8.2.sql b/scripts/helm/db/init_dbs/postgresql/1.8.2/1.8.2.sql index 5abda1259..b89eb2343 100644 --- a/scripts/helm/db/init_dbs/postgresql/1.8.2/1.8.2.sql +++ b/scripts/helm/db/init_dbs/postgresql/1.8.2/1.8.2.sql @@ -6,7 +6,8 @@ SELECT 'v1.8.2' $$ LANGUAGE sql IMMUTABLE; ALTER TABLE IF EXISTS public.tenants - ADD COLUMN IF NOT EXISTS last_telemetry bigint NOT NULL DEFAULT CAST(EXTRACT(epoch FROM date_trunc('day', now())) * 1000 AS BIGINT); + ADD COLUMN IF NOT EXISTS last_telemetry bigint NOT NULL DEFAULT CAST(EXTRACT(epoch FROM date_trunc('day', now())) * 1000 AS BIGINT), + DROP COLUMN IF EXISTS version_number; CREATE TABLE IF NOT EXISTS sessions_notes ( diff --git a/scripts/helm/db/init_dbs/postgresql/init_schema.sql b/scripts/helm/db/init_dbs/postgresql/init_schema.sql index 8c3c07d24..fd534900d 100644 --- a/scripts/helm/db/init_dbs/postgresql/init_schema.sql +++ b/scripts/helm/db/init_dbs/postgresql/init_schema.sql @@ -121,7 +121,6 @@ $$ name text NOT NULL, api_key text NOT NULL DEFAULT generate_api_key(20), created_at timestamp without time zone NOT NULL DEFAULT (now() at time zone 'utc'), - version_number text NOT NULL, license text NULL, opt_out bool NOT NULL DEFAULT FALSE, t_projects integer NOT NULL DEFAULT 1,