UNPKG

authenzify

Version:

server to manage authentication authorization of users and more

202 lines (159 loc) 4.52 kB
import { ACTIVATE_USER_BY } from '../constant.js' const defaultConfig = { activateUserBy: ACTIVATE_USER_BY.AUTO, storage: 'mongodb', uri: 'mongodb://localhost:27017/authenzify-users-management', saltLength: 32, authorizationCookieKey: 'Authorization', setCookieOnSignIn: true, } const defaultSaltLength = 32 const minute = 60 * 1000 const hour = 60 * minute const day = 24 * hour const passwordResetExpiration = 18 * minute const defaultSignInCodeExpiration = 3 * minute const defaultUserPermissionsRequestLinkExpiration = 3 * day export class ConfigService { #config #passwordPolicyRegex #usernamePolicyRegex constructor(config) { this.#config = { ...defaultConfig, ...config } this.#passwordPolicyRegex = new RegExp(config.passwordPolicy) this.#usernamePolicyRegex = new RegExp(config.usernamePolicy) } get activateUserAuto() { return this.#config.activateUserBy === ACTIVATE_USER_BY.AUTO } get activateUserByEmail() { return this.#config.activateUserBy === ACTIVATE_USER_BY.USER_EMAIL } get activateUserByAdmin() { return this.#config.activateUserBy === ACTIVATE_USER_BY.ADMIN_EMAIL } get activateUserByCode() { return this.#config.activateUserBy === ACTIVATE_USER_BY.CODE } get doesUsernamePolicyValid() { return this.#usernamePolicyRegex.test.bind(this.#usernamePolicyRegex) } get doesPasswordPolicyValid() { return this.#passwordPolicyRegex.test.bind(this.#passwordPolicyRegex) } get saltLength() { return this.#config.saltLength || defaultSaltLength } get passwordPrivateKey() { return this.#config.passwordPrivateKey } get privateKey() { return this.#config.privateKey } get publicKey() { return this.#config.publicKey } get storage() { return this.#config.storage } get uri() { return this.#config.uri } get jwtSignOptions() { return this.#config.jwtOptions } get jwtVerifyOptions() { return { ...this.#config.jwtOptions, algorithm: [this.#config.jwtOptions.algorithm], } } get authorizationCookieKey() { return this.#config.authorizationCookieKey } get setCookieOnSignIn() { return this.#config.setCookieOnSignIn } get emailProvider() { return this.#config.emailProvider } get clientDomain() { return this.#config.clientDomain } get domain() { return this.#config.domain } get applicationName() { return this.#config.applicationName } get activationVerificationRoute() { return this.#config.activationVerificationRoute } get usersRoutesPrefix() { return this.#config.usersRoutesPrefix || '/v1/users' } get host() { return this.#config.host || '0.0.0.0' } get port() { return this.#config.port || 9090 } get defaultPermissionsSignUp() { return this.#config.onSignUpFirstBasePermissions || [] } get permissionsGroups() { return this.#config.permissionsGroups } get permissionsVerificationRoute() { return this.#config.permissionsVerificationRoute } get approvePermissionsByPermissionsName() { return ( this.#config.approvePermissionsByPermissionsName || 'allow-approve-users-permissions' ) } get signInRoute() { return this.#config.signInRoute } get logger() { return this.#config.logger === !!this.#config.logger ? this.#config.logger : true } get resetPasswordRoute() { return this.#config.resetPasswordRoute } get didNotAskedToResetPasswordRoute() { return this.#config.didNotAskedToResetPasswordRoute } get googleSignInClientId() { if (Array.isArray(this.#config.googleSignInClientId)) { return this.#config.googleSignInClientId } return this.#config.googleSignInClientId?.split(',') } get skipFirstCompanyUserSelectsRoleByEmail() { return this.#config.skipFirstCompanyUserSelectsRoleByEmail } get signInCodeExpiration() { return this.#config.signInCodeExpiration || defaultSignInCodeExpiration } get passwordResetExpiration() { return this.#config.passwordResetExpiration || passwordResetExpiration } get assignIdentifierCodeExpiration() { return ( this.#config.assignIdentifierCodeExpiration || defaultSignInCodeExpiration ) } get userPermissionsRequestLinkExpiration() { return ( this.#config.userPermissionsRequestLinkExpiration || defaultUserPermissionsRequestLinkExpiration ) } otpGenerator() { return this.#config.otpGenerator() } }