mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 10:27:26 +00:00
request & grant cleanup job
This commit is contained in:
@@ -1927,6 +1927,9 @@ export const registerRoutes = async (
|
|||||||
identityDAL
|
identityDAL
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const approvalRequestDAL = approvalRequestDALFactory(db);
|
||||||
|
const approvalRequestGrantsDAL = approvalRequestGrantsDALFactory(db);
|
||||||
|
|
||||||
// DAILY
|
// DAILY
|
||||||
const dailyResourceCleanUp = dailyResourceCleanUpQueueServiceFactory({
|
const dailyResourceCleanUp = dailyResourceCleanUpQueueServiceFactory({
|
||||||
scimService,
|
scimService,
|
||||||
@@ -1942,7 +1945,9 @@ export const registerRoutes = async (
|
|||||||
serviceTokenService,
|
serviceTokenService,
|
||||||
orgService,
|
orgService,
|
||||||
userNotificationDAL,
|
userNotificationDAL,
|
||||||
keyValueStoreDAL
|
keyValueStoreDAL,
|
||||||
|
approvalRequestDAL,
|
||||||
|
approvalRequestGrantsDAL
|
||||||
});
|
});
|
||||||
|
|
||||||
const healthAlert = healthAlertServiceFactory({
|
const healthAlert = healthAlertServiceFactory({
|
||||||
@@ -2423,7 +2428,6 @@ export const registerRoutes = async (
|
|||||||
gatewayV2Service
|
gatewayV2Service
|
||||||
});
|
});
|
||||||
|
|
||||||
const approvalRequestGrantsDAL = approvalRequestGrantsDALFactory(db);
|
|
||||||
const approvalPolicyDAL = approvalPolicyDALFactory(db);
|
const approvalPolicyDAL = approvalPolicyDALFactory(db);
|
||||||
|
|
||||||
const pamAccountService = pamAccountServiceFactory({
|
const pamAccountService = pamAccountServiceFactory({
|
||||||
@@ -2469,7 +2473,6 @@ export const registerRoutes = async (
|
|||||||
|
|
||||||
const approvalPolicyStepsDAL = approvalPolicyStepsDALFactory(db);
|
const approvalPolicyStepsDAL = approvalPolicyStepsDALFactory(db);
|
||||||
const approvalPolicyStepApproversDAL = approvalPolicyStepApproversDALFactory(db);
|
const approvalPolicyStepApproversDAL = approvalPolicyStepApproversDALFactory(db);
|
||||||
const approvalRequestDAL = approvalRequestDALFactory(db);
|
|
||||||
const approvalRequestStepsDAL = approvalRequestStepsDALFactory(db);
|
const approvalRequestStepsDAL = approvalRequestStepsDALFactory(db);
|
||||||
const approvalRequestStepEligibleApproversDAL = approvalRequestStepEligibleApproversDALFactory(db);
|
const approvalRequestStepEligibleApproversDAL = approvalRequestStepEligibleApproversDALFactory(db);
|
||||||
const approvalRequestApprovalsDAL = approvalRequestApprovalsDALFactory(db);
|
const approvalRequestApprovalsDAL = approvalRequestApprovalsDALFactory(db);
|
||||||
|
|||||||
@@ -3,7 +3,12 @@ import { TableName, TApprovalRequestApprovals } from "@app/db/schemas";
|
|||||||
import { DatabaseError } from "@app/lib/errors";
|
import { DatabaseError } from "@app/lib/errors";
|
||||||
import { ormify } from "@app/lib/knex";
|
import { ormify } from "@app/lib/knex";
|
||||||
|
|
||||||
import { ApprovalPolicyType, ApproverType } from "./approval-policy-enums";
|
import {
|
||||||
|
ApprovalPolicyType,
|
||||||
|
ApprovalRequestGrantStatus,
|
||||||
|
ApprovalRequestStatus,
|
||||||
|
ApproverType
|
||||||
|
} from "./approval-policy-enums";
|
||||||
import { ApprovalPolicyStep } from "./approval-policy-types";
|
import { ApprovalPolicyStep } from "./approval-policy-types";
|
||||||
|
|
||||||
// Approval Policy
|
// Approval Policy
|
||||||
@@ -274,7 +279,21 @@ export const approvalRequestDALFactory = (db: TDbClient) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return { ...orm, findStepsByRequestId, findByProjectId };
|
const markExpiredRequests = async () => {
|
||||||
|
try {
|
||||||
|
const result = await db(TableName.ApprovalRequests)
|
||||||
|
.where("status", ApprovalRequestStatus.Pending)
|
||||||
|
.whereNotNull("expiresAt")
|
||||||
|
.where("expiresAt", "<", new Date())
|
||||||
|
.update({ status: ApprovalRequestStatus.Expired });
|
||||||
|
|
||||||
|
return result;
|
||||||
|
} catch (error) {
|
||||||
|
throw new DatabaseError({ error, name: "Mark expired approval requests" });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return { ...orm, findStepsByRequestId, findByProjectId, markExpiredRequests };
|
||||||
};
|
};
|
||||||
|
|
||||||
// Approval Request Steps
|
// Approval Request Steps
|
||||||
@@ -297,7 +316,22 @@ export const approvalRequestStepEligibleApproversDALFactory = (db: TDbClient) =>
|
|||||||
export type TApprovalRequestGrantsDALFactory = ReturnType<typeof approvalRequestGrantsDALFactory>;
|
export type TApprovalRequestGrantsDALFactory = ReturnType<typeof approvalRequestGrantsDALFactory>;
|
||||||
export const approvalRequestGrantsDALFactory = (db: TDbClient) => {
|
export const approvalRequestGrantsDALFactory = (db: TDbClient) => {
|
||||||
const orm = ormify(db, TableName.ApprovalRequestGrants);
|
const orm = ormify(db, TableName.ApprovalRequestGrants);
|
||||||
return orm;
|
|
||||||
|
const markExpiredGrants = async () => {
|
||||||
|
try {
|
||||||
|
const result = await db(TableName.ApprovalRequestGrants)
|
||||||
|
.where("status", ApprovalRequestGrantStatus.Active)
|
||||||
|
.whereNotNull("expiresAt")
|
||||||
|
.where("expiresAt", "<", new Date())
|
||||||
|
.update({ status: ApprovalRequestGrantStatus.Expired });
|
||||||
|
|
||||||
|
return result;
|
||||||
|
} catch (error) {
|
||||||
|
throw new DatabaseError({ error, name: "Mark expired approval grants" });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return { ...orm, markExpiredGrants };
|
||||||
};
|
};
|
||||||
|
|
||||||
// Approval Request Approvals
|
// Approval Request Approvals
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { logger } from "@app/lib/logger";
|
|||||||
import { QueueJobs, QueueName, TQueueServiceFactory } from "@app/queue";
|
import { QueueJobs, QueueName, TQueueServiceFactory } from "@app/queue";
|
||||||
import { TUserNotificationDALFactory } from "@app/services/notification/user-notification-dal";
|
import { TUserNotificationDALFactory } from "@app/services/notification/user-notification-dal";
|
||||||
|
|
||||||
|
import { TApprovalRequestDALFactory, TApprovalRequestGrantsDALFactory } from "../approval-policy/approval-policy-dal";
|
||||||
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
||||||
import { TIdentityUaClientSecretDALFactory } from "../identity-ua/identity-ua-client-secret-dal";
|
import { TIdentityUaClientSecretDALFactory } from "../identity-ua/identity-ua-client-secret-dal";
|
||||||
import { TOrgServiceFactory } from "../org/org-service";
|
import { TOrgServiceFactory } from "../org/org-service";
|
||||||
@@ -31,6 +32,8 @@ type TDailyResourceCleanUpQueueServiceFactoryDep = {
|
|||||||
userNotificationDAL: Pick<TUserNotificationDALFactory, "pruneNotifications">;
|
userNotificationDAL: Pick<TUserNotificationDALFactory, "pruneNotifications">;
|
||||||
keyValueStoreDAL: Pick<TKeyValueStoreDALFactory, "pruneExpiredKeys">;
|
keyValueStoreDAL: Pick<TKeyValueStoreDALFactory, "pruneExpiredKeys">;
|
||||||
scimService: Pick<TScimServiceFactory, "notifyExpiringTokens">;
|
scimService: Pick<TScimServiceFactory, "notifyExpiringTokens">;
|
||||||
|
approvalRequestDAL: Pick<TApprovalRequestDALFactory, "markExpiredRequests">;
|
||||||
|
approvalRequestGrantsDAL: Pick<TApprovalRequestGrantsDALFactory, "markExpiredGrants">;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type TDailyResourceCleanUpQueueServiceFactory = ReturnType<typeof dailyResourceCleanUpQueueServiceFactory>;
|
export type TDailyResourceCleanUpQueueServiceFactory = ReturnType<typeof dailyResourceCleanUpQueueServiceFactory>;
|
||||||
@@ -49,7 +52,9 @@ export const dailyResourceCleanUpQueueServiceFactory = ({
|
|||||||
scimService,
|
scimService,
|
||||||
orgService,
|
orgService,
|
||||||
userNotificationDAL,
|
userNotificationDAL,
|
||||||
keyValueStoreDAL
|
keyValueStoreDAL,
|
||||||
|
approvalRequestDAL,
|
||||||
|
approvalRequestGrantsDAL
|
||||||
}: TDailyResourceCleanUpQueueServiceFactoryDep) => {
|
}: TDailyResourceCleanUpQueueServiceFactoryDep) => {
|
||||||
const appCfg = getConfig();
|
const appCfg = getConfig();
|
||||||
|
|
||||||
@@ -94,6 +99,8 @@ export const dailyResourceCleanUpQueueServiceFactory = ({
|
|||||||
await auditLogDAL.pruneAuditLog();
|
await auditLogDAL.pruneAuditLog();
|
||||||
await userNotificationDAL.pruneNotifications();
|
await userNotificationDAL.pruneNotifications();
|
||||||
await keyValueStoreDAL.pruneExpiredKeys();
|
await keyValueStoreDAL.pruneExpiredKeys();
|
||||||
|
await approvalRequestDAL.markExpiredRequests();
|
||||||
|
await approvalRequestGrantsDAL.markExpiredGrants();
|
||||||
logger.info(`${QueueName.DailyResourceCleanUp}: queue task completed`);
|
logger.info(`${QueueName.DailyResourceCleanUp}: queue task completed`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(error, `${QueueName.DailyResourceCleanUp}: resource cleanup failed`);
|
logger.error(error, `${QueueName.DailyResourceCleanUp}: resource cleanup failed`);
|
||||||
|
|||||||
Reference in New Issue
Block a user