+import * as bytes from 'bytes'
import { IConfig } from 'config'
+import decache from 'decache'
import { dirname, join } from 'path'
+import { VideoRedundancyConfigFilter } from '@shared/models/redundancy/video-redundancy-config-filter.type'
+import { BroadcastMessageLevel } from '@shared/models/server'
import { VideosRedundancyStrategy } from '../../shared/models'
+import { NSFWPolicyType } from '../../shared/models/videos/nsfw-policy.type'
// Do not use barrels, remain constants as independent as possible
import { buildPath, parseBytes, parseDurationToMs, root } from '../helpers/core-utils'
-import { NSFWPolicyType } from '../../shared/models/videos/nsfw-policy.type'
-import * as bytes from 'bytes'
-import { VideoRedundancyConfigFilter } from '@shared/models/redundancy/video-redundancy-config-filter.type'
-import { BroadcastMessageLevel } from '@shared/models/server'
// Use a variable to reload the configuration if we need
let config: IConfig = require('config')
PLUGINS_DIR: buildPath(config.get<string>('storage.plugins')),
CLIENT_OVERRIDES_DIR: buildPath(config.get<string>('storage.client_overrides'))
},
+ OBJECT_STORAGE: {
+ ENABLED: config.get<boolean>('object_storage.enabled'),
+ MAX_UPLOAD_PART: bytes.parse(config.get<string>('object_storage.max_upload_part')),
+ ENDPOINT: config.get<string>('object_storage.endpoint'),
+ REGION: config.get<string>('object_storage.region'),
+ CREDENTIALS: {
+ ACCESS_KEY_ID: config.get<string>('object_storage.credentials.access_key_id'),
+ SECRET_ACCESS_KEY: config.get<string>('object_storage.credentials.secret_access_key')
+ },
+ VIDEOS: {
+ BUCKET_NAME: config.get<string>('object_storage.videos.bucket_name'),
+ PREFIX: config.get<string>('object_storage.videos.prefix'),
+ BASE_URL: config.get<string>('object_storage.videos.base_url')
+ },
+ STREAMING_PLAYLISTS: {
+ BUCKET_NAME: config.get<string>('object_storage.streaming_playlists.bucket_name'),
+ PREFIX: config.get<string>('object_storage.streaming_playlists.prefix'),
+ BASE_URL: config.get<string>('object_storage.streaming_playlists.base_url')
+ }
+ },
WEBSERVER: {
SCHEME: config.get<boolean>('webserver.https') === true ? 'https' : 'http',
WS: config.get<boolean>('webserver.https') === true ? 'wss' : 'ws',
REPORT_ONLY: config.get<boolean>('csp.report_only'),
REPORT_URI: config.get<string>('csp.report_uri')
},
+ SECURITY: {
+ FRAMEGUARD: {
+ ENABLED: config.get<boolean>('security.frameguard.enabled')
+ }
+ },
TRACKER: {
ENABLED: config.get<boolean>('tracker.enabled'),
PRIVATE: config.get<boolean>('tracker.private'),
get ENABLED () { return config.get<boolean>('signup.enabled') },
get LIMIT () { return config.get<number>('signup.limit') },
get REQUIRES_EMAIL_VERIFICATION () { return config.get<boolean>('signup.requires_email_verification') },
+ get MINIMUM_AGE () { return config.get<number>('signup.minimum_age') },
FILTERS: {
CIDR: {
get WHITELIST () { return config.get<string[]>('signup.filters.cidr.whitelist') },
export function reloadConfig () {
- function directory () {
+ function getConfigDirectory () {
if (process.env.NODE_CONFIG_DIR) {
return process.env.NODE_CONFIG_DIR
}
}
function purge () {
+ const directory = getConfigDirectory()
+
for (const fileName in require.cache) {
- if (fileName.includes(directory()) === false) {
+ if (fileName.includes(directory) === false) {
continue
}
delete require.cache[fileName]
}
- delete require.cache[require.resolve('config')]
+ decache('config')
}
purge()