diff --git a/backend/src/services/app-connection/flyio/flyio-connection-fns.ts b/backend/src/services/app-connection/flyio/flyio-connection-fns.ts index 4fdcc8e5a..9e2aed626 100644 --- a/backend/src/services/app-connection/flyio/flyio-connection-fns.ts +++ b/backend/src/services/app-connection/flyio/flyio-connection-fns.ts @@ -3,6 +3,7 @@ import { AxiosError } from "axios"; import { request } from "@app/lib/config/request"; import { BadRequestError } from "@app/lib/errors"; import { AppConnection } from "@app/services/app-connection/app-connection-enums"; +import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; import { FlyioConnectionMethod } from "./flyio-connection-enums"; import { TFlyioApp, TFlyioConnection, TFlyioConnectionConfig } from "./flyio-connection-types"; @@ -20,7 +21,7 @@ export const validateFlyioConnectionCredentials = async (config: TFlyioConnectio try { await request.post( - "https://api.fly.io/graphql", + IntegrationUrls.FLYIO_API_URL, { query: "query { viewer { id email } }" }, { headers: { @@ -47,7 +48,7 @@ export const listFlyioApps = async (appConnection: TFlyioConnection) => { const { accessToken } = appConnection.credentials; const resp = await request.post<{ data: { apps: { nodes: TFlyioApp[] } } }>( - "https://api.fly.io/graphql", + IntegrationUrls.FLYIO_API_URL, { query: "query GetApps { apps { nodes { id name hostname status organization { id slug } currentRelease { version status createdAt } } } }" diff --git a/backend/src/services/app-connection/flyio/flyio-connection-schemas.ts b/backend/src/services/app-connection/flyio/flyio-connection-schemas.ts index 6aa0fccc1..4466d24df 100644 --- a/backend/src/services/app-connection/flyio/flyio-connection-schemas.ts +++ b/backend/src/services/app-connection/flyio/flyio-connection-schemas.ts @@ -16,6 +16,7 @@ export const FlyioConnectionAccessTokenCredentialsSchema = z.object({ .trim() .min(1, "Access Token required") .max(1000) + .startsWith("FlyV1", "Token must start with 'FlyV1'") .describe(AppConnections.CREDENTIALS.FLYIO.accessToken) }); diff --git a/backend/src/services/secret-sync/flyio/flyio-sync-fns.ts b/backend/src/services/secret-sync/flyio/flyio-sync-fns.ts index 900f9a77b..7c006fb64 100644 --- a/backend/src/services/secret-sync/flyio/flyio-sync-fns.ts +++ b/backend/src/services/secret-sync/flyio/flyio-sync-fns.ts @@ -1,4 +1,5 @@ import { request } from "@app/lib/config/request"; +import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; import { TDeleteFlyioVariable, TFlyioListVariables, @@ -14,7 +15,7 @@ import { SECRET_SYNC_NAME_MAP } from "../secret-sync-maps"; const listFlyioSecrets = async ({ accessToken, appId }: TFlyioListVariables) => { const { data } = await request.post<{ data: { app: { secrets: TFlyioSecret[] } } }>( - "https://api.fly.io/graphql", + IntegrationUrls.FLYIO_API_URL, { query: "query GetAppSecrets($appId: String!) { app(id: $appId) { id name secrets { name createdAt } } }", variables: { appId } @@ -33,7 +34,7 @@ const listFlyioSecrets = async ({ accessToken, appId }: TFlyioListVariables) => const putFlyioSecrets = async ({ accessToken, appId, secretMap }: TPutFlyioVariable) => { return request.post( - "https://api.fly.io/graphql", + IntegrationUrls.FLYIO_API_URL, { query: "mutation SetAppSecrets($appId: ID!, $secrets: [SecretInput!]!) { setSecrets(input: { appId: $appId, secrets: $secrets }) { app { name } release { version } } }", @@ -53,7 +54,7 @@ const putFlyioSecrets = async ({ accessToken, appId, secretMap }: TPutFlyioVaria const deleteFlyioSecrets = async ({ accessToken, appId, keys }: TDeleteFlyioVariable) => { return request.post( - "https://api.fly.io/graphql", + IntegrationUrls.FLYIO_API_URL, { query: "mutation UnsetAppSecrets($appId: ID!, $keys: [String!]!) { unsetSecrets(input: { appId: $appId, keys: $keys }) { app { name } release { version } } }", diff --git a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/FlyioConnectionForm.tsx b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/FlyioConnectionForm.tsx index 53f4426fc..4b6c5bbc9 100644 --- a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/FlyioConnectionForm.tsx +++ b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/FlyioConnectionForm.tsx @@ -32,7 +32,11 @@ const formSchema = z.discriminatedUnion("method", [ rootSchema.extend({ method: z.literal(FlyioConnectionMethod.AccessToken), credentials: z.object({ - accessToken: z.string().trim().min(1, "Access Token required") + accessToken: z + .string() + .trim() + .min(1, "Access Token required") + .startsWith("FlyV1", "Token must start with 'FlyV1'") }) }) ]);