mirror of
https://github.com/0rangebananaspy/authelia.git
synced 2024-09-14 22:47:21 +07:00
56 lines
2.1 KiB
TypeScript
56 lines
2.1 KiB
TypeScript
|
|
import * as ObjectPath from "object-path";
|
|
import { AppConfiguration, UserConfiguration, NotifierConfiguration, ACLConfiguration, LdapConfiguration, SessionRedisOptions } from "./../../types/Configuration";
|
|
|
|
const LDAP_URL_ENV_VARIABLE = "LDAP_URL";
|
|
|
|
|
|
function get_optional<T>(config: object, path: string, default_value: T): T {
|
|
let entry = default_value;
|
|
if (ObjectPath.has(config, path)) {
|
|
entry = ObjectPath.get<object, T>(config, path);
|
|
}
|
|
return entry;
|
|
}
|
|
|
|
function ensure_key_existence(config: object, path: string): void {
|
|
if (!ObjectPath.has(config, path)) {
|
|
throw new Error(`Configuration error: key '${path}' is missing in configuration file`);
|
|
}
|
|
}
|
|
|
|
function adaptFromUserConfiguration(userConfiguration: UserConfiguration): AppConfiguration {
|
|
ensure_key_existence(userConfiguration, "ldap");
|
|
ensure_key_existence(userConfiguration, "session.secret");
|
|
|
|
const port = ObjectPath.get(userConfiguration, "port", 8080);
|
|
|
|
return {
|
|
port: port,
|
|
ldap: ObjectPath.get<object, LdapConfiguration>(userConfiguration, "ldap"),
|
|
session: {
|
|
domain: ObjectPath.get<object, string>(userConfiguration, "session.domain"),
|
|
secret: ObjectPath.get<object, string>(userConfiguration, "session.secret"),
|
|
expiration: get_optional<number>(userConfiguration, "session.expiration", 3600000), // in ms
|
|
redis: ObjectPath.get<object, SessionRedisOptions>(userConfiguration, "session.redis")
|
|
},
|
|
store_directory: get_optional<string>(userConfiguration, "store_directory", undefined),
|
|
logs_level: get_optional<string>(userConfiguration, "logs_level", "info"),
|
|
notifier: ObjectPath.get<object, NotifierConfiguration>(userConfiguration, "notifier"),
|
|
access_control: ObjectPath.get<object, ACLConfiguration>(userConfiguration, "access_control")
|
|
};
|
|
}
|
|
|
|
export default class ConfigurationAdapter {
|
|
static adapt(userConfiguration: UserConfiguration): AppConfiguration {
|
|
const appConfiguration = adaptFromUserConfiguration(userConfiguration);
|
|
|
|
const ldapUrl = process.env[LDAP_URL_ENV_VARIABLE];
|
|
if (ldapUrl)
|
|
appConfiguration.ldap.url = ldapUrl;
|
|
|
|
return appConfiguration;
|
|
}
|
|
}
|
|
|