From 66bdf442d6f809487f674fecae325ddef0c8470f Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Mon, 30 Apr 2018 17:00:31 -0400 Subject: [PATCH] add necessary apis for org directory imports --- src/abstractions/api.service.ts | 2 ++ src/models/request/importDirectoryRequest.ts | 7 +++++++ .../request/importDirectoryRequestGroup.ts | 5 +++++ .../request/importDirectoryRequestUser.ts | 5 +++++ src/services/api.service.ts | 21 +++++++++++++++++++ 5 files changed, 40 insertions(+) create mode 100644 src/models/request/importDirectoryRequest.ts create mode 100644 src/models/request/importDirectoryRequestGroup.ts create mode 100644 src/models/request/importDirectoryRequestUser.ts diff --git a/src/abstractions/api.service.ts b/src/abstractions/api.service.ts index 4c7d621c144..daad664cb2f 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 00000000000..cd6eb063092 --- /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 00000000000..8e4f7f4ace4 --- /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 00000000000..99d699e77b1 --- /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 35a5f0f8d1a..be3a93d6744 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 {