mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-08 02:27:37 +00:00
Checkly group level sync support
This commit is contained in:
@@ -2121,94 +2121,178 @@ const syncSecretsCheckly = async ({
|
|||||||
accessToken: string;
|
accessToken: string;
|
||||||
appendices?: { prefix: string; suffix: string };
|
appendices?: { prefix: string; suffix: string };
|
||||||
}) => {
|
}) => {
|
||||||
let getSecretsRes = (
|
|
||||||
await standardRequest.get(`${INTEGRATION_CHECKLY_API_URL}/v1/variables`, {
|
|
||||||
headers: {
|
|
||||||
Authorization: `Bearer ${accessToken}`,
|
|
||||||
"Accept-Encoding": "application/json",
|
|
||||||
"X-Checkly-Account": integration.appId
|
|
||||||
}
|
|
||||||
})
|
|
||||||
).data.reduce(
|
|
||||||
(obj: any, secret: any) => ({
|
|
||||||
...obj,
|
|
||||||
[secret.key]: secret.value
|
|
||||||
}),
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
|
|
||||||
getSecretsRes = Object.keys(getSecretsRes).reduce(
|
if (integration.targetServiceId) {
|
||||||
(
|
let getGroupSecretsRes = (
|
||||||
result: {
|
await standardRequest.get(`${INTEGRATION_CHECKLY_API_URL}/v1/check-groups/${integration.targetServiceId}`, {
|
||||||
[key: string]: string;
|
|
||||||
},
|
|
||||||
key
|
|
||||||
) => {
|
|
||||||
if (
|
|
||||||
(appendices?.prefix !== undefined ? key.startsWith(appendices?.prefix) : true) &&
|
|
||||||
(appendices?.suffix !== undefined ? key.endsWith(appendices?.suffix) : true)
|
|
||||||
) {
|
|
||||||
result[key] = getSecretsRes[key];
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
|
|
||||||
// add secrets
|
|
||||||
for await (const key of Object.keys(secrets)) {
|
|
||||||
if (!(key in getSecretsRes)) {
|
|
||||||
// case: secret does not exist in checkly
|
|
||||||
// -> add secret
|
|
||||||
await standardRequest.post(
|
|
||||||
`${INTEGRATION_CHECKLY_API_URL}/v1/variables`,
|
|
||||||
{
|
|
||||||
key,
|
|
||||||
value: secrets[key].value
|
|
||||||
},
|
|
||||||
{
|
|
||||||
headers: {
|
|
||||||
Authorization: `Bearer ${accessToken}`,
|
|
||||||
Accept: "application/json",
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
"X-Checkly-Account": integration.appId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
// case: secret exists in checkly
|
|
||||||
// -> update/set secret
|
|
||||||
|
|
||||||
if (secrets[key] !== getSecretsRes[key]) {
|
|
||||||
await standardRequest.put(
|
|
||||||
`${INTEGRATION_CHECKLY_API_URL}/v1/variables/${key}`,
|
|
||||||
{
|
|
||||||
value: secrets[key].value
|
|
||||||
},
|
|
||||||
{
|
|
||||||
headers: {
|
|
||||||
Authorization: `Bearer ${accessToken}`,
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
Accept: "application/json",
|
|
||||||
"X-Checkly-Account": integration.appId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for await (const key of Object.keys(getSecretsRes)) {
|
|
||||||
if (!(key in secrets)) {
|
|
||||||
// delete secret
|
|
||||||
await standardRequest.delete(`${INTEGRATION_CHECKLY_API_URL}/v1/variables/${key}`, {
|
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${accessToken}`,
|
Authorization: `Bearer ${accessToken}`,
|
||||||
Accept: "application/json",
|
Accept: "application/json",
|
||||||
"X-Checkly-Account": integration.appId
|
"X-Checkly-Account": integration.appId
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
).data.environmentVariables.reduce(
|
||||||
|
(obj: any, secret: any) => ({
|
||||||
|
...obj,
|
||||||
|
[secret.key]: secret.value
|
||||||
|
}),
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
|
getGroupSecretsRes = Object.keys(getGroupSecretsRes).reduce(
|
||||||
|
(
|
||||||
|
result: {
|
||||||
|
[key: string]: string;
|
||||||
|
},
|
||||||
|
key
|
||||||
|
) => {
|
||||||
|
if (
|
||||||
|
(appendices?.prefix !== undefined ? key.startsWith(appendices?.prefix) : true) &&
|
||||||
|
(appendices?.suffix !== undefined ? key.endsWith(appendices?.suffix) : true)
|
||||||
|
) {
|
||||||
|
result[key] = getGroupSecretsRes[key];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
|
const groupEnvironmentVariables = Object.keys(secrets).map(key => ({
|
||||||
|
key,
|
||||||
|
value: secrets[key].value
|
||||||
|
}));
|
||||||
|
|
||||||
|
// add secrets
|
||||||
|
for await (const key of Object.keys(secrets)) {
|
||||||
|
|
||||||
|
if (!(key in getGroupSecretsRes)) {
|
||||||
|
// case: secret does not exist in checkly group
|
||||||
|
// -> add secret
|
||||||
|
|
||||||
|
await standardRequest.put(
|
||||||
|
`${INTEGRATION_CHECKLY_API_URL}/v1/check-groups/${integration.targetServiceId}`,
|
||||||
|
{
|
||||||
|
environmentVariables: groupEnvironmentVariables
|
||||||
|
},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${accessToken}`,
|
||||||
|
Accept: "application/json",
|
||||||
|
"X-Checkly-Account": integration.appId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// case: secret exists in checkly group
|
||||||
|
// -> update/set secret
|
||||||
|
|
||||||
|
if (secrets[key] !== getGroupSecretsRes[key]) {
|
||||||
|
await standardRequest.put(
|
||||||
|
`${INTEGRATION_CHECKLY_API_URL}/v1/check-groups/${integration.targetServiceId}`,
|
||||||
|
{
|
||||||
|
environmentVariables: groupEnvironmentVariables
|
||||||
|
},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${accessToken}`,
|
||||||
|
Accept: "application/json",
|
||||||
|
"X-Checkly-Account": integration.appId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
let getSecretsRes = (
|
||||||
|
await standardRequest.get(`${INTEGRATION_CHECKLY_API_URL}/v1/variables`, {
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${accessToken}`,
|
||||||
|
"Accept-Encoding": "application/json",
|
||||||
|
"X-Checkly-Account": integration.appId
|
||||||
|
}
|
||||||
|
})
|
||||||
|
).data.reduce(
|
||||||
|
(obj: any, secret: any) => ({
|
||||||
|
...obj,
|
||||||
|
[secret.key]: secret.value
|
||||||
|
}),
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
|
getSecretsRes = Object.keys(getSecretsRes).reduce(
|
||||||
|
(
|
||||||
|
result: {
|
||||||
|
[key: string]: string;
|
||||||
|
},
|
||||||
|
key
|
||||||
|
) => {
|
||||||
|
if (
|
||||||
|
(appendices?.prefix !== undefined ? key.startsWith(appendices?.prefix) : true) &&
|
||||||
|
(appendices?.suffix !== undefined ? key.endsWith(appendices?.suffix) : true)
|
||||||
|
) {
|
||||||
|
result[key] = getSecretsRes[key];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
|
// add secrets
|
||||||
|
for await (const key of Object.keys(secrets)) {
|
||||||
|
if (!(key in getSecretsRes)) {
|
||||||
|
// case: secret does not exist in checkly
|
||||||
|
// -> add secret
|
||||||
|
await standardRequest.post(
|
||||||
|
`${INTEGRATION_CHECKLY_API_URL}/v1/variables`,
|
||||||
|
{
|
||||||
|
key,
|
||||||
|
value: secrets[key].value
|
||||||
|
},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${accessToken}`,
|
||||||
|
Accept: "application/json",
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"X-Checkly-Account": integration.appId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// case: secret exists in checkly
|
||||||
|
// -> update/set secret
|
||||||
|
|
||||||
|
if (secrets[key] !== getSecretsRes[key]) {
|
||||||
|
await standardRequest.put(
|
||||||
|
`${INTEGRATION_CHECKLY_API_URL}/v1/variables/${key}`,
|
||||||
|
{
|
||||||
|
value: secrets[key].value
|
||||||
|
},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${accessToken}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
Accept: "application/json",
|
||||||
|
"X-Checkly-Account": integration.appId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for await (const key of Object.keys(getSecretsRes)) {
|
||||||
|
if (!(key in secrets)) {
|
||||||
|
// delete secret
|
||||||
|
await standardRequest.delete(`${INTEGRATION_CHECKLY_API_URL}/v1/variables/${key}`, {
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${accessToken}`,
|
||||||
|
Accept: "application/json",
|
||||||
|
"X-Checkly-Account": integration.appId
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -84,6 +84,16 @@ export default function ChecklyCreateIntegrationPage() {
|
|||||||
}
|
}
|
||||||
}, [integrationAuthApps]);
|
}, [integrationAuthApps]);
|
||||||
|
|
||||||
|
const handleValueChange = (val) => {
|
||||||
|
const selectedGroup = integrationAuthGroups.find(group => group.name === val);
|
||||||
|
if (selectedGroup) {
|
||||||
|
setTargetGroupId(selectedGroup.groupId);
|
||||||
|
} else {
|
||||||
|
setTargetGroupId("");
|
||||||
|
}
|
||||||
|
setTargetGroup(val);
|
||||||
|
}
|
||||||
|
|
||||||
const handleButtonClick = async () => {
|
const handleButtonClick = async () => {
|
||||||
try {
|
try {
|
||||||
if (!integrationAuth?._id) return;
|
if (!integrationAuth?._id) return;
|
||||||
@@ -96,6 +106,8 @@ export default function ChecklyCreateIntegrationPage() {
|
|||||||
app: targetApp,
|
app: targetApp,
|
||||||
appId: targetAppId,
|
appId: targetAppId,
|
||||||
sourceEnvironment: selectedSourceEnvironment,
|
sourceEnvironment: selectedSourceEnvironment,
|
||||||
|
targetService: targetGroup,
|
||||||
|
targetServiceId: targetGroupId.toString(),
|
||||||
secretPath,
|
secretPath,
|
||||||
metadata: {
|
metadata: {
|
||||||
secretSuffix
|
secretSuffix
|
||||||
@@ -188,7 +200,7 @@ export default function ChecklyCreateIntegrationPage() {
|
|||||||
<FormControl label="Checkly Group">
|
<FormControl label="Checkly Group">
|
||||||
<Select
|
<Select
|
||||||
value={targetGroup}
|
value={targetGroup}
|
||||||
onValueChange={(val) => setTargetGroup(val)}
|
onValueChange={handleValueChange}
|
||||||
className="w-full border border-mineshaft-500"
|
className="w-full border border-mineshaft-500"
|
||||||
>
|
>
|
||||||
<SelectItem value="">
|
<SelectItem value="">
|
||||||
|
|||||||
Reference in New Issue
Block a user