Skip to content

Commit 0df16b5

Browse files
committed
feat(vercel): refactor Vercel resource path handling and improve redirect URL safety
1 parent 3597818 commit 0df16b5

File tree

6 files changed

+11
-23
lines changed

6 files changed

+11
-23
lines changed

apps/webapp/app/components/integrations/VercelOnboardingModal.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@ import {
4444
} from "~/v3/vercel/vercelProjectIntegrationSchema";
4545
import { type VercelCustomEnvironment } from "~/models/vercelIntegration.server";
4646
import { type VercelOnboardingData } from "~/presenters/v3/VercelSettingsPresenter.server";
47-
import { vercelAppInstallPath, v3ProjectSettingsPath, githubAppInstallPath } from "~/utils/pathBuilder";
48-
import { vercelResourcePath } from "~/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.vercel";
47+
import { vercelAppInstallPath, v3ProjectSettingsPath, githubAppInstallPath, vercelResourcePath } from "~/utils/pathBuilder";
4948
import type { loader } from "~/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.vercel";
5049
import { useEffect, useState, useCallback, useRef } from "react";
5150

@@ -520,7 +519,10 @@ export function VercelOnboardingModal({
520519
return;
521520
}
522521
if ("redirectTo" in completeOnboardingFetcher.data && typeof completeOnboardingFetcher.data.redirectTo === "string") {
523-
window.location.href = completeOnboardingFetcher.data.redirectTo;
522+
const validRedirect = safeRedirectUrl(completeOnboardingFetcher.data.redirectTo);
523+
if (validRedirect) {
524+
window.location.href = validRedirect;
525+
}
524526
return;
525527
}
526528
setState("completed");

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.settings/route.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import {
3838
import { ProjectSettingsService } from "~/services/projectSettings.server";
3939
import { logger } from "~/services/logger.server";
4040
import { requireUserId } from "~/services/session.server";
41-
import { organizationPath, v3ProjectPath, EnvironmentParamSchema, v3BillingPath } from "~/utils/pathBuilder";
41+
import { organizationPath, v3ProjectPath, EnvironmentParamSchema, v3BillingPath, vercelResourcePath } from "~/utils/pathBuilder";
4242
import React, { useEffect, useState, useCallback, useRef } from "react";
4343
import { useSearchParams } from "@remix-run/react";
4444
import { useEnvironment } from "~/hooks/useEnvironment";
@@ -48,7 +48,6 @@ import { GitHubSettingsPanel } from "../resources.orgs.$organizationSlug.project
4848
import {
4949
VercelSettingsPanel,
5050
VercelOnboardingModal,
51-
vercelResourcePath,
5251
} from "../resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.vercel";
5352
import type { loader as vercelLoader } from "../resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.vercel";
5453
import { OrgIntegrationRepository } from "~/models/orgIntegration.server";

apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import {
3131
organizationPath,
3232
selectPlanPath,
3333
v3ProjectPath,
34-
v3ProjectSettingsPath,
3534
} from "~/utils/pathBuilder";
3635
import { generateVercelOAuthState } from "~/v3/vercel/vercelOAuthState.server";
3736

apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.vercel.tsx

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import { findProjectBySlug } from "~/models/project.server";
4343
import { findEnvironmentBySlug } from "~/models/runtimeEnvironment.server";
4444
import { logger } from "~/services/logger.server";
4545
import { requireUserId } from "~/services/session.server";
46-
import { EnvironmentParamSchema, v3ProjectSettingsPath, vercelAppInstallPath } from "~/utils/pathBuilder";
46+
import { EnvironmentParamSchema, v3ProjectSettingsPath, vercelAppInstallPath, vercelResourcePath } from "~/utils/pathBuilder";
4747
import {
4848
VercelSettingsPresenter,
4949
type VercelOnboardingData,
@@ -409,15 +409,6 @@ export async function action({ request, params }: ActionFunctionArgs) {
409409
}
410410
}
411411

412-
export function vercelResourcePath(
413-
organizationSlug: string,
414-
projectSlug: string,
415-
environmentSlug: string
416-
) {
417-
return `/resources/orgs/${organizationSlug}/projects/${projectSlug}/env/${environmentSlug}/vercel`;
418-
}
419-
420-
421412
function VercelConnectionPrompt({
422413
organizationSlug,
423414
projectSlug,

apps/webapp/app/services/vercelIntegration.server.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ export class VercelIntegrationService {
4545

4646
async getVercelProjectIntegration(
4747
projectId: string,
48-
migrateIfNeeded: boolean = false
4948
): Promise<VercelProjectIntegrationWithData | null> {
5049
const integration = await this.#prismaClient.organizationProjectIntegration.findFirst({
5150
where: {

apps/webapp/app/utils/pathBuilder.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,13 +168,11 @@ export function vercelCallbackPath() {
168168
}
169169

170170
export function vercelResourcePath(
171-
organization: OrgForPath,
172-
project: ProjectForPath,
173-
environment: EnvironmentForPath
171+
organizationSlug: string,
172+
projectSlug: string,
173+
environmentSlug: string
174174
) {
175-
return `/resources/orgs/${organizationParam(organization)}/projects/${projectParam(
176-
project
177-
)}/env/${environmentParam(environment)}/vercel`;
175+
return `/resources/orgs/${organizationSlug}/projects/${projectSlug}/env/${environmentSlug}/vercel`;
178176
}
179177

180178
export function v3EnvironmentPath(

0 commit comments

Comments
 (0)