AUTH_VALIDATION_SCHEMA |
Type : object
|
Default value : {
AUTH_API_KEY: Joi.string().required(),
}
|
client |
Default value : createClient(createConfig<ClientOptions>())
|
CRYPTO_VALIDATION_SCHEMA |
Type : object
|
Default value : {
CRYPTO_ALG: Joi.string().valid('ES256', 'Ed25519').default('ES256'),
}
|
DB_VALIDATION_SCHEMA |
Type : object
|
Default value : {
DB_TYPE: Joi.string().valid('sqlite', 'postgres').default('sqlite'),
DB_HOST: Joi.string().when('DB_TYPE', {
is: 'sqlite',
then: Joi.optional(),
otherwise: Joi.required(),
}),
DB_PORT: Joi.number().when('DB_TYPE', {
is: 'sqlite',
then: Joi.optional(),
otherwise: Joi.required(),
}),
DB_USERNAME: Joi.string().when('DB_TYPE', {
is: 'sqlite',
then: Joi.optional(),
otherwise: Joi.required(),
}),
DB_PASSWORD: Joi.string().when('DB_TYPE', {
is: 'sqlite',
then: Joi.optional(),
otherwise: Joi.required(),
}),
DB_DATABASE: Joi.string().when('DB_TYPE', {
is: 'sqlite',
then: Joi.optional(),
otherwise: Joi.required(),
}),
}
|
ED25519 |
Type : CryptoImplementation
|
Default value : {
alg: 'EdDSA',
async generateKeyPair() {
const keyPair = await crypto.webcrypto.subtle.generateKey(
{
name: 'EdDSA',
namedCurve: 'Ed25519',
},
true,
['sign', 'verify'],
);
const publicKey = await crypto.webcrypto.subtle.exportKey(
'jwk',
keyPair.publicKey,
);
const privateKey = await crypto.webcrypto.subtle.exportKey(
'jwk',
keyPair.privateKey,
);
return { publicKey, privateKey };
},
async getSigner(privateKeyJWK: object) {
const privateKey = await crypto.webcrypto.subtle.importKey(
'jwk',
privateKeyJWK,
{
name: 'EdDSA',
namedCurve: 'Ed25519',
},
false,
['sign'],
);
return async (data: string) => {
const signature = await crypto.webcrypto.subtle.sign(
'EdDSA',
privateKey,
new TextEncoder().encode(data),
);
return Buffer.from(signature).toString('base64url');
};
},
async getVerifier(publicKeyJWK: object) {
const publicKey = await crypto.webcrypto.subtle.importKey(
'jwk',
publicKeyJWK,
{
name: 'EdDSA',
namedCurve: 'Ed25519',
},
false,
['verify'],
);
return async (data: string, signatureBase64url: string) => {
const signature = Buffer.from(signatureBase64url, 'base64url');
const isVerified = await crypto.webcrypto.subtle.verify(
'EdDSA',
publicKey,
signature,
new TextEncoder().encode(data),
);
return isVerified;
};
},
}
|
ISSUER_VALIDATION_SCHEMA |
Type : object
|
Default value : {
PUBLIC_URL: Joi.string(),
}
|
KEY_VALIDATION_SCHEMA |
Type : object
|
Default value : {
KM_TYPE: Joi.string().valid('file', 'vault').default('file'),
// Vault-related config
VAULT_URL: Joi.string().uri().when('KM_TYPE', {
is: 'vault',
then: Joi.required(),
otherwise: Joi.optional(),
}),
VAULT_TOKEN: Joi.string().when('KM_TYPE', {
is: 'vault',
then: Joi.required(),
otherwise: Joi.optional(),
}),
VAULT_KEY_ID: Joi.string().when('KM_TYPE', {
is: 'vault',
then: Joi.string().default('key-id'),
otherwise: Joi.optional(),
}),
}
|
REGISTRAR_VALIDATION_SCHEMA |
Type : object
|
Default value : {
REGISTRAR_URL: Joi.string(),
REGISTRAR_RP_NAME: Joi.string().when('REGISTRAR_URL', {
is: Joi.exist(),
then: Joi.required(),
}),
KEYCLOAK_REALM: Joi.string().when('REGISTRAR_URL', {
is: Joi.exist(),
then: Joi.required(),
}),
KEYCLOAK_AUTH_SERVER_URL: Joi.string().when('REGISTRAR_URL', {
is: Joi.exist(),
then: Joi.required(),
}),
KEYCLOAK_RESOURCE: Joi.string().when('REGISTRAR_URL', {
is: Joi.exist(),
then: Joi.required(),
}),
KEYCLOAK_CREDENTIALS_SECRET: Joi.string().when('REGISTRAR_URL', {
is: Joi.exist(),
then: Joi.required(),
}),
}
|
SESSION_VALIDATION_SCHEMA |
Type : object
|
Default value : {
SESSION_TIDY_UP_INTERVAL: Joi.number().default(60 * 60), // default to every hour
SESSION_TTL: Joi.number().default(24 * 60 * 60), // default to 24 hours
}
|
token |
Default value : process.env.VAULT_TOKEN || 'myroot'
|
url |
Default value : process.env.VAULT_URL || 'http://localhost:8200'
|