diff --git a/src/abstractions/api.service.ts b/src/abstractions/api.service.ts index 264da1bfa9..abb2f93095 100644 --- a/src/abstractions/api.service.ts +++ b/src/abstractions/api.service.ts @@ -4,6 +4,7 @@ import { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteReque import { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest'; import { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest'; import { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest'; +import { CipherCreateRequest } from '../models/request/cipherCreateRequest'; import { CipherRequest } from '../models/request/cipherRequest'; import { CipherShareRequest } from '../models/request/cipherShareRequest'; import { CollectionRequest } from '../models/request/collectionRequest'; @@ -132,7 +133,8 @@ export abstract class ApiService { getCipherAdmin: (id: string) => Promise; getCiphersOrganization: (organizationId: string) => Promise>; postCipher: (request: CipherRequest) => Promise; - postCipherAdmin: (request: CipherRequest) => Promise; + postCipherCreate: (request: CipherCreateRequest) => Promise; + postCipherAdmin: (request: CipherCreateRequest) => Promise; putCipher: (id: string, request: CipherRequest) => Promise; putCipherAdmin: (id: string, request: CipherRequest) => Promise; deleteCipher: (id: string) => Promise; diff --git a/src/abstractions/cipher.service.ts b/src/abstractions/cipher.service.ts index 71fa641228..1aae907f34 100644 --- a/src/abstractions/cipher.service.ts +++ b/src/abstractions/cipher.service.ts @@ -25,7 +25,7 @@ export abstract class CipherService { getLastUsedForUrl: (url: string) => Promise; updateLastUsedDate: (id: string) => Promise; saveNeverDomain: (domain: string) => Promise; - saveWithServer: (cipher: Cipher) => Promise; + saveWithServer: (cipher: Cipher, collectionIds?: string[]) => Promise; shareWithServer: (cipher: CipherView, organizationId: string, collectionIds: string[]) => Promise; shareManyWithServer: (ciphers: CipherView[], organizationId: string, collectionIds: string[]) => Promise; shareAttachmentWithServer: (attachmentView: AttachmentView, cipherId: string, diff --git a/src/models/request/cipherCreateRequest.ts b/src/models/request/cipherCreateRequest.ts new file mode 100644 index 0000000000..f9f7a8af5b --- /dev/null +++ b/src/models/request/cipherCreateRequest.ts @@ -0,0 +1,13 @@ +import { CipherRequest } from './cipherRequest'; + +import { Cipher } from '../domain/cipher'; + +export class CipherCreateRequest { + cipher: CipherRequest; + collectionIds: string[]; + + constructor(cipher: Cipher, collectionIds: string[]) { + this.cipher = new CipherRequest(cipher); + this.collectionIds = collectionIds; + } +} diff --git a/src/services/api.service.ts b/src/services/api.service.ts index 0206e3d643..8e502c91e0 100644 --- a/src/services/api.service.ts +++ b/src/services/api.service.ts @@ -10,6 +10,7 @@ import { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteReque import { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest'; import { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest'; import { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest'; +import { CipherCreateRequest } from '../models/request/cipherCreateRequest'; import { CipherRequest } from '../models/request/cipherRequest'; import { CipherShareRequest } from '../models/request/cipherShareRequest'; import { CollectionRequest } from '../models/request/collectionRequest'; @@ -337,7 +338,12 @@ export class ApiService implements ApiServiceAbstraction { return new CipherResponse(r); } - async postCipherAdmin(request: CipherRequest): Promise { + async postCipherCreate(request: CipherCreateRequest): Promise { + const r = await this.send('POST', '/ciphers/create', request, true, true); + return new CipherResponse(r); + } + + async postCipherAdmin(request: CipherCreateRequest): Promise { const r = await this.send('POST', '/ciphers/admin', request, true, true); return new CipherResponse(r); } diff --git a/src/services/cipher.service.ts b/src/services/cipher.service.ts index 2ceb801dd2..ee696faa22 100644 --- a/src/services/cipher.service.ts +++ b/src/services/cipher.service.ts @@ -21,6 +21,7 @@ import { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteReque import { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest'; import { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest'; import { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest'; +import { CipherCreateRequest } from '../models/request/cipherCreateRequest'; import { CipherRequest } from '../models/request/cipherRequest'; import { CipherShareRequest } from '../models/request/cipherShareRequest'; @@ -438,14 +439,19 @@ export class CipherService implements CipherServiceAbstraction { await this.storageService.save(Keys.neverDomains, domains); } - async saveWithServer(cipher: Cipher): Promise { - const request = new CipherRequest(cipher); - + async saveWithServer(cipher: Cipher, collectionIds: string[] = null): Promise { let response: CipherResponse; if (cipher.id == null) { - response = await this.apiService.postCipher(request); + if (collectionIds != null) { + const request = new CipherCreateRequest(cipher, collectionIds); + response = await this.apiService.postCipherCreate(request); + } else { + const request = new CipherRequest(cipher); + response = await this.apiService.postCipher(request); + } cipher.id = response.id; } else { + const request = new CipherRequest(cipher); response = await this.apiService.putCipher(cipher.id, request); }