From c65a53f1f7dd317500c64f7193e64d2c442c4779 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Tue, 26 Sep 2023 14:24:55 +0100 Subject: [PATCH] Add endpoint to get project key for ST V3 --- .../v3/serviceTokenDataController.ts | 28 +++++++++++++++++++ backend/src/routes/v3/serviceTokenData.ts | 8 ++++++ 2 files changed, 36 insertions(+) diff --git a/backend/src/controllers/v3/serviceTokenDataController.ts b/backend/src/controllers/v3/serviceTokenDataController.ts index 6d9ce7e5d..3885c8ffc 100644 --- a/backend/src/controllers/v3/serviceTokenDataController.ts +++ b/backend/src/controllers/v3/serviceTokenDataController.ts @@ -1,6 +1,8 @@ import { Request, Response } from "express"; import { Types } from "mongoose"; import { + IServiceTokenDataV3, + IUser, ServiceTokenDataV3, ServiceTokenDataV3Key } from "../../models"; @@ -24,6 +26,32 @@ import { BadRequestError, ResourceNotFoundError } from "../../utils/errors"; import { EEAuditLogService } from "../../ee/services"; import { getJwtServiceTokenSecret } from "../../config"; +/** + * Return project key for service token + * @param req + * @param res + */ +export const getServiceTokenDataKey = async (req: Request, res: Response) => { + const key = await ServiceTokenDataV3Key.findOne({ + serviceTokenData: (req.authData.authPayload as IServiceTokenDataV3)._id + }).populate<{ sender: IUser }>("sender", "publicKey"); + + if (!key) throw ResourceNotFoundError({ + message: "Failed to find project key for service token" + }); + + const { _id, encryptedKey, nonce, sender: { publicKey } } = key; + + return res.status(200).send({ + key: { + _id, + encryptedKey, + publicKey, + nonce + } + }); +} + /** * Create service token data * @param req diff --git a/backend/src/routes/v3/serviceTokenData.ts b/backend/src/routes/v3/serviceTokenData.ts index 982a1ecaa..83c111f2a 100644 --- a/backend/src/routes/v3/serviceTokenData.ts +++ b/backend/src/routes/v3/serviceTokenData.ts @@ -4,6 +4,14 @@ import { requireAuth } from "../../middleware"; import { AuthMode } from "../../variables"; import { serviceTokenDataController } from "../../controllers/v3"; +router.get( + "/me/key", + requireAuth({ + acceptedAuthModes: [AuthMode.SERVICE_TOKEN_V3] + }), + serviceTokenDataController.getServiceTokenDataKey +); + router.post( "/", requireAuth({