diff --git a/backend/src/helpers/integration.ts b/backend/src/helpers/integration.ts
index a9d62f92f..d0e775bfc 100644
--- a/backend/src/helpers/integration.ts
+++ b/backend/src/helpers/integration.ts
@@ -84,7 +84,6 @@ const handleOAuthExchangeHelper = async ({
}).save();
} catch (err) {
- console.error('in', err);
Sentry.setUser(null);
Sentry.captureException(err);
throw new Error('Failed to handle OAuth2 code-token exchange')
@@ -184,7 +183,7 @@ const getIntegrationAuthAccessHelper = async ({ integrationAuthId }: { integrati
try {
const integrationAuth = await IntegrationAuth
.findById(integrationAuthId)
- .select('+accessCiphertext +accessIV +accessTag');
+ .select('workspace integration +accessCiphertext +accessIV +accessTag +accessExpiresAt + refreshCiphertext');
if (!integrationAuth) throw new Error('Failed to find integration auth');
diff --git a/frontend/components/integrations/CloudIntegration.tsx b/frontend/components/integrations/CloudIntegration.tsx
index 4fb53d145..bafb28b20 100644
--- a/frontend/components/integrations/CloudIntegration.tsx
+++ b/frontend/components/integrations/CloudIntegration.tsx
@@ -5,77 +5,76 @@ import {
faCheck,
faX,
} from "@fortawesome/free-solid-svg-icons";
+import deleteIntegrationAuth from "../../pages/api/integrations/DeleteIntegrationAuth";
-interface Props {
- integration: IntegrationOption;
- setSelectedIntegrationOption: () => void;
- integrationOptionPress: () => void;
- deleteIntegrationAuth: () => void;
- authorizations: any;
-}
-
-interface IntegrationOption {
+interface CloudIntegrationOption {
name: string;
type: string;
clientId: string;
docsLink: string;
}
+interface Props {
+ cloudIntegrationOption: CloudIntegrationOption;
+ setSelectedIntegrationOption: () => void;
+ integrationOptionPress: () => void;
+ integrationAuths: any;
+}
+
const CloudIntegration = ({
- integration,
+ cloudIntegrationOption,
setSelectedIntegrationOption,
integrationOptionPress,
- deleteIntegrationAuth,
- authorizations
+ integrationAuths
}: Props) => {
- return authorizations ? (
+ return integrationAuths ? (
{
- if (!["Heroku"].includes(integration.name)) return;
- setSelectedIntegrationOption(integration);
+ if (!["Heroku"].includes(cloudIntegrationOption.name)) return;
+ setSelectedIntegrationOption(cloudIntegrationOption);
integrationOptionPress({
- integrationOption: integration
+ integrationOption: cloudIntegrationOption
});
}}
- key={integration.name}
+ key={cloudIntegrationOption.name}
>
- {integration.name.split(" ").length > 2 ? (
+ {cloudIntegrationOption.name.split(" ").length > 2 ? (
-
{integration.name.split(" ")[0]}
+
{cloudIntegrationOption.name.split(" ")[0]}
- {integration.name.split(" ")[1]}{" "}
- {integration.name.split(" ")[2]}
+ {cloudIntegrationOption.name.split(" ")[1]}{" "}
+ {cloudIntegrationOption.name.split(" ")[2]}
) : (
- {integration.name}
+ {cloudIntegrationOption.name}
)}
- {["Heroku"].includes(integration.name) &&
- authorizations
+ {["Heroku"].includes(cloudIntegrationOption.name) &&
+ integrationAuths
.map((authorization) => authorization.integration)
- .includes(integration.name.toLowerCase()) && (
+ .includes(cloudIntegrationOption.name.toLowerCase()) && (
{
deleteIntegrationAuth({
- integrationAuthId: authorizations
+ integrationAuthId: integrationAuths
.filter(
(authorization) =>
authorization.integration ==
- integration.name.toLowerCase()
+ cloudIntegrationOption.name.toLowerCase()
)
.map((authorization) => authorization._id)[0],
});
@@ -98,7 +97,7 @@ const CloudIntegration = ({
)}
- {!["Heroku"].includes(integration.name) && (
+ {!["Heroku"].includes(cloudIntegrationOption.name) && (
Coming Soon
diff --git a/frontend/components/integrations/CloudIntegrationSection.tsx b/frontend/components/integrations/CloudIntegrationSection.tsx
index 75391275f..87ff74df1 100644
--- a/frontend/components/integrations/CloudIntegrationSection.tsx
+++ b/frontend/components/integrations/CloudIntegrationSection.tsx
@@ -1,7 +1,7 @@
import React from "react";
import CloudIntegration from "./CloudIntegration";
-interface IntegrationOption {
+interface CloudIntegrationOption {
name: string;
type: string;
clientId: string;
@@ -9,39 +9,34 @@ interface IntegrationOption {
}
interface Props {
- projectIntegrations: any;
- integrations: IntegrationOption[];
+ cloudIntegrationOptions: CloudIntegrationOption[];
setSelectedIntegrationOption: () => void;
integrationOptionPress: () => void;
- deleteIntegrationAuth: () => void;
- authorizations: any;
+ integrationAuths: any;
}
const CloudIntegrationSection = ({
- projectIntegrations,
- integrations,
+ cloudIntegrationOptions,
setSelectedIntegrationOption,
integrationOptionPress,
- deleteIntegrationAuth,
- authorizations
+ integrationAuths
}: Props) => {
return (
<>
-
0 ? 'mt-12' : 'mt-6'} text-xl max-w-5xl px-2`}>
+
Cloud Integrations
Click on an integration to begin syncing secrets to it.
- {integrations.map((integration) => (
+ {cloudIntegrationOptions.map((cloudIntegrationOption) => (
))}
diff --git a/frontend/components/integrations/Integration.tsx b/frontend/components/integrations/Integration.tsx
index 6fd31ef2d..fa203b9bd 100644
--- a/frontend/components/integrations/Integration.tsx
+++ b/frontend/components/integrations/Integration.tsx
@@ -15,7 +15,7 @@ import getIntegrationApps from "../../pages/api/integrations/GetIntegrationApps"
import Button from "~/components/basic/buttons/Button";
import ListBox from "~/components/basic/Listbox";
-interface ProjectIntegration {
+interface Integration {
app?: string;
environment: string;
integration: string;
@@ -24,28 +24,29 @@ interface ProjectIntegration {
}
const Integration = ({
- projectIntegration
+ integration
}: {
- projectIntegration: ProjectIntegration;
+ integration: Integration;
}) => {
const [integrationEnvironment, setIntegrationEnvironment] = useState(
- reverseEnvMapping[projectIntegration.environment]
+ reverseEnvMapping[integration.environment]
);
const [fileState, setFileState] = useState([]);
const router = useRouter();
const [apps, setApps] = useState([]);
const [integrationApp, setIntegrationApp] = useState(
- projectIntegration.app ? projectIntegration.app : apps[0]
+ integration.app ? integration.app : apps[0]
);
useEffect(async () => {
const tempHerokuApps = await getIntegrationApps({
- integrationAuthId: projectIntegration.integrationAuth,
+ integrationAuthId: integration.integrationAuth,
});
+
const tempHerokuAppNames = tempHerokuApps.map((app) => app.name);
setApps(tempHerokuAppNames);
setIntegrationApp(
- projectIntegration.app ? projectIntegration.app : tempHerokuAppNames[0]
+ integration.app ? integration.app : tempHerokuAppNames[0]
);
}, []);
@@ -59,7 +60,7 @@ const Integration = ({
- {projectIntegration.integration.charAt(0).toUpperCase() +
- projectIntegration.integration.slice(1)}
+ {integration.integration.charAt(0).toUpperCase() +
+ integration.integration.slice(1)}
@@ -87,14 +88,14 @@ const Integration = ({
HEROKU APP
- {projectIntegration.isActive ? (
+ {integration.isActive ? (
{
const result = await updateIntegration({
- integrationId: projectIntegration._id,
+ integrationId: integration._id,
environment: envMapping[integrationEnvironment],
app: integrationApp,
isActive: true
@@ -122,7 +123,7 @@ const Integration = ({