Spaces:
Paused
Paused
| const assert = require('assert'); | |
| const fs = require('node:fs'); | |
| const os = require('node:os'); | |
| const path = require('node:path'); | |
| const { loadBootstrapConfig, loadConfig } = require('../server/lib/config'); | |
| describe('runtime secrets', function () { | |
| let tempDir; | |
| beforeEach(function () { | |
| tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'k-vault-runtime-secrets-')); | |
| }); | |
| afterEach(function () { | |
| fs.rmSync(tempDir, { recursive: true, force: true }); | |
| }); | |
| it('generates and persists secrets when env values are absent', function () { | |
| const env = { | |
| DATA_DIR: tempDir, | |
| SQLITE_BACKUP_ENABLED: 'false', | |
| }; | |
| const first = loadConfig(env); | |
| const runtimeSecretsPath = path.join(tempDir, 'k-vault.runtime-secrets.json'); | |
| assert.ok(first.configEncryptionKey); | |
| assert.ok(first.sessionSecret); | |
| assert.deepStrictEqual(first.runtimeSecrets.generatedKeys.sort(), ['CONFIG_ENCRYPTION_KEY', 'SESSION_SECRET']); | |
| assert.strictEqual(first.runtimeSecrets.runtimeSecretsPath, runtimeSecretsPath); | |
| assert.ok(fs.existsSync(runtimeSecretsPath)); | |
| const stored = JSON.parse(fs.readFileSync(runtimeSecretsPath, 'utf8')); | |
| assert.strictEqual(stored.configEncryptionKey, first.configEncryptionKey); | |
| assert.strictEqual(stored.sessionSecret, first.sessionSecret); | |
| const second = loadConfig(env); | |
| assert.strictEqual(second.configEncryptionKey, first.configEncryptionKey); | |
| assert.strictEqual(second.sessionSecret, first.sessionSecret); | |
| assert.deepStrictEqual(second.runtimeSecrets.generatedKeys, []); | |
| assert.strictEqual(second.runtimeSecrets.source, 'file'); | |
| }); | |
| it('keeps runtime secrets in sqlite backup managed files', function () { | |
| const env = { | |
| DATA_DIR: tempDir, | |
| SQLITE_BACKUP_GITHUB_REPO: 'owner/repo', | |
| SQLITE_BACKUP_GITHUB_TOKEN: 'token', | |
| }; | |
| const bootstrap = loadBootstrapConfig(env); | |
| assert.strictEqual(bootstrap.runtimeSecretsPath, path.join(tempDir, 'k-vault.runtime-secrets.json')); | |
| assert.strictEqual(bootstrap.sqliteBackup.managedFiles.length, 1); | |
| assert.strictEqual(bootstrap.sqliteBackup.managedFiles[0].localPath, bootstrap.runtimeSecretsPath); | |
| assert.strictEqual(bootstrap.sqliteBackup.managedFiles[0].repoPath, 'backups/k-vault.runtime-secrets.json'); | |
| }); | |
| it('allows disabling auto generation', function () { | |
| const env = { | |
| DATA_DIR: tempDir, | |
| SQLITE_BACKUP_ENABLED: 'false', | |
| RUNTIME_SECRETS_AUTO_GENERATE: 'false', | |
| }; | |
| const config = loadConfig(env); | |
| assert.strictEqual(config.configEncryptionKey, ''); | |
| assert.strictEqual(config.sessionSecret, ''); | |
| assert.deepStrictEqual(config.runtimeSecrets.generatedKeys, []); | |
| assert.strictEqual(fs.existsSync(path.join(tempDir, 'k-vault.runtime-secrets.json')), false); | |
| }); | |
| }); | |