fix(intercom app): team / org url validation (#20431)
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
import { CAL_URL } from "@calcom/lib/constants";
|
||||
import prisma from "@calcom/prisma";
|
||||
|
||||
import type { TextComponent } from "../lib";
|
||||
|
||||
@@ -27,91 +26,14 @@ export async function isValidCalURL(url: string) {
|
||||
error,
|
||||
};
|
||||
|
||||
const urlWithoutCal = url.replace(regex, "");
|
||||
const response = await fetch(url);
|
||||
|
||||
const urlParts = urlWithoutCal.split("/");
|
||||
const usernameOrTeamSlug = urlParts[0];
|
||||
const eventTypeSlug = urlParts[1];
|
||||
|
||||
if (!usernameOrTeamSlug || !eventTypeSlug)
|
||||
if (response.status !== 200)
|
||||
return {
|
||||
isValid: false,
|
||||
error,
|
||||
};
|
||||
|
||||
// Find all potential users with the given username
|
||||
const potentialUsers = await prisma.user.findMany({
|
||||
where: {
|
||||
username: usernameOrTeamSlug,
|
||||
},
|
||||
include: {
|
||||
eventTypes: {
|
||||
where: {
|
||||
slug: eventTypeSlug,
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Find all potential teams with the given slug
|
||||
const potentialTeams = await prisma.team.findMany({
|
||||
where: {
|
||||
slug: usernameOrTeamSlug,
|
||||
},
|
||||
include: {
|
||||
eventTypes: {
|
||||
where: {
|
||||
slug: eventTypeSlug,
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Check if any user has the matching eventTypeSlug
|
||||
const matchingUser = potentialUsers.find((user) => user.eventTypes.length > 0);
|
||||
|
||||
// Check if any team has the matching eventTypeSlug
|
||||
const matchingTeam = potentialTeams.find((team) => team.eventTypes.length > 0);
|
||||
|
||||
if (!matchingUser && !matchingTeam)
|
||||
return {
|
||||
isValid: false,
|
||||
error: {
|
||||
...error,
|
||||
text: `${usernameOrTeamSlug} team or user is not valid.`,
|
||||
},
|
||||
};
|
||||
|
||||
const userOrTeam = matchingUser || matchingTeam;
|
||||
|
||||
if (!userOrTeam)
|
||||
return {
|
||||
isValid: false,
|
||||
error,
|
||||
};
|
||||
|
||||
// Retrieve the correct user or team
|
||||
const userOrTeamId = userOrTeam.id;
|
||||
|
||||
const eventType = await prisma.eventType.findFirst({
|
||||
where: {
|
||||
userId: userOrTeamId,
|
||||
slug: eventTypeSlug,
|
||||
hidden: false,
|
||||
},
|
||||
});
|
||||
|
||||
if (!eventType)
|
||||
return {
|
||||
isValid: false,
|
||||
error: {
|
||||
...error,
|
||||
text: `The event ${eventTypeSlug} doesn't exist.`,
|
||||
},
|
||||
};
|
||||
|
||||
return {
|
||||
isValid: true,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user