54 lines
1.4 KiB
JavaScript
54 lines
1.4 KiB
JavaScript
'use strict';
|
|
const conf = require('@simpleworkjs/conf');
|
|
const VAULT_URL = process.env.VAULT_ADDR || 'http://openbao:8200';
|
|
const VAULT_TOKEN = process.env.VAULT_TOKEN || 'root';
|
|
|
|
async function getVaultConf() {
|
|
try {
|
|
const res = await fetch(`${VAULT_URL}/v1/secret/data/sso-manager/conf`, {
|
|
headers: { 'X-Vault-Token': VAULT_TOKEN }
|
|
});
|
|
if (res.status === 200) {
|
|
const json = await res.json();
|
|
return json.data.data;
|
|
}
|
|
} catch (err) {
|
|
console.error('Error fetching conf from Vault:', err);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
async function setVaultConf(newConf) {
|
|
const res = await fetch(`${VAULT_URL}/v1/secret/data/sso-manager/conf`, {
|
|
method: 'POST',
|
|
headers: { 'X-Vault-Token': VAULT_TOKEN, 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ data: newConf })
|
|
});
|
|
if (!res.ok) {
|
|
const text = await res.text();
|
|
throw new Error(`Vault API error: ${res.status} ${text}`);
|
|
}
|
|
applyConf(newConf);
|
|
}
|
|
|
|
function applyConf(newConf) {
|
|
if (!newConf) return;
|
|
// Deep merge into conf
|
|
for (const key of Object.keys(newConf)) {
|
|
if (typeof newConf[key] === 'object' && newConf[key] !== null && !Array.isArray(newConf[key])) {
|
|
conf[key] = { ...conf[key], ...newConf[key] };
|
|
} else {
|
|
conf[key] = newConf[key];
|
|
}
|
|
}
|
|
}
|
|
|
|
async function init() {
|
|
const vaultConf = await getVaultConf();
|
|
if (vaultConf) {
|
|
applyConf(vaultConf);
|
|
}
|
|
}
|
|
|
|
module.exports = { getVaultConf, setVaultConf, init };
|