mirror of
https://github.com/sasjs/server.git
synced 2025-12-11 03:34:35 +00:00
feat: add new env config DB_TYPE
This commit is contained in:
@@ -137,6 +137,9 @@ CA_ROOT=fullchain.pem (optional)
|
|||||||
## ENV variables required for MODE: `server`
|
## ENV variables required for MODE: `server`
|
||||||
DB_CONNECT=mongodb+srv://<DB_USERNAME>:<DB_PASSWORD>@<CLUSTER>/<DB_NAME>?retryWrites=true&w=majority
|
DB_CONNECT=mongodb+srv://<DB_USERNAME>:<DB_PASSWORD>@<CLUSTER>/<DB_NAME>?retryWrites=true&w=majority
|
||||||
|
|
||||||
|
# options: [mongodb|cosmos_mongodb] default: mongodb
|
||||||
|
DB_TYPE=
|
||||||
|
|
||||||
# AUTH_PROVIDERS options: [ldap] default: ``
|
# AUTH_PROVIDERS options: [ldap] default: ``
|
||||||
AUTH_PROVIDERS=
|
AUTH_PROVIDERS=
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ HELMET_CSP_CONFIG_PATH=./csp.config.json if omitted HELMET default will be used
|
|||||||
HELMET_COEP=[true|false] if omitted HELMET default will be used
|
HELMET_COEP=[true|false] if omitted HELMET default will be used
|
||||||
|
|
||||||
DB_CONNECT=mongodb+srv://<DB_USERNAME>:<DB_PASSWORD>@<CLUSTER>/<DB_NAME>?retryWrites=true&w=majority
|
DB_CONNECT=mongodb+srv://<DB_USERNAME>:<DB_PASSWORD>@<CLUSTER>/<DB_NAME>?retryWrites=true&w=majority
|
||||||
|
DB_TYPE=[mongodb|cosmos_mongodb] default considered as mongodb
|
||||||
|
|
||||||
AUTH_PROVIDERS=[ldap]
|
AUTH_PROVIDERS=[ldap]
|
||||||
|
|
||||||
|
|||||||
@@ -3,19 +3,27 @@ import mongoose from 'mongoose'
|
|||||||
import session from 'express-session'
|
import session from 'express-session'
|
||||||
import MongoStore from 'connect-mongo'
|
import MongoStore from 'connect-mongo'
|
||||||
|
|
||||||
import { ModeType, ProtocolType } from '../utils'
|
import { DatabaseType, ModeType, ProtocolType } from '../utils'
|
||||||
|
|
||||||
export const configureExpressSession = (app: Express) => {
|
export const configureExpressSession = (app: Express) => {
|
||||||
const { MODE } = process.env
|
const { MODE, DB_TYPE } = process.env
|
||||||
|
|
||||||
if (MODE === ModeType.Server) {
|
if (MODE === ModeType.Server) {
|
||||||
let store: MongoStore | undefined
|
let store: MongoStore | undefined
|
||||||
|
|
||||||
if (process.env.NODE_ENV !== 'test') {
|
if (process.env.NODE_ENV !== 'test') {
|
||||||
store = MongoStore.create({
|
if (DB_TYPE === DatabaseType.COSMOS_MONGODB) {
|
||||||
client: mongoose.connection!.getClient() as any,
|
store = MongoStore.create({
|
||||||
collectionName: 'sessions'
|
client: mongoose.connection!.getClient() as any,
|
||||||
})
|
collectionName: 'sessions',
|
||||||
|
autoRemove: 'interval'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
store = MongoStore.create({
|
||||||
|
client: mongoose.connection!.getClient() as any,
|
||||||
|
collectionName: 'sessions'
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const { PROTOCOL, ALLOWED_DOMAIN } = process.env
|
const { PROTOCOL, ALLOWED_DOMAIN } = process.env
|
||||||
|
|||||||
@@ -47,6 +47,11 @@ export enum ReturnCode {
|
|||||||
InvalidEnv
|
InvalidEnv
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum DatabaseType {
|
||||||
|
MONGO = 'mongodb',
|
||||||
|
COSMOS_MONGODB = 'cosmos_mongodb'
|
||||||
|
}
|
||||||
|
|
||||||
export const verifyEnvVariables = (): ReturnCode => {
|
export const verifyEnvVariables = (): ReturnCode => {
|
||||||
const errors: string[] = []
|
const errors: string[] = []
|
||||||
|
|
||||||
@@ -70,6 +75,8 @@ export const verifyEnvVariables = (): ReturnCode => {
|
|||||||
|
|
||||||
errors.push(...verifyLDAPVariables())
|
errors.push(...verifyLDAPVariables())
|
||||||
|
|
||||||
|
errors.push(...verifyDbType())
|
||||||
|
|
||||||
if (errors.length) {
|
if (errors.length) {
|
||||||
process.logger?.error(
|
process.logger?.error(
|
||||||
`Invalid environment variable(s) provided: \n${errors.join('\n')}`
|
`Invalid environment variable(s) provided: \n${errors.join('\n')}`
|
||||||
@@ -342,11 +349,30 @@ const verifyLDAPVariables = () => {
|
|||||||
return errors
|
return errors
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const verifyDbType = () => {
|
||||||
|
const errors: string[] = []
|
||||||
|
|
||||||
|
const { MODE, DB_TYPE } = process.env
|
||||||
|
|
||||||
|
if (MODE === ModeType.Server) {
|
||||||
|
if (DB_TYPE) {
|
||||||
|
const dbTypes = Object.values(DatabaseType)
|
||||||
|
if (!dbTypes.includes(DB_TYPE as DatabaseType))
|
||||||
|
errors.push(`- DB_TYPE '${DB_TYPE}'\n - valid options ${dbTypes}`)
|
||||||
|
} else {
|
||||||
|
process.env.DB_TYPE = DEFAULTS.DB_TYPE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return errors
|
||||||
|
}
|
||||||
|
|
||||||
const DEFAULTS = {
|
const DEFAULTS = {
|
||||||
MODE: ModeType.Desktop,
|
MODE: ModeType.Desktop,
|
||||||
PROTOCOL: ProtocolType.HTTP,
|
PROTOCOL: ProtocolType.HTTP,
|
||||||
PORT: '5000',
|
PORT: '5000',
|
||||||
HELMET_COEP: HelmetCoepType.TRUE,
|
HELMET_COEP: HelmetCoepType.TRUE,
|
||||||
LOG_FORMAT_MORGAN: LOG_FORMAT_MORGANType.Common,
|
LOG_FORMAT_MORGAN: LOG_FORMAT_MORGANType.Common,
|
||||||
RUN_TIMES: RunTimeType.SAS
|
RUN_TIMES: RunTimeType.SAS,
|
||||||
|
DB_TYPE: DatabaseType.MONGO
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user