mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-21 22:51:09 +02:00
125 lines
3.5 KiB
JavaScript
125 lines
3.5 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
import { Response } from 'miragejs';
|
|
|
|
export default function (server) {
|
|
const getRecord = (schema, req, dbKey) => {
|
|
const { backend, name } = req.params;
|
|
const record = schema.db[dbKey].findBy({ name, backend });
|
|
if (record) {
|
|
delete record.backend;
|
|
delete record.id;
|
|
}
|
|
return record ? { data: record } : new Response(404, {}, { errors: [] });
|
|
};
|
|
const createOrUpdateRecord = (schema, req, key) => {
|
|
const { backend, name } = req.params;
|
|
const payload = JSON.parse(req.requestBody);
|
|
const record = schema[key].findOrCreateBy({ name, backend });
|
|
record.update(payload);
|
|
return new Response(204);
|
|
};
|
|
const deleteRecord = (schema, req, dbKey) => {
|
|
const { name } = req.params;
|
|
const record = schema.db[dbKey].findBy({ name });
|
|
if (record) {
|
|
schema.db[dbKey].remove(record.id);
|
|
}
|
|
return new Response(204);
|
|
};
|
|
|
|
// Connection mgmt
|
|
server.get('/:backend/config/:name', (schema, req) => {
|
|
return getRecord(schema, req, 'database/connections');
|
|
});
|
|
server.get('/:backend/config', (schema) => {
|
|
const keys = schema.db['databaseConnections'].map((record) => record.name);
|
|
if (!keys.length) {
|
|
return new Response(404, {}, { errors: [] });
|
|
}
|
|
return {
|
|
data: {
|
|
keys,
|
|
},
|
|
};
|
|
});
|
|
server.post('/:backend/config/:name', (schema, req) => {
|
|
const { name } = req.params;
|
|
const { username } = JSON.parse(req.requestBody);
|
|
if (name === 'bad-connection') {
|
|
return new Response(
|
|
500,
|
|
{},
|
|
{
|
|
errors: [
|
|
`error creating database object: error verifying - ping: Error 1045 (28000): Access denied for user '${username}'@'192.168.65.1' (using password: YES)`,
|
|
],
|
|
}
|
|
);
|
|
}
|
|
return createOrUpdateRecord(schema, req, 'database/connections');
|
|
});
|
|
server.delete('/:backend/config/:name', (schema, req) => {
|
|
return deleteRecord(schema, req, 'database-connection');
|
|
});
|
|
// Rotate root
|
|
server.post('/:backend/rotate-root/:name', (schema, req) => {
|
|
const { name } = req.params;
|
|
if (name === 'fail-rotate') {
|
|
return new Response(
|
|
500,
|
|
{},
|
|
{
|
|
errors: [
|
|
"1 error occurred:\n\t* failed to update user: failed to change password: Error 1045 (28000): Access denied for user 'admin'@'%' (using password: YES)\n\n",
|
|
],
|
|
}
|
|
);
|
|
}
|
|
return new Response(204);
|
|
});
|
|
|
|
// Generate credentials
|
|
server.get('/:backend/creds/:role', (schema, req) => {
|
|
const { role } = req.params;
|
|
if (role === 'static-role') {
|
|
// static creds
|
|
return {
|
|
request_id: 'static-1234',
|
|
lease_id: '',
|
|
renewable: false,
|
|
lease_duration: 0,
|
|
data: {
|
|
last_vault_rotation: '2024-01-18T10:45:47.227193-06:00',
|
|
password: 'generated-password',
|
|
rotation_period: 86400,
|
|
ttl: 3600,
|
|
username: 'static-username',
|
|
},
|
|
wrap_info: null,
|
|
warnings: null,
|
|
auth: null,
|
|
mount_type: 'database',
|
|
};
|
|
}
|
|
// dynamic creds
|
|
return {
|
|
request_id: 'dynamic-1234',
|
|
lease_id: `database/creds/${role}/abcd`,
|
|
renewable: true,
|
|
lease_duration: 3600,
|
|
data: {
|
|
password: 'generated-password',
|
|
username: 'generated-username',
|
|
},
|
|
wrap_info: null,
|
|
warnings: null,
|
|
auth: null,
|
|
mount_type: 'database',
|
|
};
|
|
});
|
|
}
|