Skip to content

Commit 18d3ee7

Browse files
feat(okms): add CAS parameter support for creating secret versions
ref: #MANAGER-19608 Signed-off-by: Mathieu Mousnier <[email protected]>
1 parent 82d6083 commit 18d3ee7

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

packages/manager/apps/key-management-service/src/modules/secret-manager/data/api/secretVersions.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,27 @@ export type CreateSecretVersionParams = {
3838
okmsId: string;
3939
path: string;
4040
data: CreateSecretVersionBody;
41+
cas?: number;
4142
};
4243

4344
export const createSecretVersion = async ({
4445
okmsId,
4546
path,
4647
data,
48+
cas,
4749
}: CreateSecretVersionParams) => {
50+
const queryParams = new URLSearchParams();
51+
if (cas) {
52+
queryParams.set('cas', cas.toString());
53+
}
54+
const queryString = queryParams.toString();
55+
const url = `okms/resource/${okmsId}/secret/${encodeURIComponent(
56+
path,
57+
)}/version${queryString ? `?${queryString}` : ''}`;
58+
4859
const { data: response } = await apiClient.v2.post<
4960
CreateSecretVersionResponse
50-
>(`okms/resource/${okmsId}/secret/${encodeURIComponent(path)}/version`, {
61+
>(url, {
5162
data,
5263
});
5364
return response;

packages/manager/apps/key-management-service/src/modules/secret-manager/pages/drawers/createVersionDrawer/CreateVersionDrawer.page.spec.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react';
22
import { vi } from 'vitest';
33
import { SECRET_MANAGER_ROUTES_URLS } from '@secret-manager/routes/routes.constants';
4-
import { mockSecret1WithData } from '@secret-manager/mocks/secrets/secrets.mock';
4+
import { mockSecret2WithData } from '@secret-manager/mocks/secrets/secrets.mock';
55
import { screen, act, fireEvent, waitFor } from '@testing-library/react';
66
import userEvent from '@testing-library/user-event';
77
import {
@@ -13,11 +13,12 @@ import {
1313
getOdsButtonByLabel,
1414
WAIT_FOR_DEFAULT_OPTIONS,
1515
} from '@ovh-ux/manager-core-test-utils';
16+
import * as secretVersionsApi from '@secret-manager/data/api/secretVersions';
1617
import { renderTestApp } from '@/utils/tests/renderTestApp';
1718
import { labels } from '@/utils/tests/init.i18n';
1819

1920
const mockDomainId = '123123';
20-
const mockSecretPath = mockSecret1WithData.path;
21+
const mockSecretPath = mockSecret2WithData.path;
2122
const mockPageUrl = SECRET_MANAGER_ROUTES_URLS.secretVersionsDrawerCreateVersion(
2223
mockDomainId,
2324
mockSecretPath,
@@ -83,12 +84,15 @@ describe('Secret create version drawer page test suite', () => {
8384
// Check if the data input contains the secret value
8485
expect(dataInput).toBeInTheDocument();
8586
expect(dataInput).toHaveValue(
86-
JSON.stringify(mockSecret1WithData.version.data),
87+
JSON.stringify(mockSecret2WithData.version.data),
8788
);
8889
});
8990

90-
it('should close the drawer after submission', async () => {
91+
it('should add cas to the createSecretVersion request and close the drawer after submission', async () => {
9192
const { container, user } = await renderPage();
93+
vi.spyOn(secretVersionsApi, 'createSecretVersion').mockResolvedValue(
94+
mockSecret2WithData.version,
95+
);
9296

9397
// Get the data input
9498
const dataInput = await screen.findByTestId(DATA_INPUT_TEST_ID);
@@ -115,6 +119,16 @@ describe('Secret create version drawer page test suite', () => {
115119

116120
await act(() => user.click(submitButton));
117121

122+
// Wait for the createSecretVersion to be called
123+
await waitFor(() => {
124+
expect(secretVersionsApi.createSecretVersion).toHaveBeenCalledWith({
125+
okmsId: mockDomainId,
126+
path: mockSecret2WithData.path,
127+
data: JSON.parse(MOCK_DATA_VALID_JSON),
128+
cas: mockSecret2WithData.metadata.currentVersion,
129+
});
130+
});
131+
118132
// Wait for the drawer to close
119133
await waitFor(() => {
120134
expect(

packages/manager/apps/key-management-service/src/modules/secret-manager/pages/drawers/createVersionDrawer/CreateVersionDrawer.page.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ const CreateVersionDrawerForm = ({
6363
okmsId: domainId,
6464
path: decodeSecretPath(secretPath),
6565
data: JSON.parse(data.data),
66+
// Add current version to cas parameter if cas is required
67+
cas: secret?.metadata?.casRequired
68+
? secret?.metadata?.currentVersion
69+
: undefined,
6670
});
6771
onDismiss();
6872
};

0 commit comments

Comments
 (0)