Skip to content

Commit 4e8c8e1

Browse files
authored
feat: add environment configuration validation changes (#782)
* feat: add environment configuration validation changes * fix: adding nock mock for JWKS * fix: docker compose variables for running the container * fix: curl for health check * chore: vulnerability fixes
1 parent 1a76173 commit 4e8c8e1

8 files changed

Lines changed: 372 additions & 91 deletions

File tree

.env.example

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Application
2+
NODE_ENV=development
3+
HOST=0.0.0.0
4+
PORT=3001
5+
SERVICE_VERSION=
6+
7+
# Logging
8+
LOG_ENABLED=true
9+
LOG_LEVEL=info
10+
LOG_FORMAT=pino-pretty
11+
12+
# MongoDB
13+
MONGO_URI=mongodb://localhost:27017/
14+
MONGO_DATABASE=forms-manager
15+
16+
# Proxies (leave blank if not required)
17+
HTTP_PROXY=
18+
CDP_HTTPS_PROXY=
19+
20+
# Feature flags
21+
ENABLE_SECURE_CONTEXT=false
22+
ENABLE_METRICS=false
23+
FEATURE_FLAG_PUBLISH_AUDIT_EVENTS=false
24+
FEATURE_FLAG_USE_ENTITLEMENT_API=false
25+
26+
# Tracing
27+
TRACING_HEADER=x-cdp-request-id
28+
29+
# AWS
30+
AWS_REGION=eu-west-2
31+
AWS_ACCESS_KEY_ID=
32+
AWS_SECRET_ACCESS_KEY=
33+
34+
# S3
35+
FORM_DEF_BUCKET_NAME=
36+
S3_ENDPOINT=
37+
S3_FORCE_PATH_STYLE=false
38+
39+
# SNS
40+
SNS_ENDPOINT=
41+
SNS_TOPIC_ARN=
42+
43+
# OIDC / JWT authentication
44+
# These values can be found in your Azure AD / OIDC provider configuration.
45+
OIDC_JWKS_URI=
46+
OIDC_VERIFY_AUD=
47+
OIDC_VERIFY_ISS=
48+
ROLE_EDITOR_GROUP_ID=
49+
50+
# Entitlements
51+
ENTITLEMENT_URL=http://localhost:3004
52+
53+
# Encryption
54+
# Base64-encoded RSA public key used to encrypt secrets.
55+
PUBLIC_KEY_FOR_SECRETS=

docker-compose.integration-test.yml

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ services:
7575
test:
7676
[
7777
'CMD-SHELL',
78-
'wget -q --spider http://localhost:80/.well-known/openid-configuration || exit 1'
78+
'curl -fsS http://localhost:80/.well-known/openid-configuration >/dev/null || exit 1'
7979
]
8080
interval: 10s
8181
timeout: 10s
@@ -91,27 +91,42 @@ services:
9191
ports:
9292
- '3001:3001'
9393
environment:
94+
HOST: 0.0.0.0
9495
MONGO_URI: mongodb://mongo_test:27017/forms-manager-test?replicaSet=rs0&directConnection=true
96+
MONGO_DATABASE: forms-manager-test
9597
PORT: 3001
9698
NODE_ENV: production
99+
SERVICE_VERSION: integration-test
100+
LOG_ENABLED: true
101+
LOG_LEVEL: info
102+
LOG_FORMAT: ecs
103+
HTTP_PROXY: ''
104+
CDP_HTTPS_PROXY: ''
105+
ENABLE_SECURE_CONTEXT: true
106+
ENABLE_METRICS: true
97107
OIDC_JWKS_URI: 'http://oidc:80/.well-known/openid-configuration/jwks'
98108
OIDC_VERIFY_AUD: 'newman-test-client'
99109
OIDC_VERIFY_ISS: 'http://oidc:80'
100110
ROLE_EDITOR_GROUP_ID: '7049296f-2156-4d61-8ac3-349276438ef9'
111+
TRACING_HEADER: x-cdp-request-id
112+
AWS_REGION: eu-west-2
113+
FEATURE_FLAG_PUBLISH_AUDIT_EVENTS: false
101114
FORM_DEF_BUCKET_NAME: form-definition-storage
102115
S3_FORCE_PATH_STYLE: true
103116
S3_ENDPOINT: http://localstack:4566
104117
SNS_ENDPOINT: http://localstack:4566
105118
SNS_TOPIC_ARN: arn:aws:sns:eu-west-2:000000000000:forms_manager_events
106119
AWS_ACCESS_KEY_ID: test
107120
AWS_SECRET_ACCESS_KEY: test
121+
ENTITLEMENT_URL: http://localhost:3004
122+
FEATURE_FLAG_USE_ENTITLEMENT_API: false
108123
# PUBLIC_KEY is a test value - do not use for any deployments
109-
PUBLIC_KEY_FOR_SECRETS: "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUE0WU53YUJjenlBdWpJZ2k2aTBmawpINUVYeGxtTmNBd1AzUkpRaDB2ckxjeDIxU2RCSkFOUU5JWmdTcWhST3ViUlozWTJWQ2Zsbkd3cFVSTTNrY0tFCkNHUlk2Nk5leVUwL3QzS2hVOUY1cG1heVBSVUFiWkRjalFCL0xYbVNGUUdGelZDQlp0ZjBIeHJiSnBUNDFiSGIKR05udFpDdm94WjZQOUJxdU4wa2c0Y1JXcTdyWUozVE1xWXArc1RzQU01UFZwMVh6WklIRFJ2UVJ2bktnMDVUUQovRFA1cXcvYkdwelVsQ01WVU9MTHhxL2xTY040RnhDRTRUUi9kSWNNM25wTU1PUUVjaEhLcEE2SWs3UmhmQml0CjZBSEpINWN2c0dWUTFHUmlvUXBIWXBWclZLRFV5ZmIrS3VzbjlWUTVTQ3JGZDJ3WWRaRzBkdVNOZFp3VklJQm8KVElWZjlrSUMrZjl5YTVLMmcvalJhMXUyVGdNc3UvZnM4UWVRZHk2disxNkFtWFA1cXNXYUtFK00zRkJoRitrZAozbS91YjNJVFRRVmplYWY1M2ZsTVlMZlZmN2NVR2FQN0VIajlUY0dGYVlGTzhuWGNWbS9lT2lkMXBGL3p5NCtzCnpFZG5oOFNRYm5ncElwdFJiMk51Wmw5RWZNR01CTFlyQ3FiWnMyYU1KV0N5M1FGWFZDeTYzUzZhRDkrbzQ1N0cKUDNGVnNZY2d2eHAzTGVTQ0phUHMzL0FlSjh1MUFSeHZwMG02ZjdPLy9yMFFQYzJnd2RyZjRVMUkwdlduclh2eApCc2RMWU5NMXVYVjhMKzExYloxeGpVaFU4QldTd3dnTTdQMGxqVTJ4UE9WbG55MlFGeXh0ZTgzK0E5SXNBcmFxCmthNlhEdDhYZkNZYm84dEpnem9mbEs4Q0F3RUFBUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ=="
124+
PUBLIC_KEY_FOR_SECRETS: 'LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUE0WU53YUJjenlBdWpJZ2k2aTBmawpINUVYeGxtTmNBd1AzUkpRaDB2ckxjeDIxU2RCSkFOUU5JWmdTcWhST3ViUlozWTJWQ2Zsbkd3cFVSTTNrY0tFCkNHUlk2Nk5leVUwL3QzS2hVOUY1cG1heVBSVUFiWkRjalFCL0xYbVNGUUdGelZDQlp0ZjBIeHJiSnBUNDFiSGIKR05udFpDdm94WjZQOUJxdU4wa2c0Y1JXcTdyWUozVE1xWXArc1RzQU01UFZwMVh6WklIRFJ2UVJ2bktnMDVUUQovRFA1cXcvYkdwelVsQ01WVU9MTHhxL2xTY040RnhDRTRUUi9kSWNNM25wTU1PUUVjaEhLcEE2SWs3UmhmQml0CjZBSEpINWN2c0dWUTFHUmlvUXBIWXBWclZLRFV5ZmIrS3VzbjlWUTVTQ3JGZDJ3WWRaRzBkdVNOZFp3VklJQm8KVElWZjlrSUMrZjl5YTVLMmcvalJhMXUyVGdNc3UvZnM4UWVRZHk2disxNkFtWFA1cXNXYUtFK00zRkJoRitrZAozbS91YjNJVFRRVmplYWY1M2ZsTVlMZlZmN2NVR2FQN0VIajlUY0dGYVlGTzhuWGNWbS9lT2lkMXBGL3p5NCtzCnpFZG5oOFNRYm5ncElwdFJiMk51Wmw5RWZNR01CTFlyQ3FiWnMyYU1KV0N5M1FGWFZDeTYzUzZhRDkrbzQ1N0cKUDNGVnNZY2d2eHAzTGVTQ0phUHMzL0FlSjh1MUFSeHZwMG02ZjdPLy9yMFFQYzJnd2RyZjRVMUkwdlduclh2eApCc2RMWU5NMXVYVjhMKzExYloxeGpVaFU4QldTd3dnTTdQMGxqVTJ4UE9WbG55MlFGeXh0ZTgzK0E5SXNBcmFxCmthNlhEdDhYZkNZYm84dEpnem9mbEs4Q0F3RUFBUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ=='
110125
depends_on:
111126
mongo_test:
112127
condition: service_healthy
113128
oidc:
114-
condition: service_started
129+
condition: service_healthy
115130
localstack:
116131
condition: service_healthy
117132
command: ['npm', 'start', '--ignore-scripts']

jest.config.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ module.exports = {
2525
modulePathIgnorePatterns: ['<rootDir>/coverage/', '<rootDir>/.server/'],
2626
coverageDirectory: '<rootDir>/coverage',
2727
setupFiles: ['<rootDir>/jest.setup.js'],
28+
setupFilesAfterEnv: ['<rootDir>/jest.setup.after-env.js'],
2829
transform: {
2930
'^.+\\.(cjs|js|mjs)$': [
3031
'babel-jest',

jest.setup.after-env.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import nock from 'nock'
2+
3+
const jwksUri = process.env.OIDC_JWKS_URI
4+
const okStatusCode = 200
5+
6+
const testJwks = {
7+
keys: [
8+
{
9+
kty: 'RSA',
10+
use: 'sig',
11+
kid: 'test-jwks-key',
12+
alg: 'RS256',
13+
n: 'test-key-modulus',
14+
e: 'AQAB'
15+
}
16+
]
17+
}
18+
19+
if (jwksUri) {
20+
const { origin, pathname, search } = new URL(jwksUri)
21+
22+
nock.cleanAll()
23+
24+
nock(origin)
25+
.persist()
26+
.get(`${pathname}${search}`)
27+
.reply(okStatusCode, testJwks)
28+
}

jest.setup.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
process.env.NODE_ENV = 'test'
2+
process.env.HOST = '0.0.0.0'
3+
process.env.PORT = '3001'
4+
process.env.SERVICE_VERSION = 'test'
5+
6+
process.env.LOG_ENABLED = 'false'
7+
process.env.LOG_LEVEL = 'debug'
8+
process.env.LOG_FORMAT = 'pino-pretty'
9+
10+
process.env.MONGO_URI =
11+
'mongodb://localhost:27017/?replicaSet=rs0&directConnection=true&readPreference=secondaryPreferred'
12+
process.env.MONGO_DATABASE = 'forms-manager'
13+
14+
process.env.HTTP_PROXY = ''
15+
process.env.CDP_HTTPS_PROXY = ''
16+
17+
process.env.ENABLE_SECURE_CONTEXT = 'false'
18+
process.env.ENABLE_METRICS = 'false'
19+
process.env.TRACING_HEADER = 'x-cdp-request-id'
20+
21+
process.env.OIDC_JWKS_URI =
22+
'http://localhost:5556/.well-known/openid-configuration/jwks'
23+
process.env.OIDC_VERIFY_AUD = 'local-test-client'
24+
process.env.OIDC_VERIFY_ISS = 'http://oidc:80'
25+
process.env.ROLE_EDITOR_GROUP_ID = '5b8a0214-74d3-4bf0-b665-102511c967b2'
26+
27+
process.env.AWS_REGION = 'eu-west-2'
28+
process.env.SNS_ENDPOINT = 'http://localhost:4566'
29+
process.env.SNS_TOPIC_ARN =
30+
'arn:aws:sns:eu-west-2:000000000000:forms_manager_events'
31+
process.env.FEATURE_FLAG_PUBLISH_AUDIT_EVENTS = 'false'
32+
33+
process.env.S3_ENDPOINT = 'http://localhost:4566'
34+
process.env.FORM_DEF_BUCKET_NAME = 'form-definition-storage'
35+
36+
process.env.ENTITLEMENT_URL = 'http://localhost:3004'
37+
process.env.FEATURE_FLAG_USE_ENTITLEMENT_API = 'false'
38+
39+
process.env.PUBLIC_KEY_FOR_SECRETS = 'test-public-key'

0 commit comments

Comments
 (0)