mirror of https://github.com/portainer/portainer
91 lines
2.6 KiB
TypeScript
91 lines
2.6 KiB
TypeScript
import { ConfigMap } from 'kubernetes-types/core/v1';
|
|
import { concat, without } from 'lodash';
|
|
|
|
import { PortainerNamespaceAccessesConfigMap } from '@/react/kubernetes/configs/constants';
|
|
import { Configuration } from '@/react/kubernetes/configs/types';
|
|
|
|
import { NamespaceAccess } from './types';
|
|
|
|
export function createAuthorizeAccessConfigMapPayload(
|
|
namespaceAccesses: NamespaceAccess[],
|
|
selectedItems: NamespaceAccess[],
|
|
namespaceName: string,
|
|
configMap?: Configuration
|
|
): ConfigMap {
|
|
const newRemainingAccesses = concat(namespaceAccesses, ...selectedItems);
|
|
return createAccessConfigMapPayload(
|
|
newRemainingAccesses,
|
|
namespaceName,
|
|
configMap
|
|
);
|
|
}
|
|
|
|
export function createUnauthorizeAccessConfigMapPayload(
|
|
namespaceAccesses: NamespaceAccess[],
|
|
selectedItems: NamespaceAccess[],
|
|
namespaceName: string,
|
|
configMap?: Configuration
|
|
): ConfigMap {
|
|
const newRemainingAccesses = without(namespaceAccesses, ...selectedItems);
|
|
return createAccessConfigMapPayload(
|
|
newRemainingAccesses,
|
|
namespaceName,
|
|
configMap
|
|
);
|
|
}
|
|
|
|
function createAccessConfigMapPayload(
|
|
newRemainingAccesses: NamespaceAccess[],
|
|
namespaceName: string,
|
|
configMap?: Configuration
|
|
): ConfigMap {
|
|
const configMapAccessesValue = JSON.parse(
|
|
configMap?.Data?.[PortainerNamespaceAccessesConfigMap.accessKey] || '{}'
|
|
);
|
|
const newNamespaceAccesses = newRemainingAccesses.reduce(
|
|
(namespaceAccesses, accessItem) => {
|
|
if (accessItem.type === 'user') {
|
|
return {
|
|
...namespaceAccesses,
|
|
UserAccessPolicies: {
|
|
...namespaceAccesses.UserAccessPolicies,
|
|
// hardcode to 0, as they use their environment role
|
|
[`${accessItem.id}`]: { RoleId: 0 },
|
|
},
|
|
};
|
|
}
|
|
return {
|
|
...namespaceAccesses,
|
|
TeamAccessPolicies: {
|
|
...namespaceAccesses.TeamAccessPolicies,
|
|
// hardcode to 0, as they use their environment role
|
|
[`${accessItem.id}`]: { RoleId: 0 },
|
|
},
|
|
};
|
|
},
|
|
{
|
|
UserAccessPolicies: {},
|
|
TeamAccessPolicies: {},
|
|
}
|
|
);
|
|
const newConfigMapAccessesValue = {
|
|
...configMapAccessesValue,
|
|
[namespaceName]: newNamespaceAccesses,
|
|
};
|
|
const updatedConfigMap: ConfigMap = {
|
|
metadata: {
|
|
name: PortainerNamespaceAccessesConfigMap.configMapName,
|
|
namespace: PortainerNamespaceAccessesConfigMap.namespace,
|
|
uid: configMap?.UID,
|
|
},
|
|
data: {
|
|
...configMap?.Data,
|
|
[PortainerNamespaceAccessesConfigMap.accessKey]: JSON.stringify(
|
|
newConfigMapAccessesValue
|
|
),
|
|
},
|
|
};
|
|
|
|
return updatedConfigMap;
|
|
}
|