Skip to content

Commit f2d4b24

Browse files
committed
🇺🇦 #StandWithUkraine Add environment variable validation
1 parent 1b7087a commit f2d4b24

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

config/index.ts

+25-2
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@ export const ENV = process.env.NODE_ENV!;
33
export const PORT = process.env.PORT!;
44
export const HOST = process.env.HOST!;
55
export const NEXTAUTH_URL = process.env.NEXTAUTH_URL!;
6-
export const AUTH_PROVIDER = process.env.AUTH_PROVIDER!;
76
export const SLACK_TOGETHER_APP_TOKEN = process.env.SLACK_TOGETHER_APP_TOKEN!;
87
export const SLACK_TOGETHER_APP_SIGNING_SECRET = process.env.SLACK_TOGETHER_APP_SIGNING_SECRET!;
98
export const SLACK_MONITORING_CHANNEL_ID = process.env.SLACK_MONITORING_CHANNEL_ID!;
109
export const SLACK_ORGANIZATION_CHANNEL_ID = process.env.SLACK_ORGANIZATION_CHANNEL_ID!;
1110
export const TOGETHER_ADMINISTRATOR_SLACK_USER_ID = process.env.TOGETHER_ADMINISTRATOR_SLACK_USER_ID!;
12-
export const SLACK_WORKSPACE_ID = process.env.SLACK_TEAM_ID!;
11+
export const SLACK_WORKSPACE_ID = process.env.SLACK_WORKSPACE_ID!;
1312
export const GOOGLE_GEOCODING_API_TOKEN = process.env.GOOGLE_GEOCODING_API_TOKEN!;
1413
export const GOOGLE_PLACES_API_TOKEN = process.env.GOOGLE_PLACES_API_TOKEN!;
1514
export const ALLOWED_REFERRER_ID = process.env.ALLOWED_REFERRER_ID!;
@@ -18,3 +17,27 @@ export const OKTA_CLIENT_SECRET = process.env.OKTA_CLIENT_SECRET!;
1817
export const OKTA_ISSUER = process.env.OKTA_ISSUER!;
1918
export const MAPBOX_MAP_TOKEN = process.env.MAPBOX_MAP_TOKEN!;
2019
export const JOBS_API_TOKEN = process.env.JOBS_API_TOKEN!;
20+
21+
import { MissingEnvironmentVariableError } from '../exceptions';
22+
23+
const validateEnvVariable = (variable: string, name: string): void | never => {
24+
if (!variable) {
25+
throw new MissingEnvironmentVariableError(name);
26+
}
27+
};
28+
29+
validateEnvVariable(ENV, 'ENV');
30+
validateEnvVariable(HOST, 'HOST');
31+
validateEnvVariable(NEXTAUTH_URL, 'NEXTAUTH_URL');
32+
validateEnvVariable(SLACK_TOGETHER_APP_TOKEN, 'SLACK_TOGETHER_APP_TOKEN');
33+
validateEnvVariable(SLACK_TOGETHER_APP_SIGNING_SECRET, 'SLACK_TOGETHER_APP_SIGNING_SECRET');
34+
validateEnvVariable(SLACK_MONITORING_CHANNEL_ID, 'SLACK_MONITORING_CHANNEL_ID');
35+
validateEnvVariable(SLACK_ORGANIZATION_CHANNEL_ID, 'SLACK_ORGANIZATION_CHANNEL_ID');
36+
validateEnvVariable(TOGETHER_ADMINISTRATOR_SLACK_USER_ID, 'TOGETHER_ADMINISTRATOR_SLACK_USER_ID');
37+
validateEnvVariable(SLACK_WORKSPACE_ID, 'SLACK_WORKSPACE_ID');
38+
validateEnvVariable(GOOGLE_GEOCODING_API_TOKEN, 'GOOGLE_GEOCODING_API_TOKEN');
39+
validateEnvVariable(GOOGLE_PLACES_API_TOKEN, 'GOOGLE_PLACES_API_TOKEN');
40+
validateEnvVariable(ALLOWED_REFERRER_ID, 'ALLOWED_REFERRER_ID');
41+
validateEnvVariable(MAPBOX_MAP_TOKEN, 'JOBS_API_TOKEN');
42+
validateEnvVariable(process.env.DATABASE_URL!, 'DATABASE_URL');
43+
validateEnvVariable(process.env.NEXTAUTH_SECRET!, 'NEXTAUTH_SECRET');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { ApplicationError } from './ApplicationError';
2+
3+
export class MissingEnvironmentVariableError extends ApplicationError {
4+
constructor(name: string) {
5+
super({
6+
status: 500,
7+
code: null,
8+
data: null,
9+
message: `The environment variable ${name} is missing and is required for Together App to function correctly.`,
10+
});
11+
}
12+
}

exceptions/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ export * from './InvalidSlackRequestError';
99
export * from './LocationProviderError';
1010
export * from './MemberCannotRepeatCheckInError';
1111
export * from './MemberNotFoundError';
12+
export * from './MissingEnvironmentVariableError';
1213
export * from './NoLocationParamsProvidedError';
1314
export * from './SlackMemberProviderError';

0 commit comments

Comments
 (0)