mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-16 01:05:40 +00:00
48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
|
|
|
import {
|
|
decryptAssymmetric,
|
|
encryptAssymmetric
|
|
} from "@app/components/utilities/cryptography/crypto";
|
|
import { apiRequest } from "@app/config/request";
|
|
|
|
import { workspaceKeys } from "../workspace/queries";
|
|
import { AddUserToWsDTO } from "./types";
|
|
|
|
export const useAddUserToWs = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation<{}, {}, AddUserToWsDTO>({
|
|
mutationFn: async ({ workspaceId, members, decryptKey, userPrivateKey }) => {
|
|
// assymmetrically decrypt symmetric key with local private key
|
|
const key = decryptAssymmetric({
|
|
ciphertext: decryptKey.encryptedKey,
|
|
nonce: decryptKey.nonce,
|
|
publicKey: decryptKey.sender.publicKey,
|
|
privateKey: userPrivateKey
|
|
});
|
|
|
|
const newWsMembers = members.map(({ orgMembershipId, userPublicKey }) => {
|
|
const { ciphertext: inviteeCipherText, nonce: inviteeNonce } = encryptAssymmetric({
|
|
plaintext: key,
|
|
publicKey: userPublicKey,
|
|
privateKey: userPrivateKey
|
|
});
|
|
|
|
return {
|
|
orgMembershipId,
|
|
workspaceEncryptedKey: inviteeCipherText,
|
|
workspaceEncryptedNonce: inviteeNonce
|
|
};
|
|
});
|
|
const { data } = await apiRequest.post(`/api/v2/workspace/${workspaceId}/memberships`, {
|
|
members: newWsMembers
|
|
});
|
|
return data;
|
|
},
|
|
onSuccess: (_, { workspaceId }) => {
|
|
queryClient.invalidateQueries(workspaceKeys.getWorkspaceUsers(workspaceId));
|
|
}
|
|
});
|
|
};
|