diff --git a/app/config.py b/app/config.py index 80700cd39c..23ebe2a6d0 100644 --- a/app/config.py +++ b/app/config.py @@ -25,7 +25,8 @@ class Config(object): ALLOW_DEBUG_ROUTE = env.bool("ALLOW_DEBUG_ROUTE", False) # List of allowed service IDs that are allowed to send HTML through their templates. - ALLOW_HTML_SERVICE_IDS: List[str] = [id.strip() for id in os.getenv("ALLOW_HTML_SERVICE_IDS", "").split(",")] + ALLOW_HTML_SERVICE_IDS: List[str] = [ + id.strip() for id in os.getenv("ALLOW_HTML_SERVICE_IDS", "").split(",")] ADMIN_BASE_URL = ( "https://" + os.environ.get("HEROKU_APP_NAME", "") + ".herokuapp.com" if os.environ.get("HEROKU_APP_NAME", "") != "" @@ -47,12 +48,15 @@ class Config(object): BULK_SEND_AWS_BUCKET = os.getenv("BULK_SEND_AWS_BUCKET") CHECK_PROXY_HEADER = False - CONTACT_EMAIL = os.environ.get("CONTACT_EMAIL", "assistance+notification@cds-snc.ca") - CRM_GITHUB_PERSONAL_ACCESS_TOKEN = os.getenv("CRM_GITHUB_PERSONAL_ACCESS_TOKEN") + CONTACT_EMAIL = os.environ.get( + "CONTACT_EMAIL", "assistance+notification@cds-snc.ca") + CRM_GITHUB_PERSONAL_ACCESS_TOKEN = os.getenv( + "CRM_GITHUB_PERSONAL_ACCESS_TOKEN") CRM_ORG_LIST_URL = os.getenv("CRM_ORG_LIST_URL") CSV_MAX_ROWS = env.int("CSV_MAX_ROWS", 50_000) CSV_MAX_ROWS_BULK_SEND = env.int("CSV_MAX_ROWS_BULK_SEND", 100_000) - CSV_UPLOAD_BUCKET_NAME = os.getenv("CSV_UPLOAD_BUCKET_NAME", "notification-alpha-canada-ca-csv-upload") + CSV_UPLOAD_BUCKET_NAME = os.getenv( + "CSV_UPLOAD_BUCKET_NAME", "notification-alpha-canada-ca-csv-upload") DANGEROUS_SALT = os.environ.get("DANGEROUS_SALT") DEBUG = False DEBUG_KEY = os.environ.get("DEBUG_KEY", "") @@ -67,25 +71,30 @@ class Config(object): "other": 25_000, } DEFAULT_LIVE_SERVICE_LIMIT = env.int("DEFAULT_LIVE_SERVICE_LIMIT", 10_000) - DEFAULT_LIVE_SMS_DAILY_LIMIT = env.int("DEFAULT_LIVE_SMS_DAILY_LIMIT", 1000) + DEFAULT_LIVE_SMS_DAILY_LIMIT = env.int( + "DEFAULT_LIVE_SMS_DAILY_LIMIT", 1000) DEFAULT_SERVICE_LIMIT = env.int("DEFAULT_SERVICE_LIMIT", 50) DEFAULT_SMS_DAILY_LIMIT = env.int("DEFAULT_SMS_DAILY_LIMIT", 50) - DOCUMENTATION_DOMAIN = os.getenv("DOCUMENTATION_DOMAIN", "documentation.notification.canada.ca") + DOCUMENTATION_DOMAIN = os.getenv( + "DOCUMENTATION_DOMAIN", "documentation.notification.canada.ca") EMAIL_2FA_EXPIRY_SECONDS = 1_800 # 30 Minutes EMAIL_EXPIRY_SECONDS = 3600 # 1 hour # for waffles: pull out the routes into a flat list of the form ['/home', '/accueil', '/why-gc-notify', ...] - EXTRA_ROUTES = [item for sublist in map(lambda x: x.values(), GC_ARTICLES_ROUTES.values()) for item in sublist] + EXTRA_ROUTES = [item for sublist in map( + lambda x: x.values(), GC_ARTICLES_ROUTES.values()) for item in sublist] # FEATURE FLAGS FF_SALESFORCE_CONTACT = env.bool("FF_SALESFORCE_CONTACT", True) - FF_TOU = env.bool("FF_TOU", False) FREE_YEARLY_EMAIL_LIMIT = env.int("FREE_YEARLY_EMAIL_LIMIT", 10_000_000) FREE_YEARLY_SMS_LIMIT = env.int("FREE_YEARLY_SMS_LIMIT", 25_000) - GC_ARTICLES_API = os.environ.get("GC_ARTICLES_API", "articles.alpha.canada.ca/notification-gc-notify") - GC_ARTICLES_API_AUTH_PASSWORD = os.environ.get("GC_ARTICLES_API_AUTH_PASSWORD") - GC_ARTICLES_API_AUTH_USERNAME = os.environ.get("GC_ARTICLES_API_AUTH_USERNAME") + GC_ARTICLES_API = os.environ.get( + "GC_ARTICLES_API", "articles.alpha.canada.ca/notification-gc-notify") + GC_ARTICLES_API_AUTH_PASSWORD = os.environ.get( + "GC_ARTICLES_API_AUTH_PASSWORD") + GC_ARTICLES_API_AUTH_USERNAME = os.environ.get( + "GC_ARTICLES_API_AUTH_USERNAME") GOOGLE_ANALYTICS_ID = os.getenv("GOOGLE_ANALYTICS_ID", "UA-102484926-14") GOOGLE_TAG_MANAGER_ID = os.getenv("GOOGLE_TAG_MANAGER_ID", "GTM-KRKRZQV") HC_EN_SERVICE_ID = os.getenv("HC_EN_SERVICE_ID") @@ -93,9 +102,11 @@ class Config(object): HIPB_ENABLED = True HTTP_PROTOCOL = "http" INVITATION_EXPIRY_SECONDS = 3_600 * 24 * 2 # 2 days - also set on api - IP_GEOLOCATE_SERVICE = os.environ.get("IP_GEOLOCATE_SERVICE", "").rstrip("/") + IP_GEOLOCATE_SERVICE = os.environ.get( + "IP_GEOLOCATE_SERVICE", "").rstrip("/") LANGUAGES = ["en", "fr"] - LOGO_UPLOAD_BUCKET_NAME = os.getenv("ASSET_UPLOAD_BUCKET_NAME", "notification-alpha-canada-ca-asset-upload") + LOGO_UPLOAD_BUCKET_NAME = os.getenv( + "ASSET_UPLOAD_BUCKET_NAME", "notification-alpha-canada-ca-asset-upload") MAX_FAILED_LOGIN_COUNT = 10 MOU_BUCKET_NAME = os.getenv("MOU_BUCKET_NAME", "") @@ -118,8 +129,10 @@ class Config(object): SCANFILES_URL = os.environ.get("SCANFILES_URL", "") SECRET_KEY = env.list("SECRET_KEY", []) - SECURITY_EMAIL = os.environ.get("SECURITY_EMAIL", "security+securite@cds-snc.ca") - SENDING_DOMAIN = os.environ.get("SENDING_DOMAIN", "notification.alpha.canada.ca") + SECURITY_EMAIL = os.environ.get( + "SECURITY_EMAIL", "security+securite@cds-snc.ca") + SENDING_DOMAIN = os.environ.get( + "SENDING_DOMAIN", "notification.alpha.canada.ca") SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_NAME = "notify_admin_session" SESSION_COOKIE_SAMESITE = "Lax" @@ -133,8 +146,10 @@ class Config(object): STATSD_PORT = 8_125 STATSD_PREFIX = os.getenv("STATSD_PREFIX") - TEMPLATE_PREVIEW_API_HOST = os.environ.get("TEMPLATE_PREVIEW_API_HOST", "http://localhost:6013") - TEMPLATE_PREVIEW_API_KEY = os.environ.get("TEMPLATE_PREVIEW_API_KEY", "my-secret-key") + TEMPLATE_PREVIEW_API_HOST = os.environ.get( + "TEMPLATE_PREVIEW_API_HOST", "http://localhost:6013") + TEMPLATE_PREVIEW_API_KEY = os.environ.get( + "TEMPLATE_PREVIEW_API_KEY", "my-secret-key") WAF_SECRET = os.environ.get("WAF_SECRET", "waf-secret") WTF_CSRF_ENABLED = True WTF_CSRF_TIME_LIMIT = None @@ -145,7 +160,8 @@ class Config(object): NOTIFY_USER_ID = "6af522d0-2915-4e52-83a3-3690455a5fe6" NOTIFY_SERVICE_ID = "d6aa2c68-a2d9-4437-ab19-3ae8eb202553" - NO_BRANDING_ID = os.environ.get("NO_BRANDING_ID", "0af93cf1-2c49-485f-878f-f3e662e651ef") + NO_BRANDING_ID = os.environ.get( + "NO_BRANDING_ID", "0af93cf1-2c49-485f-878f-f3e662e651ef") @classmethod def get_sensitive_config(cls) -> list[str]: @@ -173,7 +189,8 @@ def get_safe_config(cls) -> dict[str, Any]: class Development(Config): - ADMIN_CLIENT_SECRET = os.environ.get("ADMIN_CLIENT_SECRET", "dev-notify-secret-key") + ADMIN_CLIENT_SECRET = os.environ.get( + "ADMIN_CLIENT_SECRET", "dev-notify-secret-key") ANTIVIRUS_API_HOST = "http://localhost:6016" ANTIVIRUS_API_KEY = "test-key" API_HOST_NAME = os.environ.get("API_HOST_NAME", "http://localhost:6011") @@ -190,7 +207,8 @@ class Development(Config): class Test(Development): - ADMIN_CLIENT_SECRET = os.environ.get("ADMIN_CLIENT_SECRET", "dev-notify-secret-key") + ADMIN_CLIENT_SECRET = os.environ.get( + "ADMIN_CLIENT_SECRET", "dev-notify-secret-key") ANTIVIRUS_API_HOST = "https://test-antivirus" ANTIVIRUS_API_KEY = "test-antivirus-secret" API_HOST_NAME = os.environ.get("API_HOST_NAME", "http://localhost:6011") @@ -218,11 +236,11 @@ class Test(Development): FF_BOUNCE_RATE_V15 = True FF_BOUNCE_RATE_BACKEND = True FF_ABTEST_SERVICE_ID = "" - FF_TOU = True class ProductionFF(Config): - ADMIN_CLIENT_SECRET = os.environ.get("ADMIN_CLIENT_SECRET", "dev-notify-secret-key") + ADMIN_CLIENT_SECRET = os.environ.get( + "ADMIN_CLIENT_SECRET", "dev-notify-secret-key") ANTIVIRUS_API_HOST = "https://test-antivirus" ANTIVIRUS_API_KEY = "test-antivirus-secret" API_HOST_NAME = os.environ.get("API_HOST_NAME", "http://localhost:6011") @@ -250,7 +268,6 @@ class ProductionFF(Config): FF_BOUNCE_RATE_V15 = True FF_BOUNCE_RATE_BACKEND = True FF_ABTEST_SERVICE_ID = "" - FF_TOU = False class Production(Config): @@ -267,7 +284,6 @@ class Staging(Production): NOTIFY_LOG_LEVEL = "INFO" SYSTEM_STATUS_URL = "https://status.staging.notification.cdssandbox.xyz" NO_BRANDING_ID = "0af93cf1-2c49-485f-878f-f3e662e651ef" - FF_TOU = True class Scratch(Production): diff --git a/app/main/forms.py b/app/main/forms.py index 5446032d1f..d890972398 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -3,7 +3,7 @@ from itertools import chain import pytz -from flask import current_app, request +from flask import request from flask_babel import lazy_gettext as _l from flask_wtf import FlaskForm as Form from flask_wtf.file import FileAllowed @@ -382,9 +382,8 @@ class RegisterUserForm(StripWhitespaceForm): tou_agreed = HiddenField("tou_agreed", validators=[]) def validate_tou_agreed(self, field): - if current_app.config["FF_TOU"]: - if field.data is not None and field.data.strip() == "": - raise ValidationError(_l("Read and agree to continue")) + if field.data is not None and field.data.strip() == "": + raise ValidationError(_l("Read and agree to continue")) class RegisterUserFromInviteForm(RegisterUserForm): diff --git a/app/templates/views/register.html b/app/templates/views/register.html index 57659c17e8..21bdcf7cb6 100644 --- a/app/templates/views/register.html +++ b/app/templates/views/register.html @@ -26,14 +26,8 @@
- {{ _("By creating an account, you agree to the terms of use.").format(gca_url_for('terms')) }} -
- {% endif %} + {{ tou_dialog_trigger(button_text=_('Read and agree to the terms of use'), is_in_error_state=(form.errors.get('tou_agreed') != None)) }} + {{ form.tou_agreed }} {{ form.auth_type }} {% set txt = _('Continue') %} @@ -43,8 +37,6 @@