mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 20:27:43 +00:00
reduce k8 events
This commit is contained in:
@@ -9,6 +9,7 @@ import {
|
|||||||
ACTION_UPDATE_SECRETS,
|
ACTION_UPDATE_SECRETS,
|
||||||
ALGORITHM_AES_256_GCM,
|
ALGORITHM_AES_256_GCM,
|
||||||
ENCODING_SCHEME_UTF8,
|
ENCODING_SCHEME_UTF8,
|
||||||
|
K8_USER_AGENT_NAME,
|
||||||
SECRET_PERSONAL
|
SECRET_PERSONAL
|
||||||
} from "../../variables";
|
} from "../../variables";
|
||||||
import { BadRequestError, UnauthorizedRequestError } from "../../utils/errors";
|
import { BadRequestError, UnauthorizedRequestError } from "../../utils/errors";
|
||||||
@@ -59,7 +60,7 @@ export const batchSecrets = async (req: Request, res: Response) => {
|
|||||||
|
|
||||||
let secretPath = req.body.secretPath as string;
|
let secretPath = req.body.secretPath as string;
|
||||||
let folderId = req.body.folderId as string;
|
let folderId = req.body.folderId as string;
|
||||||
|
|
||||||
const createSecrets: BatchSecret[] = [];
|
const createSecrets: BatchSecret[] = [];
|
||||||
const updateSecrets: BatchSecret[] = [];
|
const updateSecrets: BatchSecret[] = [];
|
||||||
const deleteSecrets: { _id: Types.ObjectId, secretName: string; }[] = [];
|
const deleteSecrets: { _id: Types.ObjectId, secretName: string; }[] = [];
|
||||||
@@ -154,7 +155,7 @@ export const batchSecrets = async (req: Request, res: Response) => {
|
|||||||
};
|
};
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
const auditLogs = await Promise.all(
|
const auditLogs = await Promise.all(
|
||||||
createdSecrets.map((secret, index) => {
|
createdSecrets.map((secret, index) => {
|
||||||
return EEAuditLogService.createAuditLog(
|
return EEAuditLogService.createAuditLog(
|
||||||
@@ -178,7 +179,7 @@ export const batchSecrets = async (req: Request, res: Response) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
await AuditLog.insertMany(auditLogs);
|
await AuditLog.insertMany(auditLogs);
|
||||||
|
|
||||||
const addAction = (await EELogService.createAction({
|
const addAction = (await EELogService.createAction({
|
||||||
name: ACTION_ADD_SECRETS,
|
name: ACTION_ADD_SECRETS,
|
||||||
userId: req.user?._id,
|
userId: req.user?._id,
|
||||||
@@ -280,7 +281,7 @@ export const batchSecrets = async (req: Request, res: Response) => {
|
|||||||
$in: updateSecrets.map((u) => new Types.ObjectId(u._id))
|
$in: updateSecrets.map((u) => new Types.ObjectId(u._id))
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const auditLogs = await Promise.all(
|
const auditLogs = await Promise.all(
|
||||||
updateSecrets.map((secret) => {
|
updateSecrets.map((secret) => {
|
||||||
return EEAuditLogService.createAuditLog(
|
return EEAuditLogService.createAuditLog(
|
||||||
@@ -332,26 +333,26 @@ export const batchSecrets = async (req: Request, res: Response) => {
|
|||||||
// handle delete secrets
|
// handle delete secrets
|
||||||
if (deleteSecrets.length > 0) {
|
if (deleteSecrets.length > 0) {
|
||||||
const deleteSecretIds: Types.ObjectId[] = deleteSecrets.map((s) => s._id);
|
const deleteSecretIds: Types.ObjectId[] = deleteSecrets.map((s) => s._id);
|
||||||
|
|
||||||
const deletedSecretsObj = (await Secret.find({
|
const deletedSecretsObj = (await Secret.find({
|
||||||
_id: {
|
_id: {
|
||||||
$in: deleteSecretIds
|
$in: deleteSecretIds
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
.reduce(
|
.reduce(
|
||||||
(obj: any, secret: ISecret) => ({
|
(obj: any, secret: ISecret) => ({
|
||||||
...obj,
|
...obj,
|
||||||
[secret._id.toString()]: secret
|
[secret._id.toString()]: secret
|
||||||
}),
|
}),
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
|
|
||||||
await Secret.deleteMany({
|
await Secret.deleteMany({
|
||||||
_id: {
|
_id: {
|
||||||
$in: deleteSecretIds
|
$in: deleteSecretIds
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
await EESecretService.markDeletedSecretVersions({
|
await EESecretService.markDeletedSecretVersions({
|
||||||
secretIds: deleteSecretIds
|
secretIds: deleteSecretIds
|
||||||
});
|
});
|
||||||
@@ -952,7 +953,7 @@ export const getSecrets = async (req: Request, res: Response) => {
|
|||||||
channel,
|
channel,
|
||||||
ipAddress: req.realIP
|
ipAddress: req.realIP
|
||||||
}));
|
}));
|
||||||
|
|
||||||
await EEAuditLogService.createAuditLog(
|
await EEAuditLogService.createAuditLog(
|
||||||
req.authData,
|
req.authData,
|
||||||
{
|
{
|
||||||
@@ -969,22 +970,36 @@ export const getSecrets = async (req: Request, res: Response) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const postHogClient = await TelemetryService.getPostHogClient();
|
const postHogClient = await TelemetryService.getPostHogClient();
|
||||||
|
|
||||||
|
// reduce the number of events captured
|
||||||
|
let shouldRecordK8Event = false
|
||||||
|
if (req.authData instanceof ServiceTokenData && req.authData.userAgent == K8_USER_AGENT_NAME) {
|
||||||
|
const randomNumber = Math.random();
|
||||||
|
if (randomNumber > 0.9) {
|
||||||
|
shouldRecordK8Event = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (postHogClient) {
|
if (postHogClient) {
|
||||||
postHogClient.capture({
|
const shouldCapture = req.authData.userAgent !== K8_USER_AGENT_NAME || shouldRecordK8Event;
|
||||||
event: "secrets pulled",
|
const approximateForNoneCapturedEvents = secrets.length * 10
|
||||||
distinctId: await TelemetryService.getDistinctId({
|
|
||||||
authData: req.authData
|
if (shouldCapture) {
|
||||||
}),
|
postHogClient.capture({
|
||||||
properties: {
|
event: "secrets pulled",
|
||||||
numberOfSecrets: secrets.length,
|
distinctId: await TelemetryService.getDistinctId({
|
||||||
environment,
|
authData: req.authData
|
||||||
workspaceId,
|
}),
|
||||||
channel,
|
properties: {
|
||||||
folderId,
|
numberOfSecrets: shouldRecordK8Event ? approximateForNoneCapturedEvents : secrets.length,
|
||||||
userAgent: req.headers?.["user-agent"]
|
environment,
|
||||||
}
|
workspaceId,
|
||||||
});
|
folderId,
|
||||||
|
channel: req.authData.userAgentType,
|
||||||
|
userAgent: req.authData.userAgent
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(200).send({
|
return res.status(200).send({
|
||||||
@@ -1091,10 +1106,10 @@ export const updateSecrets = async (req: Request, res: Response) => {
|
|||||||
tags,
|
tags,
|
||||||
...(secretCommentCiphertext !== undefined && secretCommentIV && secretCommentTag
|
...(secretCommentCiphertext !== undefined && secretCommentIV && secretCommentTag
|
||||||
? {
|
? {
|
||||||
secretCommentCiphertext,
|
secretCommentCiphertext,
|
||||||
secretCommentIV,
|
secretCommentIV,
|
||||||
secretCommentTag
|
secretCommentTag
|
||||||
}
|
}
|
||||||
: {})
|
: {})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import {
|
|||||||
ALGORITHM_AES_256_GCM,
|
ALGORITHM_AES_256_GCM,
|
||||||
ENCODING_SCHEME_BASE64,
|
ENCODING_SCHEME_BASE64,
|
||||||
ENCODING_SCHEME_UTF8,
|
ENCODING_SCHEME_UTF8,
|
||||||
|
K8_USER_AGENT_NAME,
|
||||||
SECRET_PERSONAL,
|
SECRET_PERSONAL,
|
||||||
SECRET_SHARED
|
SECRET_SHARED
|
||||||
} from "../variables";
|
} from "../variables";
|
||||||
@@ -396,7 +397,7 @@ export const createSecretHelper = async ({
|
|||||||
keyEncoding: ENCODING_SCHEME_UTF8,
|
keyEncoding: ENCODING_SCHEME_UTF8,
|
||||||
metadata
|
metadata
|
||||||
}).save();
|
}).save();
|
||||||
|
|
||||||
const secretVersion = new SecretVersion({
|
const secretVersion = new SecretVersion({
|
||||||
secret: secret._id,
|
secret: secret._id,
|
||||||
version: secret.version,
|
version: secret.version,
|
||||||
@@ -416,7 +417,7 @@ export const createSecretHelper = async ({
|
|||||||
algorithm: ALGORITHM_AES_256_GCM,
|
algorithm: ALGORITHM_AES_256_GCM,
|
||||||
keyEncoding: ENCODING_SCHEME_UTF8
|
keyEncoding: ENCODING_SCHEME_UTF8
|
||||||
});
|
});
|
||||||
|
|
||||||
// (EE) add version for new secret
|
// (EE) add version for new secret
|
||||||
await EESecretService.addSecretVersions({
|
await EESecretService.addSecretVersions({
|
||||||
secretVersions: [secretVersion]
|
secretVersions: [secretVersion]
|
||||||
@@ -567,24 +568,34 @@ export const getSecretsHelper = async ({
|
|||||||
);
|
);
|
||||||
|
|
||||||
const postHogClient = await TelemetryService.getPostHogClient();
|
const postHogClient = await TelemetryService.getPostHogClient();
|
||||||
|
|
||||||
const numberOfSignupSecrets = (secrets.filter((secret) => secret?.metadata?.source === "signup")).length;
|
|
||||||
|
|
||||||
if (postHogClient && (secrets.length - numberOfSignupSecrets > 0)) {
|
// reduce the number of events captured
|
||||||
postHogClient.capture({
|
let shouldRecordK8Event = false
|
||||||
event: "secrets pulled",
|
if (authData instanceof ServiceTokenData && authData.userAgent == K8_USER_AGENT_NAME) {
|
||||||
distinctId: await TelemetryService.getDistinctId({
|
const randomNumber = Math.random();
|
||||||
authData
|
if (randomNumber > 0.9) {
|
||||||
}),
|
shouldRecordK8Event = true
|
||||||
properties: {
|
}
|
||||||
numberOfSecrets: secrets.length - numberOfSignupSecrets,
|
}
|
||||||
environment,
|
|
||||||
workspaceId,
|
if (postHogClient) {
|
||||||
folderId,
|
const shouldCapture = authData.userAgent !== K8_USER_AGENT_NAME || shouldRecordK8Event;
|
||||||
channel: authData.userAgentType,
|
const approximateForNoneCapturedEvents = secrets.length * 10
|
||||||
userAgent: authData.userAgent
|
|
||||||
}
|
if (shouldCapture) {
|
||||||
});
|
postHogClient.capture({
|
||||||
|
event: "secrets pulled",
|
||||||
|
distinctId: await TelemetryService.getDistinctId({ authData }),
|
||||||
|
properties: {
|
||||||
|
numberOfSecrets: shouldRecordK8Event ? approximateForNoneCapturedEvents : secrets.length,
|
||||||
|
environment,
|
||||||
|
workspaceId,
|
||||||
|
folderId,
|
||||||
|
channel: authData.userAgentType,
|
||||||
|
userAgent: authData.userAgent
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return secrets;
|
return secrets;
|
||||||
|
|||||||
@@ -2,4 +2,6 @@ export enum AuthMode {
|
|||||||
JWT = "jwt",
|
JWT = "jwt",
|
||||||
SERVICE_TOKEN = "serviceToken",
|
SERVICE_TOKEN = "serviceToken",
|
||||||
API_KEY = "apiKey"
|
API_KEY = "apiKey"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const K8_USER_AGENT_NAME = "k8-operator"
|
||||||
Reference in New Issue
Block a user