diff --git a/src/abstractions/api.service.ts b/src/abstractions/api.service.ts index 4c7d621c14..daad664cb2 100644 --- a/src/abstractions/api.service.ts +++ b/src/abstractions/api.service.ts @@ -2,6 +2,7 @@ import { EnvironmentUrls } from '../models/domain/environmentUrls'; import { CipherRequest } from '../models/request/cipherRequest'; import { FolderRequest } from '../models/request/folderRequest'; +import { ImportDirectoryRequest } from '../models/request/importDirectoryRequest'; import { PasswordHintRequest } from '../models/request/passwordHintRequest'; import { RegisterRequest } from '../models/request/registerRequest'; import { TokenRequest } from '../models/request/tokenRequest'; @@ -36,4 +37,5 @@ export abstract class ApiService { postCipherAttachment: (id: string, data: FormData) => Promise; deleteCipherAttachment: (id: string, attachmentId: string) => Promise; getSync: () => Promise; + postImportDirectory: (organizationId: string, request: ImportDirectoryRequest) => Promise; } diff --git a/src/models/request/importDirectoryRequest.ts b/src/models/request/importDirectoryRequest.ts new file mode 100644 index 0000000000..cd6eb06309 --- /dev/null +++ b/src/models/request/importDirectoryRequest.ts @@ -0,0 +1,7 @@ +import { ImportDirectoryRequestGroup } from './importDirectoryRequestGroup'; +import { ImportDirectoryRequestUser } from './importDirectoryRequestUser'; + +export class ImportDirectoryRequest { + groups: ImportDirectoryRequestGroup[] = []; + users: ImportDirectoryRequestUser[] = []; +} diff --git a/src/models/request/importDirectoryRequestGroup.ts b/src/models/request/importDirectoryRequestGroup.ts new file mode 100644 index 0000000000..8e4f7f4ace --- /dev/null +++ b/src/models/request/importDirectoryRequestGroup.ts @@ -0,0 +1,5 @@ +export class ImportDirectoryRequestGroup { + name: string; + externalId: string; + users: string[]; +} diff --git a/src/models/request/importDirectoryRequestUser.ts b/src/models/request/importDirectoryRequestUser.ts new file mode 100644 index 0000000000..99d699e77b --- /dev/null +++ b/src/models/request/importDirectoryRequestUser.ts @@ -0,0 +1,5 @@ +export class ImportDirectoryRequestUser { + externalId: string; + email: string; + deleted: boolean; +} diff --git a/src/services/api.service.ts b/src/services/api.service.ts index 35a5f0f8d1..be3a93d674 100644 --- a/src/services/api.service.ts +++ b/src/services/api.service.ts @@ -8,6 +8,7 @@ import { EnvironmentUrls } from '../models/domain/environmentUrls'; import { CipherRequest } from '../models/request/cipherRequest'; import { FolderRequest } from '../models/request/folderRequest'; +import { ImportDirectoryRequest } from '../models/request/importDirectoryRequest'; import { PasswordHintRequest } from '../models/request/passwordHintRequest'; import { RegisterRequest } from '../models/request/registerRequest'; import { TokenRequest } from '../models/request/tokenRequest'; @@ -379,6 +380,26 @@ export class ApiService implements ApiServiceAbstraction { } } + async postImportDirectory(organizationId: string, request: ImportDirectoryRequest): Promise { + const authHeader = await this.handleTokenState(); + const response = await fetch(new Request(this.baseUrl + '/organizations/' + organizationId + '/import', { + body: JSON.stringify(request), + cache: 'no-cache', + headers: new Headers({ + 'Accept': 'application/json', + 'Authorization': authHeader, + 'Content-Type': 'application/json; charset=utf-8', + 'Device-Type': this.deviceType, + }), + method: 'POST', + })); + + if (response.status !== 200) { + const error = await this.handleError(response, false); + return Promise.reject(error); + } + } + // Helpers private async handleError(response: Response, tokenError: boolean): Promise {