diff --git a/packages/insomnia/src/ui/components/settings/cloud-service-credentials.tsx b/packages/insomnia/src/ui/components/settings/cloud-service-credentials.tsx
deleted file mode 100644
index 743e388d8d..0000000000
--- a/packages/insomnia/src/ui/components/settings/cloud-service-credentials.tsx
+++ /dev/null
@@ -1,184 +0,0 @@
-import React, { useState } from 'react';
-import { Button, Menu, MenuItem, MenuTrigger, Popover } from 'react-aria-components';
-import { useFetcher } from 'react-router-dom';
-
-import { type CloudProviderCredential, type CloudProviderName, getProviderDisplayName } from '../../../models/cloud-credential';
-import { usePlanData } from '../../hooks/use-plan';
-import { useRootLoaderData } from '../../routes/root';
-import { Icon } from '../icon';
-import { showModal } from '../modals';
-import { AskModal } from '../modals/ask-modal';
-import { CloudCredentialModal } from '../modals/cloud-credential-modal/cloud-credential-modal';
-import { UpgradeNotice } from '../upgrade-notices';
-import { NumberSetting } from './number-setting';
-
-interface createCredentialItemType {
- name: string;
- id: CloudProviderName;
-}
-const createCredentialItemList: createCredentialItemType[] = [
- {
- id: 'aws',
- name: getProviderDisplayName('aws'),
- },
- // TODO only support aws for now
- // {
- // id: 'azure',
- // name: getProviderDisplayName('azure'),
- // },
- // {
- // id: 'gcp',
- // name: getProviderDisplayName('gcp'),
- // },
-];
-const buttonClassName = 'disabled:opacity-50 h-7 aspect-square aria-pressed:bg-[--hl-sm] rounded-sm text-[--color-font] hover:bg-[--hl-xs] transition-all text-sm py-1 px-2';
-
-export const CloudServiceCredentialList = () => {
- const { isOwner, isEnterprisePlan } = usePlanData();
- const { cloudCredentials } = useRootLoaderData();
- const [modalState, setModalState] = useState<{ show: boolean; provider: CloudProviderName; credential?: CloudProviderCredential }>();
- const deleteCredentialFetcher = useFetcher();
-
- const handleDeleteItem = (id: string, name: string) => {
- showModal(AskModal, {
- title: 'Delete Cloud Credential?',
- message: `Are you sure to delete ${name}?`,
- onDone: async (isYes: boolean) => {
- if (isYes) {
- deleteCredentialFetcher.submit({}, {
- action: `/cloud-credential/${id}/delete`,
- method: 'delete',
- });
- }
- },
- });
- };
-
- const hideModal = () => {
- setModalState(prevState => {
- const newState = {
- show: false,
- provider: prevState!.provider,
- credentials: undefined,
- };
- return newState;
- });
- };
-
- if (!isEnterprisePlan) {
- return (
-
- );
- }
-
- return (
-
-
-
Service Provider Credential List
-
-
-
-
-
-
-
- {cloudCredentials.length === 0 ?
-
No cloud servicie provider credentials found
:
-
-
-
- | Name |
- Service Provider |
- Action |
-
-
-
- {cloudCredentials.map(cloudCred => {
- const { _id, name, provider } = cloudCred;
- return (
-
- |
- {name}
- |
-
- {getProviderDisplayName(provider!)}
- |
-
-
-
-
-
- |
-
- );
- })}
-
-
- }
-
-
Cloud Secret Config
-
-
-
-
-
- {modalState && modalState.show &&
-
- }
-
- );
-};
diff --git a/packages/insomnia/src/ui/components/templating/external-vault/aws-secret-manager-form.tsx b/packages/insomnia/src/ui/components/templating/external-vault/aws-secret-manager-form.tsx
deleted file mode 100644
index a444b5741f..0000000000
--- a/packages/insomnia/src/ui/components/templating/external-vault/aws-secret-manager-form.tsx
+++ /dev/null
@@ -1,132 +0,0 @@
-import React, { useState } from 'react';
-
-import type { AWSSecretConfig } from '../../../../main/ipc/cloud-service-integration/types';
-import type { NunjucksParsedTag } from '../../../../templating/utils';
-import { HelpTooltip } from '../../help-tooltip';
-
-export interface AWSSecretManagerFormProps {
- formData: AWSSecretConfig;
- onChange: (newConfig: AWSSecretConfig) => void;
- activeTagData: NunjucksParsedTag;
-}
-const secretTypeOptions = [
- {
- key: 'plaintext',
- label: 'Plaintext',
- },
- {
- key: 'kv',
- label: 'Key/Value',
- },
-];
-
-export const AWSSecretManagerForm = (props: AWSSecretManagerFormProps) => {
- const { formData, onChange } = props;
- const {
- SecretId,
- SecretType,
- VersionId = '',
- VersionStage = '',
- SecretKey = '',
- } = formData;
- const [showSecretKeyInput, setShowSecretKeyInput] = useState(SecretType === 'kv');
- const handleOnChange = (name: keyof AWSSecretConfig) => {
- const formElement = document.getElementById('aws-secret-manager-form') as HTMLFormElement;
- if (formElement) {
- const formData = new FormData(formElement);
- const newConfig = Object.fromEntries(formData.entries());
- if (name === 'SecretType') {
- const secretTypeValue = newConfig['SecretType'];
- setShowSecretKeyInput(secretTypeValue === 'kv');
- if (secretTypeValue === 'plaintext') {
- newConfig['SecretKey'] = '';
- }
- };
- onChange(newConfig as unknown as AWSSecretConfig);
- }
- };
- return (
-
- );
-};
diff --git a/packages/insomnia/src/ui/components/templating/external-vault/external-vault-form.tsx b/packages/insomnia/src/ui/components/templating/external-vault/external-vault-form.tsx
deleted file mode 100644
index 5439c3b19a..0000000000
--- a/packages/insomnia/src/ui/components/templating/external-vault/external-vault-form.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import React, { useState } from 'react';
-import { Button } from 'react-aria-components';
-
-import { debounce } from '../../../../common/misc';
-import type { AWSSecretConfig } from '../../../../main/ipc/cloud-service-integration/types';
-import { type CloudProviderCredential, type CloudProviderName, type } from '../../../../models/cloud-credential';
-import { Icon } from '../../icon';
-import { CloudCredentialModal } from '../../modals/cloud-credential-modal/cloud-credential-modal';
-import type { ArgConfigFormProps } from '../tag-editor-arg-sub-form';
-import { AWSSecretManagerForm } from './aws-secret-manager-form';
-
-export const ExternalVaultForm = (props: ArgConfigFormProps) => {
- const { onChange, configValue, activeTagData, docs } = props;
- const [showModal, setShowModal] = useState(false);
- const formData = JSON.parse(configValue) as AWSSecretConfig;
- const provider = activeTagData.args[0].value as CloudProviderName;
- const selectedCredentialId = activeTagData.args[1].value;
- const cloudCredentialDocs = docs[type] as CloudProviderCredential[] || [];
- const selectedCredentialDoc = cloudCredentialDocs.find(d => d._id === selectedCredentialId);
-
- const handleFormChange = debounce((newConfig: AWSSecretConfig) => {
- const newFormValue = JSON.stringify(newConfig);
- onChange(newFormValue);
- }, 1000);
- let SubForm;
-
- switch (provider) {
- case 'aws':
- SubForm = ;
- break;
- default:
- SubForm = null;
- };
-
- return (
- <>
- {selectedCredentialDoc &&
-
- }
- {SubForm}
- {showModal &&
- setShowModal(false)}
- />
- }
- >
- );
-};
diff --git a/packages/insomnia/src/ui/components/templating/local-template-tags.ts b/packages/insomnia/src/ui/components/templating/local-template-tags.ts
index e806d53aec..70e9b79dba 100644
--- a/packages/insomnia/src/ui/components/templating/local-template-tags.ts
+++ b/packages/insomnia/src/ui/components/templating/local-template-tags.ts
@@ -7,11 +7,6 @@ import os from 'os';
import { CookieJar } from 'tough-cookie';
import * as uuid from 'uuid';
-import type { RenderPurpose } from '../../../common/render';
-import type { AWSSecretConfig } from '../../../main/ipc/cloud-service-integration/types';
-import * as models from '../../../models';
-import type { CloudProviderCredential, CloudProviderName } from '../../../models/cloud-credential';
-import { vaultEnvironmentMaskValue } from '../../../models/environment';
import type { Request, RequestParameter } from '../../../models/request';
import type { Response } from '../../../models/response';
import type { TemplateTag } from '../../../plugins';
@@ -21,100 +16,6 @@ import { buildQueryStringFromParams, joinUrlAndQueryString, smartEncodeUrl } fro
import { fakerFunctions } from './faker-functions';
const localTemplatePlugins: { templateTag: PluginTemplateTag }[] = [
- {
- templateTag: {
- name: 'vault',
- displayName: 'External Vault',
- description: 'Link secret from external vault',
- // external vault is an enterprise feature
- needsEnterprisePlan: true,
- args: [
- {
- displayName: 'Vault Service Provider',
- type: 'enum',
- options: [
- { displayName: 'AWS Secrets Manager', value: 'aws' },
- ],
- },
- {
- displayName: 'Credential For Vault Service Provider',
- type: 'model',
- modelFilter: (credentialModel, args) => {
- const providerNameFromArg = args[0].value;
- const { provider } = credentialModel as CloudProviderCredential;
- return providerNameFromArg === provider;
- },
- model: 'CloudCredential',
- },
- {
- type: 'string',
- defaultValue: '{}',
- requireSubForm: true,
- },
- ],
- async run(context, provider: CloudProviderName, credentialId: string, configStr: string) {
- if (!provider) {
- throw new Error('Vault service provider is required');
- }
- if (!credentialId) {
- throw new Error('Credential is required');
- };
- const providerCredential = await models.cloudCrendential.getById(credentialId);
- if (!providerCredential) {
- throw new Error('No Cloud Credential found');
- }
- const renderContext = context.renderPurpose as RenderPurpose;
- // Get secret from external vaults when send request or in tag-preview, otherwise return defautl mask value
- if (renderContext === 'preview' || renderContext === 'send') {
- let secretConfig = {};
- try {
- secretConfig = JSON.parse(configStr);
- } catch (error) {
- throw new Error('Invalid vault secret config');
- }
- if (provider === 'aws') {
- const {
- SecretId, VersionId, VersionStage, SecretKey,
- SecretType = 'plaintext',
- } = secretConfig as AWSSecretConfig;
- if (!SecretId) {
- throw new Error('Secret Name or ARN is required');
- }
- const getSecretOption = {
- provider,
- secretId: SecretId,
- config: {
- VersionId, VersionStage,
- },
- credentials: providerCredential.credentials,
- };
- const secretResult = await window.main.cloudService.getSecret(getSecretOption);
- const { success, error, result } = secretResult;
- if (success && result) {
- const { SecretString } = result!;
- let parsedJSON;
- if (SecretType === 'plaintext' || !SecretKey) {
- return SecretString;
- } else {
- try {
- parsedJSON = JSON.parse(SecretString || '{}');
- } catch (error) {
- throw new Error(`Secret value ${SecretString} can not parsed to key/value pair, please change Secret Type to plaintext`);
- }
- if (SecretKey in parsedJSON) {
- return parsedJSON[SecretKey];
- }
- throw new Error(`Secret key ${SecretKey} does not exist in key/value secret ${SecretString}`);
- }
- } else {
- throw new Error(error?.errorMessage);
- }
- }
- }
- return vaultEnvironmentMaskValue;
- },
- },
- },
{
templateTag: {
name: 'faker',