Fix: Added support for request access

This commit is contained in:
Daniel Hougaard
2024-04-03 16:49:00 -07:00
parent 1ccd74e1a5
commit 4eabbb3ac5

View File

@@ -311,6 +311,91 @@ export const SpecificPrivilegeSecretForm = ({
)}`;
}
return formatDistance(new Date(temporaryAccessField.temporaryAccessEndTime || ""), new Date());
};
};
// This is used for requesting access additional privileges, not directly creating a privilege!
const handleRequestAccess = async (data: TSecretPermissionForm) => {
if (!policies) return;
if (!currentWorkspace) {
createNotification({
type: "error",
text: "No workspace found.",
title: "Error"
});
return;
}
if (!data.secretPath) {
createNotification({
type: "error",
text: "Please select a secret path",
title: "Error"
});
return;
}
const actions = [
{ action: ProjectPermissionActions.Read, allowed: data.read },
{ action: ProjectPermissionActions.Create, allowed: data.create },
{ action: ProjectPermissionActions.Delete, allowed: data.delete },
{ action: ProjectPermissionActions.Edit, allowed: data.edit }
];
const conditions: Record<string, any> = { environment: data.environmentSlug };
if (data.secretPath) {
conditions.secretPath = { $glob: data.secretPath };
}
await requestAccess.mutateAsync({
...data,
...(data.temporaryAccess.isTemporary && {
temporaryAccessStartTime: data.temporaryAccess.temporaryAccessStartTime,
temporaryAccessEndTime: data.temporaryAccess.temporaryAccessEndTime,
temporaryRange: data.temporaryAccess.temporaryRange,
temporaryMode: "relative"
}),
envSlug: data.environmentSlug,
secretPath: data.secretPath,
projectSlug: currentWorkspace.slug,
projectMembershipId: projectMembership.id,
isTemporary: data.temporaryAccess.isTemporary,
permissions: actions
.filter(({ allowed }) => allowed)
.map(({ action }) => ({
action,
subject: [ProjectPermissionSub.Secrets],
conditions
}))
});
createNotification({
type: "success",
text: "Successfully requested access"
});
privilegeForm.reset();
if (onClose) onClose();
};
const handleSubmit = async (data: TSecretPermissionForm) => {
if (privilege) {
handleUpdatePrivilege(data);
} else {
handleRequestAccess(data);
}
};
const getAccessLabel = (exactTime = false) => {
if (isExpired) return "Access expired";
if (!temporaryAccessField?.isTemporary) return "Permanent";
if (exactTime)
return `Until ${format(
new Date(temporaryAccessField.temporaryAccessEndTime || ""),
"yyyy-MM-dd HH:mm:ss"
)}`;
return formatDistance(new Date(temporaryAccessField.temporaryAccessEndTime || ""), new Date());
};
};
return (