diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index bf775fc63..da9a18367 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -44,17 +44,29 @@ jobs: run: npm test - name: Run py tests with coverage run: poetry run coverage run --omit=*/notifications_utils/* -m pytest --maxfail=10 --ignore=tests/end_to_end tests/ - - name: Run E2E tests - run: poetry run pytest -v --browser chromium --browser firefox --browser webkit tests/end_to_end - env: - NOTIFY_E2E_AUTH_STATE_PATH: ${{ secrets.NOTIFY_E2E_AUTH_STATE_PATH }} - NOTIFY_E2E_TEST_EMAIL: ${{ secrets.NOTIFY_E2E_TEST_EMAIL }} - NOTIFY_E2E_TEST_HTTP_AUTH_PASSWORD: ${{ secrets.NOTIFY_E2E_TEST_HTTP_AUTH_PASSWORD }} - NOTIFY_E2E_TEST_HTTP_AUTH_USER: ${{ secrets.NOTIFY_E2E_TEST_HTTP_AUTH_USER }} - NOTIFY_E2E_TEST_PASSWORD: ${{ secrets.NOTIFY_E2E_TEST_PASSWORD }} - NOTIFY_E2E_TEST_URI: ${{ secrets.NOTIFY_E2E_TEST_URI }} + # - name: Run E2E tests + # run: poetry run pytest -v --browser chromium --browser firefox --browser webkit tests/end_to_end + # env: + # NOTIFY_E2E_AUTH_STATE_PATH: ${{ secrets.NOTIFY_E2E_AUTH_STATE_PATH }} + # NOTIFY_E2E_TEST_EMAIL: ${{ secrets.NOTIFY_E2E_TEST_EMAIL }} + # NOTIFY_E2E_TEST_PASSWORD: ${{ secrets.NOTIFY_E2E_TEST_PASSWORD }} + # NOTIFY_E2E_TEST_URI: ${{ secrets.NOTIFY_E2E_TEST_URI }} - name: Check coverage threshold run: poetry run coverage report --fail-under=90 + # - name: Health check + # run: | + # response=$(curl -url ${{secrets.NOTIFY_E2E_TEST_URI}}_status) + # if grep -q "ok" <<< "$response"; then + # echo "Health check passed" + # else + # echo "Health check failed" + # exit 1 + # fi + # env: + # NOTIFY_E2E_AUTH_STATE_PATH: ${{ secrets.NOTIFY_E2E_AUTH_STATE_PATH }} + # NOTIFY_E2E_TEST_EMAIL: ${{ secrets.NOTIFY_E2E_TEST_EMAIL }} + # NOTIFY_E2E_TEST_PASSWORD: ${{ secrets.NOTIFY_E2E_TEST_PASSWORD }} + # NOTIFY_E2E_TEST_URI: ${{ secrets.NOTIFY_E2E_TEST_URI }} validate-new-relic-config: runs-on: ubuntu-latest diff --git a/.github/workflows/deploy-demo.yml b/.github/workflows/deploy-demo.yml index 6baeb7912..e4cf662de 100644 --- a/.github/workflows/deploy-demo.yml +++ b/.github/workflows/deploy-demo.yml @@ -52,7 +52,6 @@ jobs: DANGEROUS_SALT: ${{ secrets.DANGEROUS_SALT }} SECRET_KEY: ${{ secrets.SECRET_KEY }} ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }} - BASIC_AUTH_PASSWORD: ${{ secrets.BASIC_AUTH_PASSWORD }} NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }} NR_BROWSER_KEY: ${{ secrets.NR_BROWSER_KEY }} with: @@ -66,8 +65,6 @@ jobs: --var SECRET_KEY="$SECRET_KEY" --var ADMIN_CLIENT_USERNAME="notify-admin" --var ADMIN_CLIENT_SECRET="$ADMIN_CLIENT_SECRET" - --var BASIC_AUTH_USERNAME="curiousabout" - --var BASIC_AUTH_PASSWORD="$BASIC_AUTH_PASSWORD" --var NEW_RELIC_LICENSE_KEY="$NEW_RELIC_LICENSE_KEY" --var NR_BROWSER_KEY="$NR_BROWSER_KEY" diff --git a/.github/workflows/deploy-prod.yml b/.github/workflows/deploy-prod.yml index 5801d8e68..df6c5614e 100644 --- a/.github/workflows/deploy-prod.yml +++ b/.github/workflows/deploy-prod.yml @@ -52,7 +52,6 @@ jobs: DANGEROUS_SALT: ${{ secrets.DANGEROUS_SALT }} SECRET_KEY: ${{ secrets.SECRET_KEY }} ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }} - BASIC_AUTH_PASSWORD: ${{ secrets.BASIC_AUTH_PASSWORD }} NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }} NR_BROWSER_KEY: ${{ secrets.NR_BROWSER_KEY }} with: @@ -66,8 +65,6 @@ jobs: --var SECRET_KEY="$SECRET_KEY" --var ADMIN_CLIENT_USERNAME="notify-admin" --var ADMIN_CLIENT_SECRET="$ADMIN_CLIENT_SECRET" - --var BASIC_AUTH_USERNAME="curiousabout" - --var BASIC_AUTH_PASSWORD="$BASIC_AUTH_PASSWORD" --var NEW_RELIC_LICENSE_KEY="$NEW_RELIC_LICENSE_KEY" --var NR_BROWSER_KEY="$NR_BROWSER_KEY" diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index b754e327a..83c141370 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -57,7 +57,6 @@ jobs: DANGEROUS_SALT: ${{ secrets.DANGEROUS_SALT }} SECRET_KEY: ${{ secrets.SECRET_KEY }} ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }} - BASIC_AUTH_PASSWORD: ${{ secrets.BASIC_AUTH_PASSWORD }} NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }} NR_BROWSER_KEY: ${{ secrets.NR_BROWSER_KEY }} with: @@ -71,8 +70,6 @@ jobs: --var SECRET_KEY="$SECRET_KEY" --var ADMIN_CLIENT_USERNAME="notify-admin" --var ADMIN_CLIENT_SECRET="$ADMIN_CLIENT_SECRET" - --var BASIC_AUTH_USERNAME="curiousabout" - --var BASIC_AUTH_PASSWORD="$BASIC_AUTH_PASSWORD" --var NEW_RELIC_LICENSE_KEY="$NEW_RELIC_LICENSE_KEY" --var NR_BROWSER_KEY="$NR_BROWSER_KEY" diff --git a/app/__init__.py b/app/__init__.py index 5f5bb4680..7c5879a30 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -2,6 +2,7 @@ import os import pathlib from functools import partial from time import monotonic +from urllib.parse import urlparse, urlunparse import jinja2 from flask import ( @@ -36,7 +37,6 @@ from werkzeug.local import LocalProxy from app import proxy_fix from app.asset_fingerprinter import asset_fingerprinter from app.config import configs -from app.custom_auth import CustomBasicAuth from app.extensions import redis_client, zendesk_client from app.formatters import ( convert_to_boolean, @@ -121,7 +121,6 @@ from app.url_converters import ( login_manager = LoginManager() csrf = CSRFProtect() talisman = Talisman() -basic_auth = CustomBasicAuth() # The current service attached to the request stack. @@ -234,8 +233,6 @@ def create_app(application): login_manager.session_protection = None login_manager.anonymous_user = AnonymousUser - setup_basic_auth(application) - # make sure we handle unicode correctly redis_client.redis_store.decode_responses = True @@ -254,6 +251,7 @@ def create_app(application): def init_app(application): + application.before_request(redirect_notify_to_beta) application.before_request(load_service_before_request) application.before_request(load_organization_before_request) application.before_request(request_helper.check_proxy_header_before_request) @@ -332,6 +330,23 @@ def make_session_permanent(): session.permanent = True +def create_beta_url(url): + url_created = urlparse(url) + url_list = list(url_created) + url_list[1] = "beta.notify.gov" + url_for_redirect = urlunparse(url_list) + return url_for_redirect + + +def redirect_notify_to_beta(): + if ( + current_app.config["NOTIFY_ENVIRONMENT"] == "production" + and "beta.notify.gov" not in request.url + ): + url_to_beta = create_beta_url(request.url) + return redirect(url_to_beta, 302) + + def load_service_before_request(): if "/static/" in request.url: request_ctx.service = None @@ -565,7 +580,3 @@ def init_jinja(application): ] jinja_loader = jinja2.FileSystemLoader(template_folders) application.jinja_loader = jinja_loader - - -def setup_basic_auth(application): - application.basic_auth = CustomBasicAuth(application) diff --git a/app/assets/javascripts/fileUpload.js b/app/assets/javascripts/fileUpload.js index d12e554ed..9ef72d531 100644 --- a/app/assets/javascripts/fileUpload.js +++ b/app/assets/javascripts/fileUpload.js @@ -16,7 +16,7 @@ // The label gets styled like a button and is used to hide the native file upload control. This is so that // users see a button that looks like the others on the site. // - this.$form.find('label.file-upload-button').addClass('usa-button'); + this.$form.find('label.file-upload-button').addClass('usa-button margin-bottom-1'); // Clear the form if the user navigates back to the page $(window).on("pageshow", () => this.$form[0].reset()); diff --git a/app/assets/javascripts/radioSelect.js b/app/assets/javascripts/radioSelect.js index fc26013b2..e8e212257 100644 --- a/app/assets/javascripts/radioSelect.js +++ b/app/assets/javascripts/radioSelect.js @@ -9,48 +9,48 @@ let states = { 'initial': Hogan.compile(` {{#showNowAsDefault}} -