UNPKG

contensis-management-api

Version:

Client for managing content using the Contensis Management API

368 lines (310 loc) 14.6 kB
import { ContensisClient, Group, GroupListOptions, IGroupOperations, User, UserListOptions, GroupUserListOptions, GroupChildListOptions, GroupToCreate } from '../../models'; import { IHttpClient, PagedList, UrlBuilder, MapperFn, ClientParams } from 'contensis-core-api'; let listMappers: { [key: string]: MapperFn } = { pageIndex: (value: number, options: GroupListOptions, params: ClientParams) => (options && options.pageOptions && options.pageOptions.pageIndex) || (params.pageIndex), pageSize: (value: number, options: GroupListOptions, params: ClientParams) => (options && options.pageOptions && options.pageOptions.pageSize) || (params.pageSize), order: (value: string[]) => (value && value.length > 0) ? value : null, q: (value: string) => (!!value) ? value : null, zenql: (value: string) => (!!value) ? value : null, }; let childListMappers: { [key: string]: MapperFn } = { pageIndex: (value: number, options: GroupListOptions, params: ClientParams) => (options && options.pageOptions && options.pageOptions.pageIndex) || (params.pageIndex), pageSize: (value: number, options: GroupListOptions, params: ClientParams) => (options && options.pageOptions && options.pageOptions.pageSize) || (params.pageSize), order: (value: string[]) => (value && value.length > 0) ? value : null, excludedGroups: (value: string[]) => (value && value.length > 0) ? value.join(',') : null, includeSelf: (value: boolean) => (!!value) ? value : null, }; let userListMappers: { [key: string]: MapperFn } = { pageIndex: (value: number, options: UserListOptions, params: ClientParams) => (options && options.pageOptions && options.pageOptions.pageIndex) || (params.pageIndex), pageSize: (value: number, options: UserListOptions, params: ClientParams) => (options && options.pageOptions && options.pageOptions.pageSize) || (params.pageSize), order: (value: string[]) => (value && value.length > 0) ? value : null, excludedGroups: (value: string[]) => (value && value.length > 0) ? value.join(',') : null, includeInherited: (value: boolean) => (!!value) ? value : null, }; export class GroupOperations implements IGroupOperations { constructor(private httpClient: IHttpClient, private contensisClient: ContensisClient) { if (!this.httpClient || !this.contensisClient) { throw new Error('The class GroupOperations was not initialised correctly.'); } } getById(groupId: string): Promise<Group> { if (!groupId) { throw new Error('A valid group id value needs to be specified.'); } return this.getGroup(groupId); } getByName(groupName: string): Promise<Group> { if (!groupName) { throw new Error('A valid group name value needs to be specified.'); } return this.getGroup(groupName); } list(options?: GroupListOptions): Promise<PagedList<Group>> { let url = UrlBuilder.create('/api/security/groups', !options ? {} : { q: null, pageIndex: null, pageSize: null, order: null, zenQL: null }) .addOptions(options) .setParams(this.contensisClient.getParams()) .addMappers(listMappers) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<PagedList<Group>>(url, { headers: this.contensisClient.getHeaders() }); }); } create(group: GroupToCreate): Promise<Group> { if (!group) { throw new Error('A valid group needs to be specified.'); } let url = UrlBuilder.create('/api/security/groups', {}) .setParams(this.contensisClient.getParams()) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<Group>(url, { headers: this.contensisClient.getHeaders(), method: 'POST', body: JSON.stringify(group) }); }); } update(group: Group): Promise<Group> { if (!group) { throw new Error('A valid group needs to be specified.'); } if (!group.id) { throw new Error('A valid group id value needs to be specified.'); } let url = UrlBuilder.create('/api/security/groups/:id', {}) .addOptions(group.id, 'id') .setParams(this.contensisClient.getParams()) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<Group>(url, { headers: this.contensisClient.getHeaders(), method: 'PUT', body: JSON.stringify(group) }); }); } delete(id: string): Promise<void> { if (!id) { throw new Error('A valid id needs to be specified.'); } let url = UrlBuilder.create('/api/security/groups/:id', {}) .addOptions(id, 'id') .setParams(this.contensisClient.getParams()) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<void>(url, { headers: this.contensisClient.getHeaders(), method: 'DELETE' }); }); } addUser(groupId: string, userId: string): Promise<void> { if (!groupId) { throw new Error('A valid group id needs to be specified.'); } if (!userId) { throw new Error('A valid user id needs to be specified.'); } let url = UrlBuilder.create('/api/security/groups/:groupId/users/:userId', {}) .addOptions(groupId, 'groupId') .addOptions(userId, 'userId') .setParams(this.contensisClient.getParams()) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<void>(url, { headers: this.contensisClient.getHeaders(), method: 'PUT' }); }); } addUsers(groupId: string, userIds: string[]): Promise<void> { if (!groupId) { throw new Error('A valid group id needs to be specified.'); } if (!userIds || userIds.length === 0) { throw new Error('At least one valid user id needs to be specified.'); } let url = UrlBuilder.create('/api/security/groups/:groupId/users', {}) .addOptions(groupId, 'groupId') .setParams(this.contensisClient.getParams()) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<void>(url, { headers: this.contensisClient.getHeaders(), method: 'POST', body: JSON.stringify(userIds) }); }); } removeUser(groupId: string, userId: string): Promise<void> { if (!groupId) { throw new Error('A valid group id needs to be specified.'); } if (!userId) { throw new Error('A valid user id needs to be specified.'); } let url = UrlBuilder.create('/api/security/groups/:groupId/users/:userId', {}) .addOptions(groupId, 'groupId') .addOptions(userId, 'userId') .setParams(this.contensisClient.getParams()) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<void>(url, { headers: this.contensisClient.getHeaders(), method: 'DELETE' }); }); } hasUser(groupId: string, userId: string): Promise<boolean> { if (!groupId) { throw new Error('A valid group id needs to be specified.'); } if (!userId) { throw new Error('A valid users id needs to be specified.'); } let url = UrlBuilder.create('/api/security/groups/:groupId/users/:userId', {}) .addOptions(groupId, 'groupId') .addOptions(userId, 'userId') .setParams(this.contensisClient.getParams()) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<void>(url, { headers: this.contensisClient.getHeaders(), method: 'HEAD' }).then(() => true, () => false); }); } addChildGroup(groupId: string, childGroupId: string): Promise<void> { if (!groupId) { throw new Error('A valid group id needs to be specified.'); } if (!childGroupId) { throw new Error('A valid child group id needs to be specified.'); } let url = UrlBuilder.create('/api/security/groups/:groupId/groups/:childGroupId', {}) .addOptions(groupId, 'groupId') .addOptions(childGroupId, 'childGroupId') .setParams(this.contensisClient.getParams()) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<void>(url, { headers: this.contensisClient.getHeaders(), method: 'PUT' }); }); } addChildGroups(groupId: string, childGroupIds: string[]): Promise<void> { if (!groupId) { throw new Error('A valid group id needs to be specified.'); } if (!childGroupIds || childGroupIds.length === 0) { throw new Error('At least one valid child group id needs to be specified.'); } let url = UrlBuilder.create('/api/security/groups/:groupId/groups', {}) .addOptions(groupId, 'groupId') .setParams(this.contensisClient.getParams()) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<void>(url, { headers: this.contensisClient.getHeaders(), method: 'POST', body: JSON.stringify(childGroupIds) }); }); } removeChildGroup(groupId: string, childGroupId: string): Promise<void> { if (!groupId) { throw new Error('A valid group id needs to be specified.'); } if (!childGroupId) { throw new Error('A valid child group id needs to be specified.'); } let url = UrlBuilder.create('/api/security/groups/:groupId/groups/:childGroupId', {}) .addOptions(groupId, 'groupId') .addOptions(childGroupId, 'childGroupId') .setParams(this.contensisClient.getParams()) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<void>(url, { headers: this.contensisClient.getHeaders(), method: 'DELETE' }); }); } getUsersByGroupId(groupId: string, options?: GroupUserListOptions): Promise<PagedList<User>> { if (!groupId) { throw new Error('A valid group id value needs to be specified.'); } return this.getUsersInGroup(groupId, options); } getUsersByGroupName(groupName: string, options?: GroupUserListOptions): Promise<PagedList<User>> { if (!groupName) { throw new Error('A valid group name value needs to be specified.'); } return this.getUsersInGroup(groupName, options); } getChildGroupsByGroupId(groupId: string, options?: GroupChildListOptions): Promise<PagedList<Group>> { if (!groupId) { throw new Error('A valid group id value needs to be specified.'); } return this.getChildGroups(groupId, options); } getChildGroupsByGroupName(groupName: string, options?: GroupChildListOptions): Promise<PagedList<Group>> { if (!groupName) { throw new Error('A valid group name value needs to be specified.'); } return this.getChildGroups(groupName, options); } private getGroup(idOrName: string) { let url = UrlBuilder.create('/api/security/groups/:idOrName', {}) .addOptions(idOrName, 'idOrName') .setParams(this.contensisClient.getParams()) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<Group>(url, { headers: this.contensisClient.getHeaders() }); }); } private getUsersInGroup(idOrName: string, options?: GroupUserListOptions) { let url = UrlBuilder.create('/api/security/groups/:idOrName/users', !options ? {} : { includeInherited: null, excludedGroups: null, q: null, pageIndex: null, pageSize: null, order: null, zenQL: null }) .addOptions(idOrName, 'idOrName') .addOptions(options) .setParams(this.contensisClient.getParams()) .addMappers(userListMappers) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<PagedList<User>>(url, { headers: this.contensisClient.getHeaders() }); }); } private getChildGroups(idOrName: string, options?: GroupChildListOptions) { let url = UrlBuilder.create('/api/security/groups/:idOrName/groups', !options ? {} : { includeSelf: null, includeInherited: null, excludedGroups: null, q: null, pageIndex: null, pageSize: null, order: null, zenQL: null }) .addOptions(idOrName, 'idOrName') .addOptions(options) .setParams(this.contensisClient.getParams()) .addMappers(childListMappers) .toUrl(); return this.contensisClient.ensureBearerToken().then(() => { return this.httpClient.request<PagedList<Group>>(url, { headers: this.contensisClient.getHeaders() }); }); } }