diff --git a/backend/src/services/project/project-fns.ts b/backend/src/services/project/project-fns.ts index 0f1f5a08d..3ac75248d 100644 --- a/backend/src/services/project/project-fns.ts +++ b/backend/src/services/project/project-fns.ts @@ -33,11 +33,12 @@ export const assignWorkspaceKeysToMembers = ({ members, decryptKey, userPrivateK type TCreateProjectKeyDTO = { publicKey: string; privateKey: string; + plainProjectKey?: string; }; -export const createProjectKey = ({ publicKey, privateKey }: TCreateProjectKeyDTO) => { +export const createProjectKey = ({ publicKey, privateKey, plainProjectKey }: TCreateProjectKeyDTO) => { // 3. Create a random key that we'll use as the project key. - const randomBytes = crypto.randomBytes(16).toString("hex"); + const randomBytes = plainProjectKey || crypto.randomBytes(16).toString("hex"); // 4. Encrypt the project key with the users key pair. const { ciphertext: encryptedProjectKey, nonce: encryptedProjectKeyIv } = encryptAsymmetric( diff --git a/backend/src/services/project/project-queue.ts b/backend/src/services/project/project-queue.ts index 616aa1aef..efc795cae 100644 --- a/backend/src/services/project/project-queue.ts +++ b/backend/src/services/project/project-queue.ts @@ -122,6 +122,13 @@ export const projectQueueFactory = ({ tag: data.encryptedPrivateKey.encryptedKeyTag }); + const decryptedPlainProjectKey = decryptAsymmetric({ + ciphertext: oldProjectKey.encryptedKey, + nonce: oldProjectKey.nonce, + publicKey: oldProjectKey.sender.publicKey, + privateKey: userPrivateKey + }); + const projectEnvs = await projectEnvDAL.find({ projectId: project.id }); @@ -199,6 +206,7 @@ export const projectQueueFactory = ({ // Create a project key const { key: newEncryptedProjectKey, iv: newEncryptedProjectKeyIv } = createProjectKey({ + plainProjectKey: decryptedPlainProjectKey, publicKey: ghostUser.keys.publicKey, privateKey: ghostUser.keys.plainPrivateKey });