mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-17 14:40:39 +00:00
65 lines
1.5 KiB
TypeScript
65 lines
1.5 KiB
TypeScript
import { Request, Response } from "express";
|
|
import { Key } from "../../models";
|
|
import { findMembership } from "../../helpers/membership";
|
|
|
|
/**
|
|
* Add (encrypted) copy of workspace key for workspace with id [workspaceId] for user with
|
|
* id [key.userId]
|
|
* @param req
|
|
* @param res
|
|
* @returns
|
|
*/
|
|
export const uploadKey = async (req: Request, res: Response) => {
|
|
const { workspaceId } = req.params;
|
|
const { key } = req.body;
|
|
|
|
// validate membership of receiver
|
|
const receiverMembership = await findMembership({
|
|
user: key.userId,
|
|
workspace: workspaceId,
|
|
});
|
|
|
|
if (!receiverMembership) {
|
|
throw new Error("Failed receiver membership validation for workspace");
|
|
}
|
|
|
|
await new Key({
|
|
encryptedKey: key.encryptedKey,
|
|
nonce: key.nonce,
|
|
sender: req.user._id,
|
|
receiver: key.userId,
|
|
workspace: workspaceId,
|
|
}).save();
|
|
|
|
return res.status(200).send({
|
|
message: "Successfully uploaded key to workspace",
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Return latest (encrypted) copy of workspace key for user
|
|
* @param req
|
|
* @param res
|
|
* @returns
|
|
*/
|
|
export const getLatestKey = async (req: Request, res: Response) => {
|
|
const { workspaceId } = req.params;
|
|
|
|
// get latest key
|
|
const latestKey = await Key.find({
|
|
workspace: workspaceId,
|
|
receiver: req.user._id,
|
|
})
|
|
.sort({ createdAt: -1 })
|
|
.limit(1)
|
|
.populate("sender", "+publicKey");
|
|
|
|
const resObj: any = {};
|
|
|
|
if (latestKey.length > 0) {
|
|
resObj["latestKey"] = latestKey[0];
|
|
}
|
|
|
|
return res.status(200).send(resObj);
|
|
};
|