@infomaker/service-authorization-lib
Version:
IMID Service Authorization Library
62 lines (50 loc) • 1.4 kB
JavaScript
const Joi = require('joi')
const authorizationModes = require('./authorization-modes')
const requiredString = Joi.string().required()
const requiredStringOrFalse = Joi.alternatives().try(
Joi.boolean().allow(false).required(),
Joi.string().required()
)
const stringOrFunction = Joi.alternatives().try(
Joi.func(),
Joi.string()
)
const stringOrFunctionOrFalse = Joi.alternatives().try(
Joi.func(),
Joi.string(),
Joi.boolean().allow(false)
)
const accessRule = Joi.object().keys({
unit: stringOrFunction,
permission: stringOrFunction,
sub: stringOrFunction
}).min(1)
const builtAccessRule = Joi.object().keys({
unit: Joi.string(),
permission: Joi.string(),
sub: Joi.string()
}).min(1)
const accessRules = Joi.array().items(accessRule).min(1)
const authParamsFull = Joi.object().keys({
onPreAuth: Joi.func().optional(),
org: stringOrFunctionOrFalse.required(),
accessRules: accessRules.optional(),
suppressLoginTrigger: Joi.boolean().strict().optional()
})
const authParamsAuthorizationModeOnly = Joi.string().allow(
authorizationModes.openEndpoint,
authorizationModes.serviceAdminEndpoint,
authorizationModes.authenticatedEndpoint
)
const authParams = Joi.alternatives().try(
authParamsFull,
authParamsAuthorizationModeOnly
)
module.exports = {
authParams,
accessRules,
accessRule,
builtAccessRule,
requiredString,
requiredStringOrFalse
}