mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-06 20:27:12 +00:00
generate pam access grant as part of post approval flow
This commit is contained in:
@@ -554,7 +554,7 @@ export const pamAccountServiceFactory = ({
|
|||||||
accountPath: `${folderPath}/${account.name}`
|
accountPath: `${folderPath}/${account.name}`
|
||||||
};
|
};
|
||||||
|
|
||||||
const canAccess = await fac.canAccess(approvalRequestGrantsDAL, actor.id, resource.projectId, inputs);
|
const canAccess = await fac.canAccess(approvalRequestGrantsDAL, resource.projectId, actor.id, inputs);
|
||||||
|
|
||||||
if (canAccess) {
|
if (canAccess) {
|
||||||
// Grant exists, allow access without checking permission
|
// Grant exists, allow access without checking permission
|
||||||
|
|||||||
@@ -2485,7 +2485,8 @@ export const registerRoutes = async (
|
|||||||
approvalRequestStepEligibleApproversDAL,
|
approvalRequestStepEligibleApproversDAL,
|
||||||
approvalRequestApprovalsDAL,
|
approvalRequestApprovalsDAL,
|
||||||
userGroupMembershipDAL,
|
userGroupMembershipDAL,
|
||||||
notificationService
|
notificationService,
|
||||||
|
approvalRequestGrantsDAL
|
||||||
});
|
});
|
||||||
|
|
||||||
// setup the communication with license key server
|
// setup the communication with license key server
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import {
|
|||||||
TApprovalPolicyStepsDALFactory,
|
TApprovalPolicyStepsDALFactory,
|
||||||
TApprovalRequestApprovalsDALFactory,
|
TApprovalRequestApprovalsDALFactory,
|
||||||
TApprovalRequestDALFactory,
|
TApprovalRequestDALFactory,
|
||||||
|
TApprovalRequestGrantsDALFactory,
|
||||||
TApprovalRequestStepEligibleApproversDALFactory,
|
TApprovalRequestStepEligibleApproversDALFactory,
|
||||||
TApprovalRequestStepsDALFactory
|
TApprovalRequestStepsDALFactory
|
||||||
} from "./approval-policy-dal";
|
} from "./approval-policy-dal";
|
||||||
@@ -41,6 +42,7 @@ type TApprovalPolicyServiceFactoryDep = {
|
|||||||
approvalRequestDAL: TApprovalRequestDALFactory;
|
approvalRequestDAL: TApprovalRequestDALFactory;
|
||||||
approvalRequestStepsDAL: TApprovalRequestStepsDALFactory;
|
approvalRequestStepsDAL: TApprovalRequestStepsDALFactory;
|
||||||
approvalRequestStepEligibleApproversDAL: TApprovalRequestStepEligibleApproversDALFactory;
|
approvalRequestStepEligibleApproversDAL: TApprovalRequestStepEligibleApproversDALFactory;
|
||||||
|
approvalRequestGrantsDAL: TApprovalRequestGrantsDALFactory;
|
||||||
userGroupMembershipDAL: TUserGroupMembershipDALFactory;
|
userGroupMembershipDAL: TUserGroupMembershipDALFactory;
|
||||||
notificationService: TNotificationServiceFactory;
|
notificationService: TNotificationServiceFactory;
|
||||||
permissionService: Pick<TPermissionServiceFactory, "getProjectPermission" | "getOrgPermission">;
|
permissionService: Pick<TPermissionServiceFactory, "getProjectPermission" | "getOrgPermission">;
|
||||||
@@ -56,6 +58,7 @@ export const approvalPolicyServiceFactory = ({
|
|||||||
approvalRequestDAL,
|
approvalRequestDAL,
|
||||||
approvalRequestStepsDAL,
|
approvalRequestStepsDAL,
|
||||||
approvalRequestStepEligibleApproversDAL,
|
approvalRequestStepEligibleApproversDAL,
|
||||||
|
approvalRequestGrantsDAL,
|
||||||
userGroupMembershipDAL,
|
userGroupMembershipDAL,
|
||||||
notificationService,
|
notificationService,
|
||||||
permissionService,
|
permissionService,
|
||||||
@@ -598,7 +601,7 @@ export const approvalPolicyServiceFactory = ({
|
|||||||
const fac = APPROVAL_POLICY_FACTORY_MAP[updatedRequest.type as ApprovalPolicyType](
|
const fac = APPROVAL_POLICY_FACTORY_MAP[updatedRequest.type as ApprovalPolicyType](
|
||||||
updatedRequest.type as ApprovalPolicyType
|
updatedRequest.type as ApprovalPolicyType
|
||||||
);
|
);
|
||||||
await fac.postApprovalRoutine(newRequest as TApprovalRequest);
|
await fac.postApprovalRoutine(approvalRequestGrantsDAL, newRequest as TApprovalRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
return { request: newRequest };
|
return { request: newRequest };
|
||||||
|
|||||||
@@ -73,7 +73,10 @@ export type TApprovalRequestFactoryValidateConstraints<P extends TApprovalPolicy
|
|||||||
policy: P,
|
policy: P,
|
||||||
inputs: R
|
inputs: R
|
||||||
) => boolean;
|
) => boolean;
|
||||||
export type TApprovalRequestFactoryPostApprovalRoutine = (request: TApprovalRequest) => Promise<void>;
|
export type TApprovalRequestFactoryPostApprovalRoutine = (
|
||||||
|
approvalRequestGrantsDAL: TApprovalRequestGrantsDALFactory,
|
||||||
|
request: TApprovalRequest
|
||||||
|
) => Promise<void>;
|
||||||
|
|
||||||
export type TApprovalResourceFactory<
|
export type TApprovalResourceFactory<
|
||||||
I extends TApprovalPolicyInputs,
|
I extends TApprovalPolicyInputs,
|
||||||
|
|||||||
@@ -74,11 +74,7 @@ export const pamAccessPolicyFactory: TApprovalResourceFactory<
|
|||||||
return grants.some((grant) => {
|
return grants.some((grant) => {
|
||||||
const grantAttributes = grant.attributes as TPamAccessPolicyInputs;
|
const grantAttributes = grant.attributes as TPamAccessPolicyInputs;
|
||||||
const isMatch = picomatch(grantAttributes.accountPath);
|
const isMatch = picomatch(grantAttributes.accountPath);
|
||||||
return (
|
return isMatch(inputs.accountPath) && (!grant.expiresAt || grant.expiresAt > new Date());
|
||||||
grantAttributes.resourceId === inputs.resourceId &&
|
|
||||||
isMatch(inputs.accountPath) &&
|
|
||||||
(!grant.expiresAt || grant.expiresAt > new Date())
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -92,8 +88,20 @@ export const pamAccessPolicyFactory: TApprovalResourceFactory<
|
|||||||
return reqDuration >= ms(durationConstraint.min) && reqDuration <= ms(durationConstraint.max);
|
return reqDuration >= ms(durationConstraint.min) && reqDuration <= ms(durationConstraint.max);
|
||||||
};
|
};
|
||||||
|
|
||||||
const postApprovalRoutine: TApprovalRequestFactoryPostApprovalRoutine = async (_request) => {
|
const postApprovalRoutine: TApprovalRequestFactoryPostApprovalRoutine = async (approvalRequestGrantsDAL, request) => {
|
||||||
// Placeholder
|
const inputs = request.requestData.requestData;
|
||||||
|
const durationMs = ms(inputs.accessDuration);
|
||||||
|
const expiresAt = new Date(Date.now() + durationMs);
|
||||||
|
|
||||||
|
await approvalRequestGrantsDAL.create({
|
||||||
|
projectId: request.projectId,
|
||||||
|
requestId: request.id,
|
||||||
|
granteeUserId: request.requesterId,
|
||||||
|
status: ApprovalRequestGrantStatus.Active,
|
||||||
|
type: request.type,
|
||||||
|
attributes: inputs,
|
||||||
|
expiresAt
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user