import { AttributePrivilege, AttributePrivilegesResponse, CreateSecurityGroupRequest, Privilege, SecurityGroup, SecurityGroupsResponse, TypePrivilege, TypePrivilegesResponse, TypesResponse, UsersResponse, UserWithOrganizations, } from '../../interfaces' import { Api } from '../api' export const PRIVILEGES_API = '/service/nugeta' export class Privileges { api: Api constructor(api: Api) { this.api = api } getSecurityGroups(organization: string, page = 1, perPage = 100) { return this.api.apisauce.get( `${PRIVILEGES_API}/security-groups`, { org: organization, page, 'per-page': perPage, }, ) } getSecurityGroupUsers( groupId: string, filters: { page?: number perPage?: number 'user-name-prefix'?: string }, ) { return this.api.apisauce.get( `${PRIVILEGES_API}/security-groups/${groupId}/users`, { page: filters.page, 'per-page': filters.perPage, 'user-name-prefix': filters['user-name-prefix'], }, ) } getSecurityGroupTypes(groupId: string, page = 1, perPage = 100) { return this.api.apisauce.get( `${PRIVILEGES_API}/security-groups/${groupId}/element-types`, { page, 'per-page': perPage, }, ) } getUserSecurityGroups(organization: string) { return this.api.apisauce.get( `${PRIVILEGES_API}/security-groups/user/${organization}`, ) } createSecurityGroup(data: CreateSecurityGroupRequest) { return this.api.apisauce.post< SecurityGroup, { errors: Record } >(`${PRIVILEGES_API}/security-groups`, data) } cloneSecurityGroup( groupId: string, data: CreateSecurityGroupRequest, scope: 'privileges' | 'users' | 'all' = 'all', ) { return this.api.apisauce.put( `${PRIVILEGES_API}/security-groups/${groupId}/clone`, data, { params: { 'clone-scope': scope, }, }, ) } deleteSecurityGroup(groupId: string) { return this.api.apisauce.delete( `${PRIVILEGES_API}/security-groups/${groupId}`, ) } getSecurityGroupsUsersBatch(groupIds: string[]) { return this.api.apisauce.post<{ totalUsers: number securityGroups: Record }>(`${PRIVILEGES_API}/security-groups/users`, { securityGroups: groupIds, }) } addSecurityGroupUsers(groupId: string, users: { id: string }[]) { return this.api.apisauce.patch( `${PRIVILEGES_API}/security-groups/${groupId}/users`, users, ) } deleteSecurityGroupUser(groupId: string, userId: string) { return this.api.apisauce.delete( `${PRIVILEGES_API}/security-groups/${groupId}/users/${userId}`, ) } getAttributePrivileges( groupId: string, type: string, page = 1, perPage = 100, ) { return this.api.apisauce.get( `${PRIVILEGES_API}/security-groups/${groupId}/attributes-privileges`, { 'element-type': type, page, 'per-page': perPage, }, ) } setAttributePrivileges(groupId: string, privileges: AttributePrivilege[]) { return this.api.apisauce.patch( `${PRIVILEGES_API}/security-groups/${groupId}/attributes-privileges`, privileges, ) } getTypePrivileges(groupId: string, type: string, page = 1, perPage = 1) { return this.api.apisauce.get( `${PRIVILEGES_API}/security-groups/${groupId}/element-types-privileges`, { 'element-type': type, page, 'per-page': perPage, }, ) } createTypePrivileges(groupId: string, type: string, privileges: Privilege[]) { return this.api.apisauce.post( `${PRIVILEGES_API}/security-groups/${groupId}/element-types-privileges`, { 'element-type': type, rights: privileges, }, ) } updateTypePrivileges( groupId: string, privilegeId: string, privileges: Privilege[], ) { return this.api.apisauce.put( `${PRIVILEGES_API}/security-groups/${groupId}/element-types-privileges/${privilegeId}/rights`, privileges, ) } }