bulk share apis
This commit is contained in:
parent
7a5a4e654a
commit
cfad521ea8
|
@ -2,6 +2,7 @@ import { EnvironmentUrls } from '../models/domain/environmentUrls';
|
||||||
|
|
||||||
import { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';
|
import { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';
|
||||||
import { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';
|
import { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';
|
||||||
|
import { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';
|
||||||
import { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';
|
import { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';
|
||||||
import { CipherRequest } from '../models/request/cipherRequest';
|
import { CipherRequest } from '../models/request/cipherRequest';
|
||||||
import { CipherShareRequest } from '../models/request/cipherShareRequest';
|
import { CipherShareRequest } from '../models/request/cipherShareRequest';
|
||||||
|
@ -44,6 +45,7 @@ export abstract class ApiService {
|
||||||
deleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise<any>;
|
deleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise<any>;
|
||||||
putMoveCiphers: (request: CipherBulkMoveRequest) => Promise<any>;
|
putMoveCiphers: (request: CipherBulkMoveRequest) => Promise<any>;
|
||||||
putShareCipher: (id: string, request: CipherShareRequest) => Promise<any>;
|
putShareCipher: (id: string, request: CipherShareRequest) => Promise<any>;
|
||||||
|
putShareCiphers: (request: CipherBulkShareRequest) => Promise<any>;
|
||||||
putCipherCollections: (id: string, request: CipherCollectionsRequest) => Promise<any>;
|
putCipherCollections: (id: string, request: CipherCollectionsRequest) => Promise<any>;
|
||||||
postCipherAttachment: (id: string, data: FormData) => Promise<CipherResponse>;
|
postCipherAttachment: (id: string, data: FormData) => Promise<CipherResponse>;
|
||||||
deleteCipherAttachment: (id: string, attachmentId: string) => Promise<any>;
|
deleteCipherAttachment: (id: string, attachmentId: string) => Promise<any>;
|
||||||
|
|
|
@ -26,7 +26,8 @@ export abstract class CipherService {
|
||||||
updateLastUsedDate: (id: string) => Promise<void>;
|
updateLastUsedDate: (id: string) => Promise<void>;
|
||||||
saveNeverDomain: (domain: string) => Promise<void>;
|
saveNeverDomain: (domain: string) => Promise<void>;
|
||||||
saveWithServer: (cipher: Cipher) => Promise<any>;
|
saveWithServer: (cipher: Cipher) => Promise<any>;
|
||||||
shareWithServer: (cipher: Cipher) => Promise<any>;
|
shareWithServer: (cipher: CipherView, organizationId: string, collectionIds: string[]) => Promise<any>;
|
||||||
|
shareManyWithServer: (ciphers: CipherView[], organizationId: string, collectionIds: string[]) => Promise<any>;
|
||||||
shareAttachmentWithServer: (attachmentView: AttachmentView, cipherId: string,
|
shareAttachmentWithServer: (attachmentView: AttachmentView, cipherId: string,
|
||||||
organizationId: string) => Promise<any>;
|
organizationId: string) => Promise<any>;
|
||||||
saveAttachmentWithServer: (cipher: Cipher, unencryptedFile: any) => Promise<Cipher>;
|
saveAttachmentWithServer: (cipher: Cipher, unencryptedFile: any) => Promise<Cipher>;
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
import { CipherRequest } from './cipherRequest';
|
||||||
|
|
||||||
|
import { Cipher } from '../domain/cipher';
|
||||||
|
|
||||||
|
export class CipherBulkShareRequest {
|
||||||
|
ciphers: CipherRequest[];
|
||||||
|
collectionIds: string[];
|
||||||
|
|
||||||
|
constructor(ciphers: Cipher[], collectionIds: string[]) {
|
||||||
|
if (ciphers != null) {
|
||||||
|
this.ciphers = [];
|
||||||
|
ciphers.forEach((c) => {
|
||||||
|
this.ciphers.push(new CipherRequest(c));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.collectionIds = collectionIds;
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,6 +8,7 @@ import { EnvironmentUrls } from '../models/domain/environmentUrls';
|
||||||
|
|
||||||
import { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';
|
import { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';
|
||||||
import { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';
|
import { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';
|
||||||
|
import { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';
|
||||||
import { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';
|
import { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';
|
||||||
import { CipherRequest } from '../models/request/cipherRequest';
|
import { CipherRequest } from '../models/request/cipherRequest';
|
||||||
import { CipherShareRequest } from '../models/request/cipherShareRequest';
|
import { CipherShareRequest } from '../models/request/cipherShareRequest';
|
||||||
|
@ -419,6 +420,27 @@ export class ApiService implements ApiServiceAbstraction {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async putShareCiphers(request: CipherBulkShareRequest): Promise<any> {
|
||||||
|
const authHeader = await this.handleTokenState();
|
||||||
|
const response = await fetch(new Request(this.baseUrl + '/ciphers/share', {
|
||||||
|
body: JSON.stringify(request),
|
||||||
|
cache: 'no-cache',
|
||||||
|
credentials: this.getCredentials(),
|
||||||
|
headers: new Headers({
|
||||||
|
'Accept': 'application/json',
|
||||||
|
'Authorization': authHeader,
|
||||||
|
'Content-Type': 'application/json; charset=utf-8',
|
||||||
|
'Device-Type': this.deviceType,
|
||||||
|
}),
|
||||||
|
method: 'PUT',
|
||||||
|
}));
|
||||||
|
|
||||||
|
if (response.status !== 200) {
|
||||||
|
const error = await this.handleError(response, false);
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async putCipherCollections(id: string, request: CipherCollectionsRequest): Promise<any> {
|
async putCipherCollections(id: string, request: CipherCollectionsRequest): Promise<any> {
|
||||||
const authHeader = await this.handleTokenState();
|
const authHeader = await this.handleTokenState();
|
||||||
const response = await fetch(new Request(this.baseUrl + '/ciphers/' + id + '/collections', {
|
const response = await fetch(new Request(this.baseUrl + '/ciphers/' + id + '/collections', {
|
||||||
|
|
|
@ -17,6 +17,7 @@ import { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';
|
||||||
|
|
||||||
import { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';
|
import { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';
|
||||||
import { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';
|
import { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';
|
||||||
|
import { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';
|
||||||
import { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';
|
import { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';
|
||||||
import { CipherRequest } from '../models/request/cipherRequest';
|
import { CipherRequest } from '../models/request/cipherRequest';
|
||||||
import { CipherShareRequest } from '../models/request/cipherShareRequest';
|
import { CipherShareRequest } from '../models/request/cipherShareRequest';
|
||||||
|
@ -358,11 +359,31 @@ export class CipherService implements CipherServiceAbstraction {
|
||||||
await this.upsert(data);
|
await this.upsert(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
async shareWithServer(cipher: Cipher): Promise<any> {
|
async shareWithServer(cipher: CipherView, organizationId: string, collectionIds: string[]): Promise<any> {
|
||||||
const request = new CipherShareRequest(cipher);
|
cipher.organizationId = organizationId;
|
||||||
|
cipher.collectionIds = collectionIds;
|
||||||
|
const encCipher = await this.encrypt(cipher);
|
||||||
|
const request = new CipherShareRequest(encCipher);
|
||||||
await this.apiService.putShareCipher(cipher.id, request);
|
await this.apiService.putShareCipher(cipher.id, request);
|
||||||
const userId = await this.userService.getUserId();
|
const userId = await this.userService.getUserId();
|
||||||
await this.upsert(cipher.toCipherData(userId));
|
await this.upsert(encCipher.toCipherData(userId));
|
||||||
|
}
|
||||||
|
|
||||||
|
async shareManyWithServer(ciphers: CipherView[], organizationId: string, collectionIds: string[]): Promise<any> {
|
||||||
|
const promises: Array<Promise<any>> = [];
|
||||||
|
const encCiphers: Cipher[] = [];
|
||||||
|
for (const cipher of ciphers) {
|
||||||
|
cipher.organizationId = organizationId;
|
||||||
|
cipher.collectionIds = collectionIds;
|
||||||
|
promises.push(this.encrypt(cipher).then((c) => {
|
||||||
|
encCiphers.push(c);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
await Promise.all(promises);
|
||||||
|
const request = new CipherBulkShareRequest(encCiphers, collectionIds);
|
||||||
|
await this.apiService.putShareCiphers(request);
|
||||||
|
const userId = await this.userService.getUserId();
|
||||||
|
await this.upsert(encCiphers.map((c) => c.toCipherData(userId)));
|
||||||
}
|
}
|
||||||
|
|
||||||
async shareAttachmentWithServer(attachmentView: AttachmentView, cipherId: string,
|
async shareAttachmentWithServer(attachmentView: AttachmentView, cipherId: string,
|
||||||
|
|
Loading…
Reference in New Issue