diff --git a/backend/src/models/integration/integration.ts b/backend/src/models/integration/integration.ts index 7a7775bac..9bc378f28 100644 --- a/backend/src/models/integration/integration.ts +++ b/backend/src/models/integration/integration.ts @@ -187,7 +187,8 @@ const integrationSchema = new Schema( default: "/", }, metadata: { - type: Schema.Types.Mixed + type: Schema.Types.Mixed, + default: {} } }, { diff --git a/frontend/src/pages/integrations/gcp-secret-manager/authorize.tsx b/frontend/src/pages/integrations/gcp-secret-manager/authorize.tsx index d38c09887..91755cc4c 100644 --- a/frontend/src/pages/integrations/gcp-secret-manager/authorize.tsx +++ b/frontend/src/pages/integrations/gcp-secret-manager/authorize.tsx @@ -1,6 +1,7 @@ import crypto from "crypto"; import { useState } from "react"; +import { Controller, useForm } from "react-hook-form"; import Head from "next/head"; import Image from "next/image"; import Link from "next/link"; @@ -8,6 +9,8 @@ import { useRouter } from "next/router"; import { faGoogle } from "@fortawesome/free-brands-svg-icons"; import { faArrowUpRightFromSquare, faBookOpen } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { yupResolver } from "@hookform/resolvers/yup"; +import * as yup from "yup"; import { useGetCloudIntegrations, @@ -15,39 +18,27 @@ import { import { Button, Card, CardTitle, FormControl, TextArea } from "../../../components/v2"; +const schema = yup.object({ + accessToken: yup.string().required("Service Account JSON cannot be empty") +}); + +type FormData = yup.InferType; + export default function GCPSecretManagerAuthorizeIntegrationPage() { const router = useRouter(); + + const { + control, + handleSubmit + } = useForm({ + resolver: yupResolver(schema) + }); + const { data: cloudIntegrations } = useGetCloudIntegrations(); const { mutateAsync } = useSaveIntegrationAccessToken(); - const [accessToken, setAccessToken] = useState(""); - const [accessTokenErrorText, setAccessTokenErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); - - const handleIntegrateWithPAT = async () => { - try { - setAccessTokenErrorText(""); - if (accessToken.length === 0) { - setAccessTokenErrorText("Service account JSON cannot be blank"); - return; - } - - setIsLoading(true); - - const integrationAuth = await mutateAsync({ - workspaceId: localStorage.getItem("projectData.id"), - integration: "gcp-secret-manager", - refreshToken: accessToken - }); - - setIsLoading(false); - - router.push(`/integrations/gcp-secret-manager/create?integrationAuthId=${integrationAuth._id}`); - } catch (err) { - console.error(err); - } - }; const handleIntegrateWithOAuth = () => { if (!cloudIntegrations) return; @@ -61,6 +52,26 @@ export default function GCPSecretManagerAuthorizeIntegrationPage() { const link = `https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/cloud-platform&response_type=code&access_type=offline&state=${state}&redirect_uri=${window.location.origin}/integrations/gcp-secret-manager/oauth2/callback&client_id=${integrationOption.clientId}`; window.location.assign(link); } + + const onFormSubmit = async ({ + accessToken + }: FormData) => { + try { + setIsLoading(true); + + const integrationAuth = await mutateAsync({ + workspaceId: localStorage.getItem("projectData.id"), + integration: "gcp-secret-manager", + refreshToken: accessToken + }); + + setIsLoading(false); + router.push(`/integrations/gcp-secret-manager/create?integrationAuthId=${integrationAuth._id}`); + } catch (err) { + console.error(err); + setIsLoading(false); + } + } return (
@@ -94,7 +105,7 @@ export default function GCPSecretManagerAuthorizeIntegrationPage() {
-
+
+
+
+ or +
+
-
-
- or -
-
- -