fix: SCIM improvements (#16103)

* Add error logging for body

* Use user repository
This commit is contained in:
Joe Au-Yeung
2024-08-07 12:01:51 -04:00
committed by GitHub
parent 53ec5daa1b
commit 3b186b19e6
3 changed files with 15 additions and 4 deletions
+13 -1
View File
@@ -4,16 +4,28 @@ import type { NextApiRequest, NextApiResponse } from "next";
import handleGroupEvents from "@calcom/features/ee/dsync/lib/handleGroupEvents";
import handleUserEvents from "@calcom/features/ee/dsync/lib/handleUserEvents";
import jackson from "@calcom/features/ee/sso/lib/jackson";
import logger from "@calcom/lib/logger";
import prisma from "@calcom/prisma";
// This is the handler for the SCIM API requests
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
const log = logger.getSubLogger({ prefix: ["[scim]"] });
const { dsyncController } = await jackson();
const { method, query, body } = req;
const [directoryId, path, resourceId] = query.directory as string[];
let responseBody: object | undefined = undefined;
if (body) {
try {
responseBody = JSON.parse(body);
} catch (e) {
log.error(`Error parsing SCIM event for directoryId ${directoryId} with error: ${e} and body ${body}`);
}
}
// Handle the SCIM API requests
const request: DirectorySyncRequest = {
method: method as string,
@@ -21,7 +33,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
resourceId,
apiSecret: extractAuthToken(req),
resourceType: path === "Users" ? "users" : "groups",
body: body ? JSON.parse(body) : undefined,
body: responseBody,
query: {
count: req.query.count ? parseInt(req.query.count as string) : undefined,
startIndex: req.query.startIndex ? parseInt(req.query.startIndex as string) : undefined,
@@ -1,6 +1,5 @@
import type { DirectorySyncEvent, Group } from "@boxyhq/saml-jackson";
import jackson from "@calcom/features/ee/sso/lib/jackson";
import { createAProfileForAnExistingUser } from "@calcom/lib/createAProfileForAnExistingUser";
import { getTranslation } from "@calcom/lib/server/i18n";
import prisma from "@calcom/prisma";
@@ -14,7 +13,6 @@ import {
import createUsersAndConnectToOrg from "./users/createUsersAndConnectToOrg";
const handleGroupEvents = async (event: DirectorySyncEvent, organizationId: number) => {
const { dsyncController } = await jackson();
// Find the group name associated with the event
const eventData = event.data as Group;
@@ -2,6 +2,7 @@ import type { DirectorySyncEvent, User } from "@boxyhq/saml-jackson";
import removeUserFromOrg from "@calcom/features/ee/dsync/lib/removeUserFromOrg";
import { getTranslation } from "@calcom/lib/server/i18n";
import { UserRepository } from "@calcom/lib/server/repository/user";
import prisma from "@calcom/prisma";
import { IdentityProvider } from "@calcom/prisma/enums";
import { getTeamOrThrow } from "@calcom/trpc/server/routers/viewer/teams/inviteMember/utils";
@@ -25,7 +26,7 @@ const handleUserEvents = async (event: DirectorySyncEvent, organizationId: numbe
});
// User is already a part of that org
if (user?.organizationId && eventData.active) {
if (user && UserRepository.isAMemberOfOrganization({ user, organizationId }) && eventData.active) {
return;
}