mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-10 07:28:50 +00:00
82 lines
1.9 KiB
TypeScript
82 lines
1.9 KiB
TypeScript
import { Request, Response } from 'express';
|
|
import * as Sentry from '@sentry/node';
|
|
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) => {
|
|
try {
|
|
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();
|
|
} catch (err) {
|
|
Sentry.setUser({ email: req.user.email });
|
|
Sentry.captureException(err);
|
|
return res.status(400).send({
|
|
message: 'Failed to upload key to workspace'
|
|
});
|
|
}
|
|
|
|
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) => {
|
|
let latestKey;
|
|
try {
|
|
const { workspaceId } = req.params;
|
|
|
|
// get latest key
|
|
latestKey = await Key.find({
|
|
workspace: workspaceId,
|
|
receiver: req.user._id
|
|
})
|
|
.sort({ createdAt: -1 })
|
|
.limit(1)
|
|
.populate('sender', '+publicKey');
|
|
} catch (err) {
|
|
Sentry.setUser({ email: req.user.email });
|
|
Sentry.captureException(err);
|
|
return res.status(400).send({
|
|
message: 'Failed to get latest key'
|
|
});
|
|
}
|
|
|
|
const resObj: any = {};
|
|
|
|
if (latestKey.length > 0) {
|
|
resObj['latestKey'] = latestKey[0];
|
|
}
|
|
|
|
return res.status(200).send(resObj);
|
|
}; |