mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-08 01:27:31 +00:00
Add get call secrets route for service token and jwt
This commit is contained in:
+4
-4
@@ -94,13 +94,13 @@ app.use('/api/v1/integration-auth', v1IntegrationAuthRouter);
|
|||||||
// v2 routes
|
// v2 routes
|
||||||
app.use('/api/v2/workspace', v2WorkspaceRouter);
|
app.use('/api/v2/workspace', v2WorkspaceRouter);
|
||||||
app.use('/api/v2/secret', v2SecretRouter);
|
app.use('/api/v2/secret', v2SecretRouter);
|
||||||
app.use('/api/v2/service-token-data', v2ServiceTokenDataRouter);
|
app.use('/api/v2/service-token', v2ServiceTokenDataRouter);
|
||||||
app.use('/api/v2/api-key-data', v2APIKeyDataRouter);
|
app.use('/api/v2/api-key-data', v2APIKeyDataRouter);
|
||||||
|
|
||||||
//* Handle unrouted requests and respond with proper error message as well as status code
|
//* Handle unrouted requests and respond with proper error message as well as status code
|
||||||
app.use((req, res, next)=>{
|
app.use((req, res, next) => {
|
||||||
if(res.headersSent) return next();
|
if (res.headersSent) return next();
|
||||||
next(RouteNotFoundError({message: `The requested source '(${req.method})${req.url}' was not found`}))
|
next(RouteNotFoundError({ message: `The requested source '(${req.method})${req.url}' was not found` }))
|
||||||
})
|
})
|
||||||
|
|
||||||
//* Error Handling Middleware (must be after all routing logic)
|
//* Error Handling Middleware (must be after all routing logic)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { CreateSecretRequestBody, ModifySecretRequestBody, SanitizedSecretForCre
|
|||||||
const { ValidationError } = mongoose.Error;
|
const { ValidationError } = mongoose.Error;
|
||||||
import { BadRequestError, InternalServerError, UnauthorizedRequestError, ValidationError as RouteValidationError } from '../../utils/errors';
|
import { BadRequestError, InternalServerError, UnauthorizedRequestError, ValidationError as RouteValidationError } from '../../utils/errors';
|
||||||
import { AnyBulkWriteOperation } from 'mongodb';
|
import { AnyBulkWriteOperation } from 'mongodb';
|
||||||
|
import { SECRET_PERSONAL, SECRET_SHARED } from "../../variables";
|
||||||
|
|
||||||
export const batchCreateSecrets = async (req: Request, res: Response) => {
|
export const batchCreateSecrets = async (req: Request, res: Response) => {
|
||||||
const secretsToCreate: CreateSecretRequestBody[] = req.body.secrets;
|
const secretsToCreate: CreateSecretRequestBody[] = req.body.secrets;
|
||||||
@@ -135,4 +136,33 @@ export const batchModifySecrets = async (req: Request, res: Response) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return res.status(200).send()
|
return res.status(200).send()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const fetchAllSecrets = async (req: Request, res: Response) => {
|
||||||
|
const { environment } = req.query;
|
||||||
|
const { workspaceId } = req.params;
|
||||||
|
|
||||||
|
let userId: string | undefined = undefined // Used for choosing the personal secrets to fetch in
|
||||||
|
if (req.user) {
|
||||||
|
userId = req.user._id.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req.serviceTokenData) {
|
||||||
|
userId = req.serviceTokenData.user._id
|
||||||
|
}
|
||||||
|
|
||||||
|
const [retriveAllSecretsError, allSecrets] = await to(Secret.find(
|
||||||
|
{
|
||||||
|
workspace: workspaceId,
|
||||||
|
environment,
|
||||||
|
$or: [{ user: userId }, { user: { $exists: false } }],
|
||||||
|
type: { $in: [SECRET_SHARED, SECRET_PERSONAL] }
|
||||||
|
}
|
||||||
|
).then())
|
||||||
|
|
||||||
|
if (retriveAllSecretsError instanceof ValidationError) {
|
||||||
|
throw RouteValidationError({ message: "Unable to get secrets, please try again", stack: retriveAllSecretsError.stack })
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.json(allSecrets)
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
MembershipOrg,
|
MembershipOrg,
|
||||||
Integration,
|
Integration,
|
||||||
IntegrationAuth,
|
IntegrationAuth,
|
||||||
Key,
|
Key,
|
||||||
IUser,
|
IUser,
|
||||||
ServiceToken,
|
ServiceToken,
|
||||||
ServiceTokenData
|
ServiceTokenData
|
||||||
@@ -78,7 +78,7 @@ export const pushWorkspaceSecrets = async (req: Request, res: Response) => {
|
|||||||
workspaceId,
|
workspaceId,
|
||||||
keys
|
keys
|
||||||
});
|
});
|
||||||
|
|
||||||
if (postHogClient) {
|
if (postHogClient) {
|
||||||
postHogClient.capture({
|
postHogClient.capture({
|
||||||
event: 'secrets pushed',
|
event: 'secrets pushed',
|
||||||
@@ -125,7 +125,7 @@ export const pullSecrets = async (req: Request, res: Response) => {
|
|||||||
const environment: string = req.query.environment as string;
|
const environment: string = req.query.environment as string;
|
||||||
const channel: string = req.query.channel as string;
|
const channel: string = req.query.channel as string;
|
||||||
const { workspaceId } = req.params;
|
const { workspaceId } = req.params;
|
||||||
|
|
||||||
let userId;
|
let userId;
|
||||||
if (req.user) {
|
if (req.user) {
|
||||||
userId = req.user._id.toString();
|
userId = req.user._id.toString();
|
||||||
@@ -138,7 +138,7 @@ export const pullSecrets = async (req: Request, res: Response) => {
|
|||||||
workspaceId,
|
workspaceId,
|
||||||
environment
|
environment
|
||||||
});
|
});
|
||||||
|
|
||||||
if (channel !== 'cli') {
|
if (channel !== 'cli') {
|
||||||
secrets = reformatPullSecrets({ secrets });
|
secrets = reformatPullSecrets({ secrets });
|
||||||
}
|
}
|
||||||
@@ -178,7 +178,7 @@ export const getWorkspaceKey = async (req: Request, res: Response) => {
|
|||||||
workspace: workspaceId,
|
workspace: workspaceId,
|
||||||
receiver: req.user._id
|
receiver: req.user._id
|
||||||
}).populate('sender', '+publicKey');
|
}).populate('sender', '+publicKey');
|
||||||
|
|
||||||
if (!key) throw new Error('Failed to find workspace key');
|
if (!key) throw new Error('Failed to find workspace key');
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Sentry.setUser({ email: req.user.email });
|
Sentry.setUser({ email: req.user.email });
|
||||||
@@ -188,9 +188,7 @@ export const getWorkspaceKey = async (req: Request, res: Response) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(200).send({
|
return res.status(200).json(key);
|
||||||
key
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
export const getWorkspaceServiceTokenData = async (
|
export const getWorkspaceServiceTokenData = async (
|
||||||
req: Request,
|
req: Request,
|
||||||
@@ -213,7 +211,7 @@ export const getWorkspaceServiceTokenData = async (
|
|||||||
message: 'Failed to get workspace service token data'
|
message: 'Failed to get workspace service token data'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(200).send({
|
return res.status(200).send({
|
||||||
serviceTokenData
|
serviceTokenData
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import express from 'express';
|
import express, { Request, Response } from 'express';
|
||||||
import { requireAuth, requireWorkspaceAuth, validateRequest } from '../../middleware';
|
import { requireAuth, requireWorkspaceAuth, validateRequest } from '../../middleware';
|
||||||
import { body, param } from 'express-validator';
|
import { body, param, query } from 'express-validator';
|
||||||
import { ADMIN, MEMBER } from '../../variables';
|
import { ADMIN, MEMBER } from '../../variables';
|
||||||
import { CreateSecretRequestBody, ModifySecretRequestBody } from '../../types/secret/types';
|
import { CreateSecretRequestBody, ModifySecretRequestBody } from '../../types/secret/types';
|
||||||
import { secretController } from '../../controllers/v2';
|
import { secretController } from '../../controllers/v2';
|
||||||
|
import { fetchAllSecrets } from '../../controllers/v2/secretController';
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
@@ -26,19 +27,20 @@ router.post(
|
|||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a single secret by secret id
|
* Get all secrets for a given environment and workspace id
|
||||||
*/
|
*/
|
||||||
router.get(
|
router.get(
|
||||||
'/:secretId',
|
'/workspace/:workspaceId',
|
||||||
|
param('workspaceId').exists().trim(),
|
||||||
|
query("environment").exists(),
|
||||||
requireAuth({
|
requireAuth({
|
||||||
acceptedAuthModes: ['jwt']
|
acceptedAuthModes: ['jwt', 'serviceToken']
|
||||||
}),
|
}),
|
||||||
param('secretId').exists().trim(),
|
|
||||||
requireWorkspaceAuth({
|
requireWorkspaceAuth({
|
||||||
acceptedRoles: [ADMIN, MEMBER]
|
acceptedRoles: [ADMIN, MEMBER]
|
||||||
}),
|
}),
|
||||||
validateRequest,
|
validateRequest,
|
||||||
secretController.createSingleSecret
|
fetchAllSecrets
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -42,15 +42,15 @@ router.get(
|
|||||||
);
|
);
|
||||||
|
|
||||||
router.get(
|
router.get(
|
||||||
'/:workspaceId/key',
|
'/:workspaceId/encrypted-key',
|
||||||
requireAuth({
|
requireAuth({
|
||||||
acceptedAuthModes: ['jwt']
|
acceptedAuthModes: ['jwt']
|
||||||
}),
|
}),
|
||||||
requireWorkspaceAuth({
|
requireWorkspaceAuth({
|
||||||
acceptedRoles: [ADMIN, MEMBER]
|
acceptedRoles: [ADMIN, MEMBER]
|
||||||
}),
|
}),
|
||||||
param('workspaceId').exists().trim(),
|
param('workspaceId').exists().trim(),
|
||||||
validateRequest,
|
validateRequest,
|
||||||
workspaceController.getWorkspaceKey
|
workspaceController.getWorkspaceKey
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user