mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-03 17:26:07 +00:00
feat(notifications): secret change request notification
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
import { TSecretApprovalRequests } from "@app/db/schemas";
|
import { TSecretApprovalRequests } from "@app/db/schemas";
|
||||||
import { getConfig } from "@app/lib/config/env";
|
import { getConfig } from "@app/lib/config/env";
|
||||||
|
import { TNotificationServiceFactory } from "@app/services/notification/notification-service";
|
||||||
|
import { NotificationType } from "@app/services/notification/notification-types";
|
||||||
import { TProjectDALFactory } from "@app/services/project/project-dal";
|
import { TProjectDALFactory } from "@app/services/project/project-dal";
|
||||||
import { SmtpTemplates, TSmtpService } from "@app/services/smtp/smtp-service";
|
import { SmtpTemplates, TSmtpService } from "@app/services/smtp/smtp-service";
|
||||||
|
|
||||||
@@ -11,6 +13,7 @@ type TSendApprovalEmails = {
|
|||||||
smtpService: Pick<TSmtpService, "sendMail">;
|
smtpService: Pick<TSmtpService, "sendMail">;
|
||||||
projectId: string;
|
projectId: string;
|
||||||
secretApprovalRequest: TSecretApprovalRequests;
|
secretApprovalRequest: TSecretApprovalRequests;
|
||||||
|
notificationService: Pick<TNotificationServiceFactory, "createUserNotifications">;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const sendApprovalEmailsFn = async ({
|
export const sendApprovalEmailsFn = async ({
|
||||||
@@ -18,7 +21,8 @@ export const sendApprovalEmailsFn = async ({
|
|||||||
projectDAL,
|
projectDAL,
|
||||||
smtpService,
|
smtpService,
|
||||||
projectId,
|
projectId,
|
||||||
secretApprovalRequest
|
secretApprovalRequest,
|
||||||
|
notificationService
|
||||||
}: TSendApprovalEmails) => {
|
}: TSendApprovalEmails) => {
|
||||||
const cfg = getConfig();
|
const cfg = getConfig();
|
||||||
|
|
||||||
@@ -26,6 +30,17 @@ export const sendApprovalEmailsFn = async ({
|
|||||||
|
|
||||||
const project = await projectDAL.findProjectWithOrg(projectId);
|
const project = await projectDAL.findProjectWithOrg(projectId);
|
||||||
|
|
||||||
|
await notificationService.createUserNotifications(
|
||||||
|
policy.userApprovers.map((approver) => ({
|
||||||
|
userId: approver.userId,
|
||||||
|
orgId: project.orgId,
|
||||||
|
type: NotificationType.SECRET_CHANGE_REQUEST,
|
||||||
|
title: "Secret Change Request",
|
||||||
|
body: `You have a new secret change request pending your review for the project **${project.name}** in the organization **${project.organization.name}**.`,
|
||||||
|
link: `/projects/secret-management/${project.id}/approval?requestId=${secretApprovalRequest.id}`
|
||||||
|
}))
|
||||||
|
);
|
||||||
|
|
||||||
// now we need to go through each of the reviewers and print out all the commits that they need to approve
|
// now we need to go through each of the reviewers and print out all the commits that they need to approve
|
||||||
for await (const reviewerUser of policy.userApprovers) {
|
for await (const reviewerUser of policy.userApprovers) {
|
||||||
await smtpService.sendMail({
|
await smtpService.sendMail({
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import { TKmsServiceFactory } from "@app/services/kms/kms-service";
|
|||||||
import { KmsDataKey } from "@app/services/kms/kms-types";
|
import { KmsDataKey } from "@app/services/kms/kms-types";
|
||||||
import { TMicrosoftTeamsServiceFactory } from "@app/services/microsoft-teams/microsoft-teams-service";
|
import { TMicrosoftTeamsServiceFactory } from "@app/services/microsoft-teams/microsoft-teams-service";
|
||||||
import { TProjectMicrosoftTeamsConfigDALFactory } from "@app/services/microsoft-teams/project-microsoft-teams-config-dal";
|
import { TProjectMicrosoftTeamsConfigDALFactory } from "@app/services/microsoft-teams/project-microsoft-teams-config-dal";
|
||||||
|
import { TNotificationServiceFactory } from "@app/services/notification/notification-service";
|
||||||
import { TProjectDALFactory } from "@app/services/project/project-dal";
|
import { TProjectDALFactory } from "@app/services/project/project-dal";
|
||||||
import { TProjectBotServiceFactory } from "@app/services/project-bot/project-bot-service";
|
import { TProjectBotServiceFactory } from "@app/services/project-bot/project-bot-service";
|
||||||
import { TProjectEnvDALFactory } from "@app/services/project-env/project-env-dal";
|
import { TProjectEnvDALFactory } from "@app/services/project-env/project-env-dal";
|
||||||
@@ -140,6 +141,7 @@ type TSecretApprovalRequestServiceFactoryDep = {
|
|||||||
projectMicrosoftTeamsConfigDAL: Pick<TProjectMicrosoftTeamsConfigDALFactory, "getIntegrationDetailsByProject">;
|
projectMicrosoftTeamsConfigDAL: Pick<TProjectMicrosoftTeamsConfigDALFactory, "getIntegrationDetailsByProject">;
|
||||||
microsoftTeamsService: Pick<TMicrosoftTeamsServiceFactory, "sendNotification">;
|
microsoftTeamsService: Pick<TMicrosoftTeamsServiceFactory, "sendNotification">;
|
||||||
folderCommitService: Pick<TFolderCommitServiceFactory, "createCommit">;
|
folderCommitService: Pick<TFolderCommitServiceFactory, "createCommit">;
|
||||||
|
notificationService: Pick<TNotificationServiceFactory, "createUserNotifications">;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type TSecretApprovalRequestServiceFactory = ReturnType<typeof secretApprovalRequestServiceFactory>;
|
export type TSecretApprovalRequestServiceFactory = ReturnType<typeof secretApprovalRequestServiceFactory>;
|
||||||
@@ -172,7 +174,8 @@ export const secretApprovalRequestServiceFactory = ({
|
|||||||
resourceMetadataDAL,
|
resourceMetadataDAL,
|
||||||
projectMicrosoftTeamsConfigDAL,
|
projectMicrosoftTeamsConfigDAL,
|
||||||
microsoftTeamsService,
|
microsoftTeamsService,
|
||||||
folderCommitService
|
folderCommitService,
|
||||||
|
notificationService
|
||||||
}: TSecretApprovalRequestServiceFactoryDep) => {
|
}: TSecretApprovalRequestServiceFactoryDep) => {
|
||||||
const requestCount = async ({
|
const requestCount = async ({
|
||||||
projectId,
|
projectId,
|
||||||
@@ -1446,7 +1449,8 @@ export const secretApprovalRequestServiceFactory = ({
|
|||||||
secretApprovalPolicyDAL,
|
secretApprovalPolicyDAL,
|
||||||
secretApprovalRequest,
|
secretApprovalRequest,
|
||||||
smtpService,
|
smtpService,
|
||||||
projectId
|
projectId,
|
||||||
|
notificationService
|
||||||
});
|
});
|
||||||
|
|
||||||
return secretApprovalRequest;
|
return secretApprovalRequest;
|
||||||
@@ -1813,7 +1817,8 @@ export const secretApprovalRequestServiceFactory = ({
|
|||||||
secretApprovalPolicyDAL,
|
secretApprovalPolicyDAL,
|
||||||
secretApprovalRequest,
|
secretApprovalRequest,
|
||||||
smtpService,
|
smtpService,
|
||||||
projectId
|
projectId,
|
||||||
|
notificationService
|
||||||
});
|
});
|
||||||
return secretApprovalRequest;
|
return secretApprovalRequest;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1363,7 +1363,8 @@ export const registerRoutes = async (
|
|||||||
resourceMetadataDAL,
|
resourceMetadataDAL,
|
||||||
projectMicrosoftTeamsConfigDAL,
|
projectMicrosoftTeamsConfigDAL,
|
||||||
microsoftTeamsService,
|
microsoftTeamsService,
|
||||||
folderCommitService
|
folderCommitService,
|
||||||
|
notificationService
|
||||||
});
|
});
|
||||||
|
|
||||||
const secretService = secretServiceFactory({
|
const secretService = secretServiceFactory({
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
export enum NotificationType {
|
export enum NotificationType {
|
||||||
ACCESS_APPROVAL_REQUEST = "access-approval-request",
|
ACCESS_APPROVAL_REQUEST = "access-approval-request",
|
||||||
ACCESS_APPROVAL_REQUEST_UPDATED = "access-approval-request-updated",
|
ACCESS_APPROVAL_REQUEST_UPDATED = "access-approval-request-updated",
|
||||||
ACCESS_POLICY_BYPASSED = "access-policy-bypassed"
|
ACCESS_POLICY_BYPASSED = "access-policy-bypassed",
|
||||||
|
SECRET_CHANGE_REQUEST = "secret-change-request"
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TCreateUserNotificationDTO {
|
export interface TCreateUserNotificationDTO {
|
||||||
|
|||||||
Reference in New Issue
Block a user