diff --git a/lib/helpers/verifyApiKey.ts b/lib/helpers/verifyApiKey.ts index 81bbb8db07..2c58befc4d 100644 --- a/lib/helpers/verifyApiKey.ts +++ b/lib/helpers/verifyApiKey.ts @@ -1,19 +1,21 @@ -import type { IncomingMessage } from "http"; +// import type { NextApiRequest } from "next"; import { NextMiddleware } from "next-api-middleware"; import { hashAPIKey } from "@calcom/ee/lib/api/apiKeys"; import prisma from "@calcom/prisma"; -/** @todo figure how to use the one from `@calcom/types`fi */ -/** @todo: remove once `@calcom/types` is updated with it.*/ -declare module "next" { - export interface NextApiRequest extends IncomingMessage { - userId: number; - query: { - apiKey: string; - }; - } -} +// /** @todo figure how to use the one from `@calcom/types`fi */ +// /** @todo: remove once `@calcom/types` is updated with it.*/ +// declare module "next" { +// export interface NextApiRequest extends NextApiRequest { +// userId: number; +// body: any; +// method: string; +// query: { +// apiKey: string; +// }; +// } +// } // Used to check if the apiKey is not expired, could be extracted if reused. but not for now. export const dateNotInPast = function (date: Date) { diff --git a/lib/types.ts b/lib/types.ts index a5c7d8ad21..6018019abc 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -150,6 +150,7 @@ interface EventTypeExtended extends Omit; diff --git a/lib/validations/webhook.ts b/lib/validations/webhook.ts index dc8f8bb41f..5948db65eb 100644 --- a/lib/validations/webhook.ts +++ b/lib/validations/webhook.ts @@ -24,7 +24,7 @@ export const schemaWebhookCreateBodyParams = schemaWebhookBaseBodyParams.merge(s const schemaWebhookEditParams = z .object({ payloadTemplate: z.string().optional(), - eventTriggers: z.string().optional(), + eventTriggers: z.any(), subscriberUrl: z.string().optional(), }) .strict(); diff --git a/package.json b/package.json index 8f025ebd54..33dd0c54a7 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ }, "devDependencies": { "@calcom/tsconfig": "*", - "@calcom/types": "*", "@typescript-eslint/eslint-plugin": "^5.25.0", "babel-jest": "^28.1.0", "jest": "^28.0.3", diff --git a/pages/api/booking-references/[id].ts b/pages/api/booking-references/[id].ts index 702b77c1a5..47a76ea85e 100644 --- a/pages/api/booking-references/[id].ts +++ b/pages/api/booking-references/[id].ts @@ -22,177 +22,177 @@ export async function bookingReferenceById( res.status(400).json({ message: "Your query was invalid" }); return; } - // const userWithBookings = await prisma.user.findUnique({ - // where: { id: userId }, - // include: { bookings: true }, - // }); - // if (!userWithBookings) throw new Error("User not found"); - // const userBookingIds = userWithBookings.bookings.map((booking: { id: number }) => booking.id).flat(); + const userWithBookings = await prisma.user.findUnique({ + where: { id: userId }, + include: { bookings: true }, + }); + if (!userWithBookings) throw new Error("User not found"); + const userBookingIds = userWithBookings.bookings.map((booking: { id: number }) => booking.id).flat(); // console.log(userBookingIds); - // const bookingReferences = await prisma.bookingReference - // .findMany({ where: { id: { in: userBookingIds } } }) - // .then((bookingReferences) => { - // console.log(bookingReferences); - // return bookingReferences.map((bookingReference) => bookingReference.id); - // }); + const bookingReferences = await prisma.bookingReference + .findMany({ where: { id: { in: userBookingIds } } }) + .then((bookingReferences) => { + console.log(bookingReferences); + return bookingReferences.map((bookingReference) => bookingReference.id); + }); // res.status(400).json({ message: "Booking reference not found" }); // return; // } - // if (userBookingIds.includes(safeQuery.data.id)) { - // if (!bookingReferences?.includes(safeQuery.data.id)) { - // throw new Error("BookingReference: bookingId not found"); - switch (method) { - case "GET": - /** - * @swagger - * /booking-references/{id}: - * get: - * operationId: getBookingReferenceById - * summary: Find a booking reference - * parameters: - * - in: path - * name: id - * schema: - * type: integer - * required: true - * description: ID of the booking reference to get - * tags: - * - booking-references - * responses: - * 200: - * description: OK - * 401: - * description: Authorization information is missing or invalid. - * 404: - * description: BookingReference was not found - */ - // console.log(safeQuery.data.id); - const bookingReference = await prisma.bookingReference.findFirst().catch((error: Error) => { - console.log("hoerr:", error); - }); - // console.log(bookingReference); - if (!bookingReference) res.status(404).json({ message: "Booking reference not found" }); - else res.status(200).json({ booking_reference: bookingReference }); + if (!bookingReferences?.includes(safeQuery.data.id)) { + // if (userBookingIds.includes(safeQuery.data.id)) { + // throw new Error("BookingReference: bookingId not found"); + switch (method) { + case "GET": + /** + * @swagger + * /booking-references/{id}: + * get: + * operationId: getBookingReferenceById + * summary: Find a booking reference + * parameters: + * - in: path + * name: id + * schema: + * type: integer + * required: true + * description: ID of the booking reference to get + * tags: + * - booking-references + * responses: + * 200: + * description: OK + * 401: + * description: Authorization information is missing or invalid. + * 404: + * description: BookingReference was not found + */ + // console.log(safeQuery.data.id); + const bookingReference = await prisma.bookingReference.findFirst().catch((error: Error) => { + console.log("hoerr:", error); + }); + // console.log(bookingReference); + if (!bookingReference) res.status(404).json({ message: "Booking reference not found" }); + else res.status(200).json({ booking_reference: bookingReference }); - // .then((data) => { - // console.log(data); - // return schemaBookingReferenceReadPublic.parse(data); - // }) - // .then((booking_reference) => res.status(200).json({ booking_reference })) - // .catch((error: Error) => { - // console.log(error); - // res.status(404).json({ - // message: `BookingReference with id: ${safeQuery.data.id} not found`, - // error, - // }); - // }); - break; - case "PATCH": - /** - * @swagger - * /booking-references/{id}: - * patch: - * operationId: editBookingReferenceById - * summary: Edit an existing booking reference - * requestBody: - * description: Edit an existing booking reference related to one of your bookings - * required: true - * content: - * application/json: - * schema: - * type: object - * properties: - * days: - * type: array - * example: email@example.com - * startTime: - * type: string - * example: 1970-01-01T17:00:00.000Z - * endTime: - * type: string - * example: 1970-01-01T17:00:00.000Z - * parameters: - * - in: path - * name: id - * schema: - * type: integer - * required: true - * description: ID of the booking reference to edit - * tags: - * - booking-references - * responses: - * 201: - * description: OK, safeBody.data edited successfuly - * 400: - * description: Bad request. BookingReference body is invalid. - * 401: - * description: Authorization information is missing or invalid. - */ + // .then((data) => { + // console.log(data); + // return schemaBookingReferenceReadPublic.parse(data); + // }) + // .then((booking_reference) => res.status(200).json({ booking_reference })) + // .catch((error: Error) => { + // console.log(error); + // res.status(404).json({ + // message: `BookingReference with id: ${safeQuery.data.id} not found`, + // error, + // }); + // }); + break; + case "PATCH": + /** + * @swagger + * /booking-references/{id}: + * patch: + * operationId: editBookingReferenceById + * summary: Edit an existing booking reference + * requestBody: + * description: Edit an existing booking reference related to one of your bookings + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * days: + * type: array + * example: email@example.com + * startTime: + * type: string + * example: 1970-01-01T17:00:00.000Z + * endTime: + * type: string + * example: 1970-01-01T17:00:00.000Z + * parameters: + * - in: path + * name: id + * schema: + * type: integer + * required: true + * description: ID of the booking reference to edit + * tags: + * - booking-references + * responses: + * 201: + * description: OK, safeBody.data edited successfuly + * 400: + * description: Bad request. BookingReference body is invalid. + * 401: + * description: Authorization information is missing or invalid. + */ - const safeBody = schemaBookingEditBodyParams.safeParse(body); - if (!safeBody.success) { - console.log(safeBody.error); - res.status(400).json({ message: "Invalid request body", error: safeBody.error }); - return; - } - await prisma.bookingReference - .update({ where: { id: safeQuery.data.id }, data: safeBody.data }) - .then((data) => schemaBookingReferenceReadPublic.parse(data)) - .then((booking_reference) => res.status(200).json({ booking_reference })) - .catch((error: Error) => - res.status(404).json({ - message: `BookingReference with id: ${safeQuery.data.id} not found`, - error, + const safeBody = schemaBookingEditBodyParams.safeParse(body); + if (!safeBody.success) { + console.log(safeBody.error); + res.status(400).json({ message: "Invalid request body", error: safeBody.error }); + return; + } + await prisma.bookingReference + .update({ where: { id: safeQuery.data.id }, data: safeBody.data }) + .then((data) => schemaBookingReferenceReadPublic.parse(data)) + .then((booking_reference) => res.status(200).json({ booking_reference })) + .catch((error: Error) => + res.status(404).json({ + message: `BookingReference with id: ${safeQuery.data.id} not found`, + error, + }) + ); + break; + case "DELETE": + /** + * @swagger + * /booking-references/{id}: + * delete: + * operationId: removeBookingReferenceById + * summary: Remove an existing booking reference + * parameters: + * - in: path + * name: id + * schema: + * type: integer + * required: true + * description: ID of the booking reference to delete + * tags: + * - booking-references + * responses: + * 201: + * description: OK, bookingReference removed successfuly + * 400: + * description: Bad request. BookingReference id is invalid. + * 401: + * description: Authorization information is missing or invalid. + */ + await prisma.bookingReference + .delete({ + where: { id: safeQuery.data.id }, }) - ); - break; - case "DELETE": - /** - * @swagger - * /booking-references/{id}: - * delete: - * operationId: removeBookingReferenceById - * summary: Remove an existing booking reference - * parameters: - * - in: path - * name: id - * schema: - * type: integer - * required: true - * description: ID of the booking reference to delete - * tags: - * - booking-references - * responses: - * 201: - * description: OK, bookingReference removed successfuly - * 400: - * description: Bad request. BookingReference id is invalid. - * 401: - * description: Authorization information is missing or invalid. - */ - await prisma.bookingReference - .delete({ - where: { id: safeQuery.data.id }, - }) - .then(() => - res.status(200).json({ - message: `BookingReference with id: ${safeQuery.data.id} deleted`, - }) - ) - .catch((error: Error) => - res.status(404).json({ - message: `BookingReference with id: ${safeQuery.data.id} not found`, - error, - }) - ); - break; + .then(() => + res.status(200).json({ + message: `BookingReference with id: ${safeQuery.data.id} deleted`, + }) + ) + .catch((error: Error) => + res.status(404).json({ + message: `BookingReference with id: ${safeQuery.data.id} not found`, + error, + }) + ); + break; - default: - res.status(405).json({ message: "Method not allowed" }); - break; - } - // } else res.status(401).json({ message: "Unauthorized" }); + default: + res.status(405).json({ message: "Method not allowed" }); + break; + } + } else res.status(401).json({ message: "Unauthorized" }); } export default withMiddleware("HTTP_GET_DELETE_PATCH")( diff --git a/pages/api/users/index.ts b/pages/api/users/index.ts index 9f80a421d2..6eea24cb3b 100644 --- a/pages/api/users/index.ts +++ b/pages/api/users/index.ts @@ -40,19 +40,18 @@ async function getAllorCreateUser( message: "No Users were found", error, }); + } else if (method === "POST") { + const isAdmin = await prisma.user + .findUnique({ where: { id: userId } }) + .then((user) => user?.role === "ADMIN"); + if (!isAdmin) res.status(401).json({ message: "You are not authorized" }); + else { + const user = await prisma.user.create({ + data: schemaUserReadPublic.parse(body), + }); + res.status(201).json({ user }); + } } - // else if (method === "POST") { - // const isAdmin = await prisma.user - // .findUnique({ where: { id: userId } }) - // .then((user) => user?.role === "ADMIN"); - // if (!isAdmin) res.status(401).json({ message: "You are not authorized" }); - // else { - // const user = await prisma.user.create({ - // data: schemaUserReadPublic.parse(body), - // }); - // res.status(201).json({ user }); - // } - // } } // No POST endpoint for users for now as a regular user you're expected to signup.