From 423ad494903aa16f649ec48922fa279b2f6984a1 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Sun, 4 Feb 2024 13:40:28 +0400 Subject: [PATCH] Helper functions for adding workspace members on serverside --- backend/src/lib/project/index.ts | 39 ++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 backend/src/lib/project/index.ts diff --git a/backend/src/lib/project/index.ts b/backend/src/lib/project/index.ts new file mode 100644 index 000000000..20a63cbd5 --- /dev/null +++ b/backend/src/lib/project/index.ts @@ -0,0 +1,39 @@ +import { ProjectMembershipRole, TProjectKeys } from "@app/db/schemas"; + +import { decryptAsymmetric, encryptAsymmetric } from "../crypto"; + +type AddUserToWsDTO = { + decryptKey: TProjectKeys & { sender: { publicKey: string } }; + userPrivateKey: string; + members: { + orgMembershipId: string; + projectMembershipRole: ProjectMembershipRole; + userPublicKey: string; + }[]; +}; + +export const createWsMembers = async ({ members, decryptKey, userPrivateKey }: AddUserToWsDTO) => { + const key = decryptAsymmetric({ + ciphertext: decryptKey.encryptedKey, + nonce: decryptKey.nonce, + publicKey: decryptKey.sender.publicKey, + privateKey: userPrivateKey + }); + + const newWsMembers = members.map(({ orgMembershipId, userPublicKey, projectMembershipRole }) => { + const { ciphertext: inviteeCipherText, nonce: inviteeNonce } = encryptAsymmetric( + key, + userPublicKey, + userPrivateKey + ); + + return { + orgMembershipId, + projectRole: projectMembershipRole, + workspaceEncryptedKey: inviteeCipherText, + workspaceEncryptedNonce: inviteeNonce + }; + }); + + return newWsMembers; +};