Skip to content

Commit 041bcab

Browse files
authored
fix(refactor): simplify environment variables (#1897)
1 parent 9689aa7 commit 041bcab

17 files changed

Lines changed: 59 additions & 203 deletions

File tree

.devcontainer/docker-compose.yml

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,10 @@ services:
3232
# Api key is set by ./etherpad/devApiKey.txt
3333
ETHERPAD_API_KEY: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
3434
# the Redis config is set by the "redis" service below
35-
REDIS_HOST: redis
36-
REDIS_PORT: 6379
37-
# the Mailer config is set by the "mailer" service below
38-
MAILER_CONFIG_SMTP_HOST: mailer
39-
MAILER_CONFIG_SMTP_PORT: 1025
40-
MAILER_CONFIG_SMTP_USE_SSL: 'false' # only for dev purposes
41-
MAILER_CONFIG_USERNAME: docker
42-
MAILER_CONFIG_PASSWORD: docker
35+
REDIS_CONNECTION: redis://redis:6379
36+
37+
# the Mailer config is set by the "mailer" service below
38+
MAILER_CONNECTION: smtp://docker:docker@mailer:1025
4339
# the Localstack config is set by the "localstack" service below
4440
S3_FILE_ITEM_HOST: http://localstack:4566
4541
# the Iframely config is set by the "iframely" service below

.github/workflows/deploy-prod.yml

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,7 @@ jobs:
9797
environment-variables: |
9898
DB_CONNECTION_POOL_SIZE=${{ vars.DB_CONNECTION_POOL_SIZE }}
9999
APPS_JWT_SECRET=${{ secrets.APPS_JWT_SECRET }}
100-
APPS_PUBLISHER_ID=${{ secrets.APPS_PUBLISHER_ID }}
101-
AUTH_TOKEN_EXPIRATION_IN_MINUTES=${{ vars.AUTH_TOKEN_EXPIRATION_IN_MINUTES }}
100+
APPS_PUBLISHER_ID=${{ secrets.APPS_PUBLISHER_ID }}
102101
AUTH_TOKEN_JWT_SECRET=${{ secrets.AUTH_TOKEN_JWT_SECRET }}
103102
CLIENT_HOST=${{ vars.CLIENT_HOST }}
104103
COOKIE_DOMAIN=${{ vars.COOKIE_DOMAIN }}
@@ -126,21 +125,15 @@ jobs:
126125
LIBRARY_CLIENT_HOST=${{ vars.LIBRARY_CLIENT_HOST }}
127126
LOG_LEVEL=${{ vars.LOG_LEVEL }}
128127
MAILER_CONFIG_FROM_EMAIL=${{ secrets.MAILER_CONFIG_FROM_EMAIL }}
129-
MAILER_CONFIG_PASSWORD=${{ secrets.MAILER_CONFIG_PASSWORD }}
130-
MAILER_CONFIG_SMTP_HOST=${{ secrets.MAILER_CONFIG_SMTP_HOST }}
131-
MAILER_CONFIG_USERNAME=${{ secrets.MAILER_CONFIG_USERNAME }}
128+
MAILER_CONNECTION=${{ secrets.MAILER_CONNECTION }}
132129
MEILISEARCH_MASTER_KEY=${{ secrets.MEILISEARCH_MASTER_KEY }}
133130
MEILISEARCH_REBUILD_SECRET=${{ secrets.MEILISEARCH_REBUILD_SECRET }}
134131
MEILISEARCH_URL=${{ secrets.MEILISEARCH_URL }}
135132
NODE_ENV=${{ vars.NODE_ENV }}
136133
PORT=${{ vars.PORT }}
137134
PUBLIC_URL=${{ secrets.PUBLIC_URL }}
138135
RECAPTCHA_SECRET_ACCESS_KEY=${{ secrets.RECAPTCHA_SECRET_ACCESS_KEY }}
139-
REDIS_HOST=${{ secrets.REDIS_HOST }}
140-
REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}
141-
REDIS_PORT=${{ secrets.REDIS_PORT }}
142-
REDIS_USERNAME=${{ secrets.REDIS_USERNAME }}
143-
REFRESH_TOKEN_EXPIRATION_IN_MINUTES=${{ vars.REFRESH_TOKEN_EXPIRATION_IN_MINUTES }}
136+
REDIS_CONNECTION=${{ secrets.REDIS_CONNECTION }}
144137
REFRESH_TOKEN_JWT_SECRET=${{ secrets.REFRESH_TOKEN_JWT_SECRET }}
145138
S3_FILE_ITEM_ACCESS_KEY_ID=${{ secrets.S3_FILE_ITEM_ACCESS_KEY_ID }}
146139
S3_FILE_ITEM_BUCKET=${{ vars.S3_FILE_ITEM_BUCKET }}

.github/workflows/deploy-stage.yml

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,7 @@ jobs:
9797
environment-variables: |
9898
DB_CONNECTION_POOL_SIZE=${{ vars.DB_CONNECTION_POOL_SIZE }}
9999
APPS_JWT_SECRET=${{ secrets.APPS_JWT_SECRET }}
100-
APPS_PUBLISHER_ID=${{ secrets.APPS_PUBLISHER_ID }}
101-
AUTH_TOKEN_EXPIRATION_IN_MINUTES=${{ secrets.AUTH_TOKEN_EXPIRATION_IN_MINUTES }}
100+
APPS_PUBLISHER_ID=${{ secrets.APPS_PUBLISHER_ID }}
102101
AUTH_TOKEN_JWT_SECRET=${{ secrets.AUTH_TOKEN_JWT_SECRET }}
103102
CLIENT_HOST=${{ vars.CLIENT_HOST }}
104103
COOKIE_DOMAIN=${{ vars.COOKIE_DOMAIN }}
@@ -127,21 +126,15 @@ jobs:
127126
LIBRARY_CLIENT_HOST=${{ vars.LIBRARY_CLIENT_HOST }}
128127
LOG_LEVEL=${{ vars.LOG_LEVEL }}
129128
MAILER_CONFIG_FROM_EMAIL=${{ secrets.MAILER_CONFIG_FROM_EMAIL }}
130-
MAILER_CONFIG_PASSWORD=${{ secrets.MAILER_CONFIG_PASSWORD }}
131-
MAILER_CONFIG_SMTP_HOST=${{ secrets.MAILER_CONFIG_SMTP_HOST }}
132-
MAILER_CONFIG_USERNAME=${{ secrets.MAILER_CONFIG_USERNAME }}
129+
MAILER_CONNECTION=${{ secrets.MAILER_CONNECTION }}
133130
MEILISEARCH_MASTER_KEY=${{ secrets.MEILISEARCH_MASTER_KEY }}
134131
MEILISEARCH_REBUILD_SECRET=${{ secrets.MEILISEARCH_REBUILD_SECRET }}
135132
MEILISEARCH_URL=${{ secrets.MEILISEARCH_URL }}
136133
NODE_ENV=${{ vars.NODE_ENV }}
137134
PORT=${{ vars.PORT }}
138135
PUBLIC_URL=${{ secrets.PUBLIC_URL }}
139136
RECAPTCHA_SECRET_ACCESS_KEY=${{ secrets.RECAPTCHA_SECRET_ACCESS_KEY }}
140-
REDIS_HOST=${{ secrets.REDIS_HOST }}
141-
REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}
142-
REDIS_PORT=${{ secrets.REDIS_PORT }}
143-
REDIS_USERNAME=${{ secrets.REDIS_USERNAME }}
144-
REFRESH_TOKEN_EXPIRATION_IN_MINUTES=${{ vars.REFRESH_TOKEN_EXPIRATION_IN_MINUTES }}
137+
REDIS_CONNECTION=${{ secrets.REDIS_CONNECTION }}
145138
REFRESH_TOKEN_JWT_SECRET=${{ secrets.REFRESH_TOKEN_JWT_SECRET }}
146139
S3_FILE_ITEM_ACCESS_KEY_ID=${{ secrets.S3_FILE_ITEM_ACCESS_KEY_ID }}
147140
S3_FILE_ITEM_BUCKET=${{ vars.S3_FILE_ITEM_BUCKET }}

.github/workflows/test.yml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,9 @@ env:
3939
JWT_SECRET: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
4040
PASSWORD_RESET_JWT_SECRET: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
4141
EMAIL_CHANGE_JWT_SECRET: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
42-
MAILER_CONFIG_PASSWORD: password
43-
MAILER_CONFIG_SMTP_HOST: localhost
44-
MAILER_CONFIG_USERNAME: username
42+
MAILER_CONNECTION: smtp://username:password@localhost:1025
4543
RECAPTCHA_SECRET_ACCESS_KEY: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
46-
REDIS_HOST: localhost
47-
REDIS_PORT: 6379
44+
REDIS_CONNECTION: 'redis://localhost:6379'
4845
REFRESH_TOKEN_JWT_SECRET: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
4946
S3_FILE_ITEM_ACCESS_KEY_ID: graasp-user
5047
S3_FILE_ITEM_BUCKET: graasp

README.md

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -132,25 +132,19 @@ SECURE_SESSION_SECRET_KEY=<secret-key>
132132
JWT_SECRET=<secret-key>
133133
# Auth JWT secret (can use the same command as for SECURE_SESSION_SECRET_KEY)
134134
AUTH_TOKEN_JWT_SECRET=<secret-key>
135-
# AUTH_TOKEN_EXPIRATION_IN_MINUTES=10080
136135
# Refresh JWT secret (can use the same command as for SECURE_SESSION_SECRET_KEY)
137136
REFRESH_TOKEN_JWT_SECRET=<secret-key>
138-
# REFRESH_TOKEN_EXPIRATION_IN_MINUTES=86400
139137
# Password reset JWT secret (can use the same command as for SECURE_SESSION_SECRET_KEY)
140138
PASSWORD_RESET_JWT_SECRET=<secret-key>
141-
# PASSWORD_RESET_JWT_EXPIRATION_IN_MINUTES=1440
142139
# Email change JWT secret (can use the same command as for SECURE_SESSION_SECRET_KEY)
143140
EMAIL_CHANGE_JWT_SECRET=<secret-key>
144-
# EMAIL_CHANGE_JWT_EXPIRATION_IN_MINUTES=1440
145141

146142

147143
### Mail server configuration
148144

149145
# Mailer config (set by ./.devcontainer/docker-compose.yml)
150146
# Set to random values if you don't want to use the mock mailbox at http://localhost:1080
151-
# MAILER_CONFIG_SMTP_HOST=mailer
152-
# MAILER_CONFIG_USERNAME=graasp
153-
# MAILER_CONFIG_PASSWORD=graasp
147+
# MAILER_CONNECTION=
154148

155149

156150
### File storages configuration
@@ -201,10 +195,8 @@ GRAASPER_CREATOR_ID=<id>
201195

202196
# Graasp websockets
203197
# Redis config set by ./.devcontainer/docker-compose.yml
204-
# REDIS_HOST=redis
205-
# REDIS_PORT=6379
206-
# REDIS_USERNAME=
207-
# REDIS_PASSWORD=
198+
# redis[s]://[[username][:password]@][host][:port][/db-number]:
199+
# REDIS_CONNECTION=
208200

209201
# Graasp Actions
210202
SAVE_ACTIONS=true
@@ -250,7 +242,7 @@ You can also run `yarn seed` to feed the database with predefined mock data.
250242

251243
## Utilities
252244

253-
The development [docker-compose.yml](.devcontainer/docker-compose.yml) provides an instance of [mailcatcher](https://mailcatcher.me/), which emulates a SMTP server for sending e-mails. When using the email authentication flow, the mailbox web UI is accessible at [http://localhost:1080](http://localhost:1080). If you do not want to use mailcatcher, set the `MAILER_CONFIG_SMTP_HOST` variable in your `.env.development` to some random value (e.g. empty string). This will log the authentication links in the server console instead.
245+
The development [docker-compose.yml](.devcontainer/docker-compose.yml) provides an instance of [mailcatcher](https://mailcatcher.me/), which emulates a SMTP server for sending e-mails. When using the email authentication flow, the mailbox web UI is accessible at [http://localhost:1080](http://localhost:1080). If you do not want to use mailcatcher, set the `MAILER_CONNECTION` variable in your `.env.development` to some random value (e.g. empty string). This will log the authentication links in the server console instead.
254246

255247
The development [docker-compose.yml](.devcontainer/docker-compose.yml) provides a [static file server](https://static-web-server.net/) for serving files when using the `local` storage option (alternative to the `s3` option). This option has the added benefit of being persistent when used locally in opposition to localstack (see the [known issues section](#known-issues) for more informations). The server is available at `http://localhost:1081`.
256248

docker/compose.yml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,7 @@ services:
5353
APPS_JWT_SECRET: # replace with your own value
5454

5555
# the Mailer config is set by the "mailer" service below
56-
MAILER_CONFIG_SMTP_HOST: mailer
57-
MAILER_CONFIG_SMTP_PORT: 1025
58-
MAILER_CONFIG_SMTP_USE_SSL: 'false' # enable if your mail server supports SSL (if using the local mailcatcher, disable SSL)
59-
MAILER_CONFIG_USERNAME: docker
60-
MAILER_CONFIG_PASSWORD: docker
56+
MAILER_CONNECTION: smtp://docker:docker@mailer:1025
6157

6258
# H5P configuration
6359
H5P_FILE_STORAGE_TYPE: local
@@ -80,7 +76,7 @@ services:
8076
ETHERPAD_API_KEY: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
8177

8278
# Redis
83-
REDIS_HOST: redis
79+
REDIS_CONNECTION: redis://redis:6379
8480

8581
EMBEDDED_LINK_ITEM_IFRAMELY_HREF_ORIGIN: http://iframely:8061
8682

src/app.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { maintenancePlugin } from './services/maintenance/maintenance.controller
1717
import MemberServiceApi from './services/member';
1818
import tagPlugin from './services/tag/tag.controller';
1919
import websocketsPlugin from './services/websockets/websocket.controller';
20-
import { REDIS_HOST, REDIS_PASSWORD, REDIS_PORT, REDIS_USERNAME } from './utils/config';
20+
import { REDIS_CONNECTION } from './utils/config';
2121

2222
export default async function (instance: FastifyInstance): Promise<void> {
2323
await instance
@@ -48,12 +48,7 @@ export default async function (instance: FastifyInstance): Promise<void> {
4848
prefix: '/ws',
4949
redis: {
5050
channelName: 'graasp-realtime-updates',
51-
config: {
52-
host: REDIS_HOST,
53-
port: REDIS_PORT,
54-
username: REDIS_USERNAME,
55-
password: REDIS_PASSWORD,
56-
},
51+
connection: REDIS_CONNECTION,
5752
},
5853
})
5954
.register(fp(MemberServiceApi))

src/di/container.ts

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,10 @@ import {
2222
GEOLOCATION_API_KEY,
2323
IMAGE_CLASSIFIER_API,
2424
MAILER_CONFIG_FROM_EMAIL,
25-
MAILER_CONFIG_PASSWORD,
26-
MAILER_CONFIG_SMTP_HOST,
27-
MAILER_CONFIG_SMTP_PORT,
28-
MAILER_CONFIG_SMTP_USE_SSL,
29-
MAILER_CONFIG_USERNAME,
25+
MAILER_CONNECTION,
3026
MEILISEARCH_MASTER_KEY,
3127
MEILISEARCH_URL,
32-
REDIS_HOST,
33-
REDIS_PASSWORD,
34-
REDIS_PORT,
35-
REDIS_USERNAME,
28+
REDIS_CONNECTION,
3629
S3_FILE_ITEM_PLUGIN_OPTIONS,
3730
} from '../utils/config';
3831
import {
@@ -64,15 +57,7 @@ export const registerDependencies = (instance: FastifyInstance) => {
6457
// register geolocation key for the ItemGeolocationService.
6558
registerValue(GEOLOCATION_API_KEY_DI_KEY, GEOLOCATION_API_KEY);
6659

67-
registerValue(
68-
Redis,
69-
new Redis({
70-
host: REDIS_HOST,
71-
port: REDIS_PORT,
72-
username: REDIS_USERNAME,
73-
password: REDIS_PASSWORD,
74-
}),
75-
);
60+
registerValue(Redis, new Redis(REDIS_CONNECTION));
7661

7762
// Register CachingService for the thumbnails urls.
7863
registerValue(
@@ -131,20 +116,8 @@ export const registerDependencies = (instance: FastifyInstance) => {
131116
registerValue(
132117
MailerService,
133118
new MailerService({
134-
host: MAILER_CONFIG_SMTP_HOST,
135-
port: MAILER_CONFIG_SMTP_PORT,
136-
useSsl: MAILER_CONFIG_SMTP_USE_SSL,
137-
username: MAILER_CONFIG_USERNAME,
138-
password: MAILER_CONFIG_PASSWORD,
119+
connection: MAILER_CONNECTION,
139120
fromEmail: MAILER_CONFIG_FROM_EMAIL,
140121
}),
141122
);
142-
// registerValue('MAIL_KEY', {
143-
// host: MAILER_CONFIG_SMTP_HOST,
144-
// port: MAILER_CONFIG_SMTP_PORT,
145-
// useSsl: MAILER_CONFIG_SMTP_USE_SSL,
146-
// username: MAILER_CONFIG_USERNAME,
147-
// password: MAILER_CONFIG_PASSWORD,
148-
// fromEmail: MAILER_CONFIG_FROM_EMAIL,
149-
// });
150123
};

src/jobs.ts

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,10 @@
11
import { ConnectionOptions, Queue, Worker } from 'bullmq';
22

33
import { BaseLogger } from './logger';
4-
import {
5-
JOB_SCHEDULING,
6-
REDIS_HOST,
7-
REDIS_PASSWORD,
8-
REDIS_PORT,
9-
REDIS_USERNAME,
10-
} from './utils/config';
4+
import { JOB_SCHEDULING, REDIS_CONNECTION } from './utils/config';
115

126
const connection: ConnectionOptions = {
13-
host: REDIS_HOST,
14-
port: REDIS_PORT,
15-
username: REDIS_USERNAME,
16-
password: REDIS_PASSWORD,
7+
url: REDIS_CONNECTION,
178
};
189

1910
export const CRON_3AM_MONDAY = '0 3 * * 1';

src/plugins/mailer/mailer.service.ts

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,7 @@ export interface Mail {
1111
}
1212

1313
export interface MailerOptions {
14-
host: string;
15-
port?: number;
16-
useSsl?: boolean;
17-
username: string;
18-
password: string;
14+
connection: string;
1915
fromEmail: string;
2016
}
2117

@@ -24,17 +20,9 @@ export class MailerService {
2420
private readonly fromEmail: string;
2521
private readonly transporter: Transporter;
2622

27-
constructor({ host, port, useSsl, username, password, fromEmail }: MailerOptions) {
23+
constructor({ connection, fromEmail }: MailerOptions) {
2824
this.fromEmail = fromEmail;
29-
this.transporter = createTransport({
30-
host,
31-
port: port ?? 465,
32-
secure: useSsl ?? true,
33-
auth: {
34-
user: username,
35-
pass: password,
36-
},
37-
});
25+
this.transporter = createTransport(connection);
3826
}
3927

4028
/**

0 commit comments

Comments
 (0)