mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-18 17:25:16 -04:00
Add proof of concept config system
Signed-off-by: David Mehren <git@herrmehren.de> Co-authored-by: Yannick Bungers <git@innay.de>
This commit is contained in:
parent
2516f8a1b5
commit
c55f7060be
4 changed files with 140 additions and 1 deletions
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { PublicApiModule } from './api/public/public-api.module';
|
||||
import { AuthorsModule } from './authors/authors.module';
|
||||
|
@ -17,6 +18,7 @@ import { NotesModule } from './notes/notes.module';
|
|||
import { PermissionsModule } from './permissions/permissions.module';
|
||||
import { RevisionsModule } from './revisions/revisions.module';
|
||||
import { UsersModule } from './users/users.module';
|
||||
import appConfig from './config/app.config';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
|
@ -26,6 +28,9 @@ import { UsersModule } from './users/users.module';
|
|||
autoLoadEntities: true,
|
||||
synchronize: true,
|
||||
}),
|
||||
ConfigModule.forRoot({
|
||||
load: [appConfig],
|
||||
}),
|
||||
NotesModule,
|
||||
UsersModule,
|
||||
RevisionsModule,
|
||||
|
|
60
src/config/app.config.ts
Normal file
60
src/config/app.config.ts
Normal file
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import { registerAs } from '@nestjs/config';
|
||||
import * as Joi from 'joi';
|
||||
|
||||
export interface AppConfig {
|
||||
port: number;
|
||||
media: {
|
||||
backend: {
|
||||
use: string;
|
||||
filesystem: {
|
||||
uploadPath: string;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
const schema = Joi.object({
|
||||
port: Joi.number(),
|
||||
media: {
|
||||
backend: {
|
||||
use: Joi.string().valid('filesystem'),
|
||||
filesystem: {
|
||||
uploadPath: Joi.when('...use', {
|
||||
is: Joi.valid('filesystem'),
|
||||
then: Joi.string(),
|
||||
otherwise: Joi.optional(),
|
||||
}),
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export default registerAs('appConfig', async () => {
|
||||
const appConfig = schema.validate(
|
||||
{
|
||||
port: parseInt(process.env.PORT) || undefined,
|
||||
media: {
|
||||
backend: {
|
||||
use: process.env.HD_MEDIA_BACKEND,
|
||||
filesystem: {
|
||||
uploadPath: process.env.HD_MEDIA_BACKEND_FILESYSTEM_UPLOAD_PATH,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
abortEarly: false,
|
||||
presence: 'required',
|
||||
},
|
||||
);
|
||||
if (appConfig.error) {
|
||||
throw new Error(appConfig.error.toString());
|
||||
}
|
||||
return appConfig.value;
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue