diff --git a/docs/images/integrations-cloudflare-auth.png b/docs/images/integrations-cloudflare-auth.png new file mode 100644 index 000000000..c714a21cc Binary files /dev/null and b/docs/images/integrations-cloudflare-auth.png differ diff --git a/docs/images/integrations-cloudflare-create.png b/docs/images/integrations-cloudflare-create.png new file mode 100644 index 000000000..d70533719 Binary files /dev/null and b/docs/images/integrations-cloudflare-create.png differ diff --git a/docs/images/integrations-cloudflare-credentials-1.png b/docs/images/integrations-cloudflare-credentials-1.png new file mode 100644 index 000000000..4035cfb92 Binary files /dev/null and b/docs/images/integrations-cloudflare-credentials-1.png differ diff --git a/docs/images/integrations-cloudflare-credentials-2.png b/docs/images/integrations-cloudflare-credentials-2.png new file mode 100644 index 000000000..c3794bdc9 Binary files /dev/null and b/docs/images/integrations-cloudflare-credentials-2.png differ diff --git a/docs/images/integrations-cloudflare-credentials-3.png b/docs/images/integrations-cloudflare-credentials-3.png new file mode 100644 index 000000000..0777fa1f7 Binary files /dev/null and b/docs/images/integrations-cloudflare-credentials-3.png differ diff --git a/docs/images/integrations-cloudflare-credentials-4.png b/docs/images/integrations-cloudflare-credentials-4.png new file mode 100644 index 000000000..957305ec7 Binary files /dev/null and b/docs/images/integrations-cloudflare-credentials-4.png differ diff --git a/docs/images/integrations-cloudflare.png b/docs/images/integrations-cloudflare.png new file mode 100644 index 000000000..69aefe6a4 Binary files /dev/null and b/docs/images/integrations-cloudflare.png differ diff --git a/docs/integrations/cloud/checkly.mdx b/docs/integrations/cloud/checkly.mdx index 54b2e7ac5..90c0850d3 100644 --- a/docs/integrations/cloud/checkly.mdx +++ b/docs/integrations/cloud/checkly.mdx @@ -31,7 +31,7 @@ Press on the Checkly tile and input your Checkly API Key to grant Infisical acce ## Start integration -Select which Infisical environment secrets you want to sync to Checkly press create integration to start syncing secrets. +Select which Infisical environment secrets you want to sync to Checkly and press create integration to start syncing secrets. ![integrations checkly](../../images/integrations-checkly-create.png) -![integrations checkly](../../images/integrations-checkly.png) \ No newline at end of file +![integrations checkly](../../images/integrations-checkly.png) diff --git a/docs/integrations/cloud/cloudflare-pages.mdx b/docs/integrations/cloud/cloudflare-pages.mdx new file mode 100644 index 000000000..4a95a006a --- /dev/null +++ b/docs/integrations/cloud/cloudflare-pages.mdx @@ -0,0 +1,44 @@ +--- +title: "Cloudflare Pages" +description: "How to sync secrets from Infisical to Cloudflare Pages" +--- + +Prerequisites: + +- Set up and add envars to [Infisical Cloud](https://app.infisical.com) + +## Navigate to your project's integrations tab + +![integrations](../../images/integrations.png) + +## Authorize Infisical for Cloudflare Pages + +Obtain a Cloudflare [API token](https://dash.cloudflare.com/profile/api-tokens) and [Account ID](https://developers.cloudflare.com/fundamentals/get-started/basic-tasks/find-account-and-zone-ids/): + +1. Create a new [API token](https://dash.cloudflare.com/profile/api-tokens) in My Profile > API Tokens + +![integrations cloudflare credentials 1](../../images/integrations-cloudflare-credentials-1.png) +![integrations cloudflare credentials 2](../../images/integrations-cloudflare-credentials-2.png) +![integrations cloudflare credentials 3](../../images/integrations-cloudflare-credentials-3.png) + +2. Copy your [Account ID](https://developers.cloudflare.com/fundamentals/get-started/basic-tasks/find-account-and-zone-ids/) from Account > Workers & Pages > Overview + +![integrations cloudflare credentials 4](../../images/integrations-cloudflare-credentials-4.png) + +Press on the Cloudflare Pages tile and input your Cloudflare API token and account ID to grant Infisical access to your Cloudflare Pages. + +![integrations cloudflare authorization](../../images/integrations-cloudflare-auth.png) + + + If this is your project's first cloud integration, then you'll have to grant + Infisical access to your project's environment variables. Although this step + breaks E2EE, it's necessary for Infisical to sync the environment variables to + the cloud platform. + + +## Start integration + +Select which Infisical environment secrets you want to sync to Cloudflare and press create integration to start syncing secrets. + +![integrations cloudflare](../../images/integrations-cloudflare-create.png) +![integrations cloudflare](../../images/integrations-cloudflare.png) diff --git a/docs/integrations/overview.mdx b/docs/integrations/overview.mdx index 79db492ea..352863eda 100644 --- a/docs/integrations/overview.mdx +++ b/docs/integrations/overview.mdx @@ -7,43 +7,44 @@ Integrations allow environment variables to be synced from Infisical into your l Missing an integration? [Throw in a request](https://github.com/Infisical/infisical/issues). -| Integration | Type | Status | -| -------------------------------------------------------------- | --------- | ----------- | -| [Docker](/integrations/platforms/docker) | Platform | Available | -| [Docker-Compose](/integrations/platforms/docker-compose) | Platform | Available | -| [Kubernetes](/integrations/platforms/kubernetes) | Platform | Available | -| [Terraform](/integrations/frameworks/terraform) | Infrastructure as code | Available | -| [PM2](/integrations/platforms/pm2) | Platform | Available | -| [Heroku](/integrations/cloud/heroku) | Cloud | Available | -| [Vercel](/integrations/cloud/vercel) | Cloud | Available | -| [Netlify](/integrations/cloud/netlify) | Cloud | Available | -| [Render](/integrations/cloud/render) | Cloud | Available | -| [Railway](/integrations/cloud/railway) | Cloud | Available | -| [Fly.io](/integrations/cloud/flyio) | Cloud | Available | -| [Supabase](/integrations/cloud/supabase) | Cloud | Available | -| [Checkly](/integrations/cloud/checkly) | Cloud | Available | -| [HashiCorp Vault](/integrations/cloud/hashicorp-vault) | Cloud | Available | -| [AWS Parameter Store](/integrations/cloud/aws-parameter-store) | Cloud | Available | -| [AWS Secret Manager](/integrations/cloud/aws-secret-manager) | Cloud | Available | -| [Azure Key Vault](/integrations/cloud/azure-key-vault) | Cloud | Available | -| [GitHub Actions](/integrations/cicd/githubactions) | CI/CD | Available | -| [GitLab](/integrations/cicd/gitlab) | CI/CD | Available | -| [CircleCI](/integrations/cicd/circleci) | CI/CD | Available | -| [Travis CI](/integrations/cicd/travisci) | CI/CD | Available | -| [React](/integrations/frameworks/react) | Framework | Available | -| [Vue](/integrations/frameworks/vue) | Framework | Available | -| [Express](/integrations/frameworks/express) | Framework | Available | -| [Next.js](/integrations/frameworks/nextjs) | Framework | Available | -| [NestJS](/integrations/frameworks/nestjs) | Framework | Available | -| [SvelteKit](/integrations/frameworks/sveltekit) | Framework | Available | -| [Nuxt](/integrations/frameworks/nuxt) | Framework | Available | -| [Gatsby](/integrations/frameworks/gatsby) | Framework | Available | -| [Remix](/integrations/frameworks/remix) | Framework | Available | -| [Vite](/integrations/frameworks/vite) | Framework | Available | -| [Fiber](/integrations/frameworks/fiber) | Framework | Available | -| [Django](/integrations/frameworks/django) | Framework | Available | -| [Flask](/integrations/frameworks/flask) | Framework | Available | -| [Laravel](/integrations/frameworks/laravel) | Framework | Available | -| [Ruby on Rails](/integrations/frameworks/rails) | Framework | Available | -| GCP Secret Manager | Cloud | Coming soon | -| Jenkins | CI/CD | Coming soon | +| Integration | Type | Status | +| -------------------------------------------------------------- | ---------------------- | ----------- | +| [Docker](/integrations/platforms/docker) | Platform | Available | +| [Docker-Compose](/integrations/platforms/docker-compose) | Platform | Available | +| [Kubernetes](/integrations/platforms/kubernetes) | Platform | Available | +| [Terraform](/integrations/frameworks/terraform) | Infrastructure as code | Available | +| [PM2](/integrations/platforms/pm2) | Platform | Available | +| [Heroku](/integrations/cloud/heroku) | Cloud | Available | +| [Vercel](/integrations/cloud/vercel) | Cloud | Available | +| [Netlify](/integrations/cloud/netlify) | Cloud | Available | +| [Render](/integrations/cloud/render) | Cloud | Available | +| [Railway](/integrations/cloud/railway) | Cloud | Available | +| [Fly.io](/integrations/cloud/flyio) | Cloud | Available | +| [Supabase](/integrations/cloud/supabase) | Cloud | Available | +| [Cloudflare Pages](/integrations/cloud/cloudflare-pages) | Cloud | Available | +| [Checkly](/integrations/cloud/checkly) | Cloud | Available | +| [HashiCorp Vault](/integrations/cloud/hashicorp-vault) | Cloud | Available | +| [AWS Parameter Store](/integrations/cloud/aws-parameter-store) | Cloud | Available | +| [AWS Secret Manager](/integrations/cloud/aws-secret-manager) | Cloud | Available | +| [Azure Key Vault](/integrations/cloud/azure-key-vault) | Cloud | Available | +| [GitHub Actions](/integrations/cicd/githubactions) | CI/CD | Available | +| [GitLab](/integrations/cicd/gitlab) | CI/CD | Available | +| [CircleCI](/integrations/cicd/circleci) | CI/CD | Available | +| [Travis CI](/integrations/cicd/travisci) | CI/CD | Available | +| [React](/integrations/frameworks/react) | Framework | Available | +| [Vue](/integrations/frameworks/vue) | Framework | Available | +| [Express](/integrations/frameworks/express) | Framework | Available | +| [Next.js](/integrations/frameworks/nextjs) | Framework | Available | +| [NestJS](/integrations/frameworks/nestjs) | Framework | Available | +| [SvelteKit](/integrations/frameworks/sveltekit) | Framework | Available | +| [Nuxt](/integrations/frameworks/nuxt) | Framework | Available | +| [Gatsby](/integrations/frameworks/gatsby) | Framework | Available | +| [Remix](/integrations/frameworks/remix) | Framework | Available | +| [Vite](/integrations/frameworks/vite) | Framework | Available | +| [Fiber](/integrations/frameworks/fiber) | Framework | Available | +| [Django](/integrations/frameworks/django) | Framework | Available | +| [Flask](/integrations/frameworks/flask) | Framework | Available | +| [Laravel](/integrations/frameworks/laravel) | Framework | Available | +| [Ruby on Rails](/integrations/frameworks/rails) | Framework | Available | +| GCP Secret Manager | Cloud | Coming soon | +| Jenkins | CI/CD | Coming soon | diff --git a/docs/mint.json b/docs/mint.json index 458ff795c..d687af107 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -196,6 +196,7 @@ "integrations/cloud/railway", "integrations/cloud/flyio", "integrations/cloud/supabase", + "integrations/cloud/cloudflare-pages", "integrations/cloud/checkly", "integrations/cloud/hashicorp-vault", "integrations/cloud/azure-key-vault", diff --git a/frontend/src/pages/integrations/[id].tsx b/frontend/src/pages/integrations/[id].tsx index 795efebce..54a29a5c4 100644 --- a/frontend/src/pages/integrations/[id].tsx +++ b/frontend/src/pages/integrations/[id].tsx @@ -220,7 +220,7 @@ export default function Integrations() { case "hashicorp-vault": link = `${window.location.origin}/integrations/hashicorp-vault/authorize`; break; - case 'cloudflare-pages': + case "cloudflare-pages": link = `${window.location.origin}/integrations/cloudflare-pages/authorize`; break; default: @@ -287,8 +287,9 @@ export default function Integrations() { case "hashicorp-vault": link = `${window.location.origin}/integrations/hashicorp-vault/create?integrationAuthId=${integrationAuth._id}`; break; - case 'cloudflare-pages': + case "cloudflare-pages": link = `${window.location.origin}/integrations/cloudflare-pages/create?integrationAuthId=${integrationAuth._id}`; + break; default: break; } diff --git a/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx b/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx index f4990fdc4..6e4b134d1 100644 --- a/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx +++ b/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx @@ -1,39 +1,40 @@ import { useState } from "react"; import { useRouter } from "next/router"; -import { Card, CardTitle, FormControl, Input, Button } from "../../../components/v2"; -import saveIntegrationAccessToken from "~/pages/api/integrations/saveIntegrationAccessToken"; + +import { Button,Card, CardTitle, FormControl, Input } from "../../../components/v2"; +import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function CloudflarePagesIntegrationPage() { const router = useRouter(); - const [accessKey, setAccessKey] = useState(''); - const [accessKeyErrorText, setAccessKeyErrorText] = useState(''); - const [accountId, setAccountId] = useState(''); - const [accountIdErrorText, setAccountIdErrorText] = useState(''); + const [accessKey, setAccessKey] = useState(""); + const [accessKeyErrorText, setAccessKeyErrorText] = useState(""); + const [accountId, setAccountId] = useState(""); + const [accountIdErrorText, setAccountIdErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); const handleButtonClick = async () => { try { - setAccessKeyErrorText(''); - setAccountIdErrorText(''); + setAccessKeyErrorText(""); + setAccountIdErrorText(""); if (accessKey.length === 0 || accountId.length === 0) { - if (accessKey.length === 0) setAccessKeyErrorText('API token cannot be blank!'); - if (accountId.length === 0) setAccountIdErrorText('Account ID cannot be blank!'); + if (accessKey.length === 0) setAccessKeyErrorText("API token cannot be blank!"); + if (accountId.length === 0) setAccountIdErrorText("Account ID cannot be blank!"); return; } setIsLoading(true); const integrationAuth = await saveIntegrationAccessToken({ - workspaceId: localStorage.getItem('projectData.id'), - integration: 'cloudflare-pages', + workspaceId: localStorage.getItem("projectData.id"), + integration: "cloudflare-pages", accessId: accountId, accessToken: accessKey, url: null, namespace: null }); - setAccessKey(''); - setAccountId(''); + setAccessKey(""); + setAccountId(""); setIsLoading(false); router.push(`/integrations/cloudflare-pages/create?integrationAuthId=${integrationAuth._id}`); @@ -49,7 +50,7 @@ export default function CloudflarePagesIntegrationPage() {