fix: Empty environment variables should not trigger validations

Add deprecation notice for SLACK_KEY, SLACK_SECRET
closes #3578
This commit is contained in:
Tom Moor
2022-05-23 21:37:27 +01:00
parent 51249fd6f7
commit ef5e3f0b29

View File

@@ -79,7 +79,9 @@ export class Environment {
allow_underscores: true,
protocols: ["postgres"],
})
public DATABASE_CONNECTION_POOL_URL = `${process.env.DATABASE_CONNECTION_POOL_URL}`;
public DATABASE_CONNECTION_POOL_URL = this.toOptionalString(
process.env.DATABASE_CONNECTION_POOL_URL
);
/**
* Database connection pool configuration.
@@ -136,7 +138,7 @@ export class Environment {
*/
@IsOptional()
@IsUrl()
public CDN_URL = process.env.CDN_URL;
public CDN_URL = this.toOptionalString(process.env.CDN_URL);
/**
* The fully qualified, external facing domain name of the collaboration
@@ -144,7 +146,9 @@ export class Environment {
*/
@IsUrl({ require_tld: false, protocols: ["http", "https", "ws", "wss"] })
@IsOptional()
public COLLABORATION_URL = process.env.COLLABORATION_URL;
public COLLABORATION_URL = this.toOptionalString(
process.env.COLLABORATION_URL
);
/**
* The port that the server will listen on, defaults to 3000.
@@ -171,21 +175,21 @@ export class Environment {
*/
@IsOptional()
@CannotUseWithout("SSL_CERT")
public SSL_KEY = process.env.SSL_KEY;
public SSL_KEY = this.toOptionalString(process.env.SSL_KEY);
/**
* Base64 encoded public certificate if Outline is to perform SSL termination.
*/
@IsOptional()
@CannotUseWithout("SSL_KEY")
public SSL_CERT = process.env.SSL_CERT;
public SSL_CERT = this.toOptionalString(process.env.SSL_CERT);
/**
* Should always be left unset in a self-hosted environment.
*/
@Equals("hosted")
@IsOptional()
public DEPLOYMENT = process.env.DEPLOYMENT;
public DEPLOYMENT = this.toOptionalString(process.env.DEPLOYMENT);
/**
* Custom company logo that displays on the authentication screen.
@@ -276,7 +280,7 @@ export class Environment {
*/
@IsEmail({ allow_display_name: true, allow_ip_domain: true })
@IsOptional()
public SMTP_FROM_EMAIL = process.env.SMTP_FROM_EMAIL;
public SMTP_FROM_EMAIL = this.toOptionalString(process.env.SMTP_FROM_EMAIL);
/**
* The reply-to address for emails sent from Outline. If unset the from
@@ -284,12 +288,12 @@ export class Environment {
*/
@IsEmail({ allow_display_name: true, allow_ip_domain: true })
@IsOptional()
public SMTP_REPLY_EMAIL = process.env.SMTP_REPLY_EMAIL;
public SMTP_REPLY_EMAIL = this.toOptionalString(process.env.SMTP_REPLY_EMAIL);
/**
* Override the cipher used for SMTP SSL connections.
*/
public SMTP_TLS_CIPHERS = process.env.SMTP_TLS_CIPHERS;
public SMTP_TLS_CIPHERS = this.toOptionalString(process.env.SMTP_TLS_CIPHERS);
/**
* If true (the default) the connection will use TLS when connecting to server.
@@ -305,12 +309,12 @@ export class Environment {
*/
@IsUrl()
@IsOptional()
public SENTRY_DSN = process.env.SENTRY_DSN;
public SENTRY_DSN = this.toOptionalString(process.env.SENTRY_DSN);
/**
* A release SHA or other identifier for Sentry.
*/
public RELEASE = process.env.RELEASE;
public RELEASE = this.toOptionalString(process.env.RELEASE);
/**
* An optional host from which to load default avatars.
@@ -324,7 +328,9 @@ export class Environment {
*/
@Contains("UA-")
@IsOptional()
public GOOGLE_ANALYTICS_ID = process.env.GOOGLE_ANALYTICS_ID;
public GOOGLE_ANALYTICS_ID = this.toOptionalString(
process.env.GOOGLE_ANALYTICS_ID
);
/**
* A DataDog API key for tracking server metrics.
@@ -336,37 +342,52 @@ export class Environment {
*/
@IsOptional()
@CannotUseWithout("GOOGLE_CLIENT_SECRET")
public GOOGLE_CLIENT_ID = process.env.GOOGLE_CLIENT_ID;
public GOOGLE_CLIENT_ID = this.toOptionalString(process.env.GOOGLE_CLIENT_ID);
@IsOptional()
@CannotUseWithout("GOOGLE_CLIENT_ID")
public GOOGLE_CLIENT_SECRET = process.env.GOOGLE_CLIENT_SECRET;
public GOOGLE_CLIENT_SECRET = this.toOptionalString(
process.env.GOOGLE_CLIENT_SECRET
);
/**
* Slack OAuth2 client credentials. To enable authentication with Slack.
*/
@IsOptional()
@Deprecated("Use SLACK_CLIENT_SECRET instead")
public SLACK_SECRET = this.toOptionalString(process.env.SLACK_SECRET);
@IsOptional()
@Deprecated("Use SLACK_CLIENT_ID instead")
public SLACK_KEY = this.toOptionalString(process.env.SLACK_KEY);
@IsOptional()
@CannotUseWithout("SLACK_CLIENT_SECRET")
public SLACK_CLIENT_ID = process.env.SLACK_CLIENT_ID ?? process.env.SLACK_KEY;
public SLACK_CLIENT_ID = this.toOptionalString(
process.env.SLACK_CLIENT_ID ?? process.env.SLACK_KEY
);
@IsOptional()
@CannotUseWithout("SLACK_CLIENT_ID")
public SLACK_CLIENT_SECRET =
process.env.SLACK_CLIENT_SECRET ?? process.env.SLACK_SECRET;
public SLACK_CLIENT_SECRET = this.toOptionalString(
process.env.SLACK_CLIENT_SECRET ?? process.env.SLACK_SECRET
);
/**
* This is injected into the HTML page headers for Slack.
*/
@IsOptional()
@CannotUseWithout("SLACK_CLIENT_ID")
public SLACK_VERIFICATION_TOKEN = process.env.SLACK_VERIFICATION_TOKEN;
public SLACK_VERIFICATION_TOKEN = this.toOptionalString(
process.env.SLACK_VERIFICATION_TOKEN
);
/**
* This is injected into the slack-app-id header meta tag if provided.
*/
@IsOptional()
@CannotUseWithout("SLACK_CLIENT_ID")
public SLACK_APP_ID = process.env.SLACK_APP_ID;
public SLACK_APP_ID = this.toOptionalString(process.env.SLACK_APP_ID);
/**
* If enabled a "Post to Channel" button will be added to search result
@@ -383,15 +404,19 @@ export class Environment {
*/
@IsOptional()
@CannotUseWithout("AZURE_CLIENT_SECRET")
public AZURE_CLIENT_ID = process.env.AZURE_CLIENT_ID;
public AZURE_CLIENT_ID = this.toOptionalString(process.env.AZURE_CLIENT_ID);
@IsOptional()
@CannotUseWithout("AZURE_CLIENT_ID")
public AZURE_CLIENT_SECRET = process.env.AZURE_CLIENT_SECRET;
public AZURE_CLIENT_SECRET = this.toOptionalString(
process.env.AZURE_CLIENT_SECRET
);
@IsOptional()
@CannotUseWithout("AZURE_CLIENT_ID")
public AZURE_RESOURCE_APP_ID = process.env.AZURE_RESOURCE_APP_ID;
public AZURE_RESOURCE_APP_ID = this.toOptionalString(
process.env.AZURE_RESOURCE_APP_ID
);
/**
* OICD client credentials. To enable authentication with any
@@ -403,11 +428,13 @@ export class Environment {
@CannotUseWithout("OIDC_TOKEN_URI")
@CannotUseWithout("OIDC_USERINFO_URI")
@CannotUseWithout("OIDC_DISPLAY_NAME")
public OIDC_CLIENT_ID = process.env.OIDC_CLIENT_ID;
public OIDC_CLIENT_ID = this.toOptionalString(process.env.OIDC_CLIENT_ID);
@IsOptional()
@CannotUseWithout("OIDC_CLIENT_ID")
public OIDC_CLIENT_SECRET = process.env.OIDC_CLIENT_SECRET;
public OIDC_CLIENT_SECRET = this.toOptionalString(
process.env.OIDC_CLIENT_SECRET
);
/**
* The name of the OIDC provider, eg "GitLab" this will be displayed on the
@@ -422,21 +449,23 @@ export class Environment {
*/
@IsOptional()
@IsUrl()
public OIDC_AUTH_URI = process.env.OIDC_AUTH_URI;
public OIDC_AUTH_URI = this.toOptionalString(process.env.OIDC_AUTH_URI);
/**
* The OIDC token endpoint.
*/
@IsOptional()
@IsUrl()
public OIDC_TOKEN_URI = process.env.OIDC_TOKEN_URI;
public OIDC_TOKEN_URI = this.toOptionalString(process.env.OIDC_TOKEN_URI);
/**
* The OIDC userinfo endpoint.
*/
@IsOptional()
@IsUrl()
public OIDC_USERINFO_URI = process.env.OIDC_USERINFO_URI;
public OIDC_USERINFO_URI = this.toOptionalString(
process.env.OIDC_USERINFO_URI
);
/**
* The OIDC profile field to use as the username. The default value is
@@ -451,6 +480,10 @@ export class Environment {
*/
public OIDC_SCOPES = process.env.OIDC_SCOPES ?? "openid profile email";
private toOptionalString(value: string | undefined) {
return value ? value : undefined;
}
private toOptionalNumber(value: string | undefined) {
return value ? parseInt(value, 10) : undefined;
}