open-vault/ui/app/adapters/pki/action.js
claire bontempo 069b00b031
UI: pki rotate root cert (#19739)
* add rotate root route

* add page component

* add modal

* fix modal image styling

* add radio buttons

* add jsonToCert function to pki parser

* add verify function

* add verify to details route

* nest rotate-root under issuer/

* copy values from old root ca

* pull detail info rows into a separate component

* add type declaration files

* add parsing error warning to rotate root component file

* add comments

* add capabilities to controller

* update icon

* revert issuer details

* refactor pki info table rows

* add parsedparameters to pki helper

* add alert banner

* update attrs, fix info rows

* add endpoint to action router

* update alert banner

* hide toolbar from generate root display

* add download buttons to toolbar

* add banner getter

* fix typo in issuer details

* fix assertion

* move alert banner after generating root to parent

* rename issuer index route file

* refactor routing so model can be passed from route

* add confirmLeave and done button to use existin settings done form

* rename serial number to differentiate between two types

* fix links, update ids to issuerId not response id

* update ts declaration

* change variable names add comments

* update existing tests

* fix comment typo

* add download button test

* update serializer to change subject_serial_number to serial_number for backend

* remove pageTitle getter

* remove old arg

* round 1 of testing complete..

* finish endpoint tests

* finish component tests

* move toolbars to parent route

* add acceptance test for rotate route

* add const to hold radio button string values

* remove action, fix link
2023-03-31 15:47:23 -06:00

53 lines
2.1 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import { assert } from '@ember/debug';
import { encodePath } from 'vault/utils/path-encoding-helpers';
import ApplicationAdapter from '../application';
export default class PkiActionAdapter extends ApplicationAdapter {
namespace = 'v1';
urlForCreateRecord(modelName, snapshot) {
const { type } = snapshot.record;
const { actionType, useIssuer, issuerRef, mount } = snapshot.adapterOptions;
// if the backend mount is passed, we want that to override the URL's mount path
const backend = mount || snapshot.record.backend;
if (!backend || !actionType) {
throw new Error('URL for create record is missing required attributes');
}
const baseUrl = `${this.buildURL()}/${encodePath(backend)}`;
switch (actionType) {
case 'import':
return useIssuer ? `${baseUrl}/issuers/import/bundle` : `${baseUrl}/config/ca`;
case 'generate-root':
return useIssuer ? `${baseUrl}/issuers/generate/root/${type}` : `${baseUrl}/root/generate/${type}`;
case 'generate-csr':
return useIssuer
? `${baseUrl}/issuers/generate/intermediate/${type}`
: `${baseUrl}/intermediate/generate/${type}`;
case 'sign-intermediate':
return `${baseUrl}/issuer/${encodePath(issuerRef)}/sign-intermediate`;
case 'rotate-root':
return `${baseUrl}/root/rotate/${type}`;
default:
assert('actionType must be one of import, generate-root, generate-csr or sign-intermediate');
}
}
createRecord(store, type, snapshot) {
const serializer = store.serializerFor(type.modelName);
const url = this.urlForCreateRecord(type.modelName, snapshot);
// Send actionType as serializer requestType so that we serialize data based on the endpoint
const data = serializer.serialize(snapshot, snapshot.adapterOptions.actionType);
return this.ajax(url, 'POST', { data }).then((result) => ({
// pki/action endpoints don't correspond with a single specific entity,
// so in ember-data we'll map it to the request ID
id: result.request_id,
...result,
}));
}
}