set up basicauth config to protect staging site

This commit is contained in:
Jim Moffet
2022-06-30 17:05:42 -07:00
parent 6d3f67fb9b
commit 509cce38f4
10 changed files with 30 additions and 10 deletions
+4 -1
View File
@@ -19,6 +19,7 @@ from flask.globals import _lookup_req_object, _request_ctx_stack
from flask_login import LoginManager, current_user from flask_login import LoginManager, current_user
from flask_wtf import CSRFProtect from flask_wtf import CSRFProtect
from flask_wtf.csrf import CSRFError from flask_wtf.csrf import CSRFError
from flask_basicauth import BasicAuth
from gds_metrics import GDSMetrics from gds_metrics import GDSMetrics
from govuk_frontend_jinja.flask_ext import init_govuk_frontend from govuk_frontend_jinja.flask_ext import init_govuk_frontend
from itsdangerous import BadSignature from itsdangerous import BadSignature
@@ -134,7 +135,7 @@ from app.url_converters import (
login_manager = LoginManager() login_manager = LoginManager()
csrf = CSRFProtect() csrf = CSRFProtect()
metrics = GDSMetrics() metrics = GDSMetrics()
basic_auth = BasicAuth()
# The current service attached to the request stack. # The current service attached to the request stack.
def _get_current_service(): def _get_current_service():
@@ -220,6 +221,8 @@ def create_app(application):
login_manager.login_message_category = 'default' login_manager.login_message_category = 'default'
login_manager.session_protection = None login_manager.session_protection = None
login_manager.anonymous_user = AnonymousUser login_manager.anonymous_user = AnonymousUser
basic_auth = BasicAuth(application)
# make sure we handle unicode correctly # make sure we handle unicode correctly
redis_client.redis_store.decode_responses = True redis_client.redis_store.decode_responses = True
+11 -3
View File
@@ -10,7 +10,7 @@ if os.environ.get('VCAP_APPLICATION'):
class Config(object): class Config(object):
ADMIN_CLIENT_SECRET = os.environ.get('ADMIN_CLIENT_SECRET') ADMIN_CLIENT_SECRET = os.environ.get('ADMIN_CLIENT_SECRET')
API_HOST_NAME = os.environ.get('API_HOST_NAME') API_HOST_NAME = os.environ.get('API_HOST_NAME', 'https://notifications-api.app.cloud.gov')
SECRET_KEY = os.environ.get('SECRET_KEY') SECRET_KEY = os.environ.get('SECRET_KEY')
DANGEROUS_SALT = os.environ.get('DANGEROUS_SALT') DANGEROUS_SALT = os.environ.get('DANGEROUS_SALT')
ZENDESK_API_KEY = os.environ.get('ZENDESK_API_KEY') ZENDESK_API_KEY = os.environ.get('ZENDESK_API_KEY')
@@ -62,13 +62,17 @@ class Config(object):
LOGO_UPLOAD_BUCKET_NAME = 'public-logos-local' LOGO_UPLOAD_BUCKET_NAME = 'public-logos-local'
MOU_BUCKET_NAME = 'local-mou' MOU_BUCKET_NAME = 'local-mou'
TRANSIENT_UPLOADED_LETTERS = 'local-transient-uploaded-letters' TRANSIENT_UPLOADED_LETTERS = 'local-transient-uploaded-letters'
ROUTE_SECRET_KEY_1 = os.environ.get('ROUTE_SECRET_KEY_1', '') ROUTE_SECRET_KEY_1 = os.environ.get('ROUTE_SECRET_KEY_1', 'dev-route-secret-key-1')
ROUTE_SECRET_KEY_2 = os.environ.get('ROUTE_SECRET_KEY_2', '') ROUTE_SECRET_KEY_2 = os.environ.get('ROUTE_SECRET_KEY_2', 'dev-route-secret-key-2')
CHECK_PROXY_HEADER = False CHECK_PROXY_HEADER = False
ANTIVIRUS_ENABLED = True ANTIVIRUS_ENABLED = True
REDIS_URL = os.environ.get('REDIS_URL') REDIS_URL = os.environ.get('REDIS_URL')
REDIS_ENABLED = True REDIS_ENABLED = True
BASIC_AUTH_USERNAME = os.environ.get('BASIC_AUTH_USERNAME')
BASIC_AUTH_PASSWORD = os.environ.get('BASIC_AUTH_PASSWORD')
BASIC_AUTH_FORCE = True
ASSET_DOMAIN = '' ASSET_DOMAIN = ''
ASSET_PATH = '/static/' ASSET_PATH = '/static/'
@@ -93,6 +97,7 @@ class Config(object):
class Development(Config): class Development(Config):
BASIC_AUTH_FORCE = True
NOTIFY_LOG_PATH = 'application.log' NOTIFY_LOG_PATH = 'application.log'
DEBUG = True DEBUG = True
SESSION_COOKIE_SECURE = False SESSION_COOKIE_SECURE = False
@@ -143,6 +148,7 @@ class Test(Development):
class Preview(Config): class Preview(Config):
BASIC_AUTH_FORCE = True
HTTP_PROTOCOL = 'https' HTTP_PROTOCOL = 'https'
HEADER_COLOUR = '#F499BE' # $baby-pink HEADER_COLOUR = '#F499BE' # $baby-pink
CSV_UPLOAD_BUCKET_NAME = 'preview-notifications-csv-upload' CSV_UPLOAD_BUCKET_NAME = 'preview-notifications-csv-upload'
@@ -162,6 +168,7 @@ class Preview(Config):
class Staging(Config): class Staging(Config):
BASIC_AUTH_FORCE = True
HTTP_PROTOCOL = 'https' HTTP_PROTOCOL = 'https'
HEADER_COLOUR = '#6F72AF' # $mauve HEADER_COLOUR = '#6F72AF' # $mauve
CSV_UPLOAD_BUCKET_NAME = 'staging-notifications-csv-upload' CSV_UPLOAD_BUCKET_NAME = 'staging-notifications-csv-upload'
@@ -178,6 +185,7 @@ class Staging(Config):
class Live(Config): class Live(Config):
BASIC_AUTH_FORCE = True
HEADER_COLOUR = '#005EA5' # $govuk-blue HEADER_COLOUR = '#005EA5' # $govuk-blue
HTTP_PROTOCOL = 'https' HTTP_PROTOCOL = 'https'
CSV_UPLOAD_BUCKET_NAME = 'notifications.prototype.csv_upload' CSV_UPLOAD_BUCKET_NAME = 'notifications.prototype.csv_upload'
+1 -1
View File
@@ -30,7 +30,7 @@ def index():
return render_template( return render_template(
'views/signedout.html', 'views/signedout.html',
sms_rate=CURRENT_SMS_RATE, sms_rate=CURRENT_SMS_RATE,
counts=status_api_client.get_count_of_live_services_and_organisations(), counts=status_api_client.get_count_of_live_services_and_organisations()
) )
+3 -2
View File
@@ -13,7 +13,8 @@
}, },
"python.linting.enabled": true, "python.linting.enabled": true,
"python.linting.pylintEnabled": true, "python.linting.pylintEnabled": true,
"python.pythonPath": "/usr/local/bin/python" "python.pythonPath": "/usr/local/bin/python",
"python.linting.pylintPath": "/usr/local/share/pip-global/bin/pylint"
}, },
"features": { "features": {
"docker-from-docker": { "docker-from-docker": {
@@ -22,7 +23,7 @@
} }
}, },
"extensions": [ "extensions": [
"ms-python.black-formatter", "ms-python.python", // "ms-python.black-formatter"
"donjayamanne.python-extension-pack", "donjayamanne.python-extension-pack",
"ms-azuretools.vscode-docker", "ms-azuretools.vscode-docker",
"ms-python.vscode-pylance", "ms-python.vscode-pylance",
+1
View File
@@ -28,6 +28,7 @@ RUN apt-get update \
tldr \ tldr \
unzip \ unzip \
vim \ vim \
apache2-utils \
&& apt-get autoremove -y \ && apt-get autoremove -y \
&& apt-get clean -y \ && apt-get clean -y \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
@@ -7,6 +7,8 @@ set -ex
# tools and the filesystem mount enabled should be located here. # tools and the filesystem mount enabled should be located here.
################################################################### ###################################################################
echo "RUNNING ENTRYPOINT SCRIPT"
# Define aliases # Define aliases
echo -e "\n\n# User's Aliases" >> ~/.zshrc echo -e "\n\n# User's Aliases" >> ~/.zshrc
echo -e "alias fd=fdfind" >> ~/.zshrc echo -e "alias fd=fdfind" >> ~/.zshrc
@@ -33,4 +35,6 @@ make generate-version-file
npm run build npm run build
# run flask # run flask
# make run # make run
echo "FINISHED ENTRYPOINT SCRIPT"
-2
View File
@@ -29,8 +29,6 @@ applications:
API_HOST_NAME: notifications-api.app.cloud.gov API_HOST_NAME: notifications-api.app.cloud.gov
DANGEROUS_SALT: ((DANGEROUS_SALT)) DANGEROUS_SALT: ((DANGEROUS_SALT))
SECRET_KEY: ((SECRET_KEY)) SECRET_KEY: ((SECRET_KEY))
ROUTE_SECRET_KEY_1: ((ROUTE_SECRET_KEY_1))
ROUTE_SECRET_KEY_2: ((ROUTE_SECRET_KEY_2))
AWS_REGION: us-west-2 AWS_REGION: us-west-2
AWS_ACCESS_KEY_ID: ((AWS_ACCESS_KEY_ID)) AWS_ACCESS_KEY_ID: ((AWS_ACCESS_KEY_ID))
+1
View File
@@ -10,6 +10,7 @@ wtforms==3.0.1
Flask-Login==0.6.1 Flask-Login==0.6.1
Werkzeug==2.1.2 Werkzeug==2.1.2
jinja2==3.1.2 jinja2==3.1.2
Flask-BasicAuth==0.2.0
blinker==1.4 blinker==1.4
pyexcel==0.7.0 pyexcel==0.7.0
+2
View File
@@ -71,6 +71,8 @@ flask-redis==0.4.0
# via notifications-utils # via notifications-utils
flask-wtf==1.0.1 flask-wtf==1.0.1
# via -r requirements.in # via -r requirements.in
Flask-BasicAuth==0.2.0
# via -r requirements.in
gds-metrics @ git+https://github.com/alphagov/gds_metrics_python.git@6f1840a57b6fb1ee40b7e84f2f18ec229de8aa72 gds-metrics @ git+https://github.com/alphagov/gds_metrics_python.git@6f1840a57b6fb1ee40b7e84f2f18ec229de8aa72
# via -r requirements.in # via -r requirements.in
geojson==2.5.0 geojson==2.5.0
+2
View File
@@ -5,3 +5,5 @@ ROUTE_SECRET_KEY_1: asdf
ROUTE_SECRET_KEY_2: asdf ROUTE_SECRET_KEY_2: asdf
AWS_ACCESS_KEY_ID: asdf AWS_ACCESS_KEY_ID: asdf
AWS_SECRET_ACCESS_KEY: asdf AWS_SECRET_ACCESS_KEY: asdf
BASIC_AUTH_USERNAME: asdf
BASIC_AUTH_PASSWORD: asdf