From f35ecf0cd8bd1b91f2544e07bb7b766d227f54ff Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Tue, 17 Jul 2018 17:22:45 -0400 Subject: [PATCH] update key api changes --- src/abstractions/api.service.ts | 2 ++ src/abstractions/cipher.service.ts | 2 +- src/abstractions/folder.service.ts | 3 ++- src/models/request/folderWithIdRequest.ts | 12 ++++++++++++ src/models/request/updateKeyRequest.ts | 10 ++++++++++ src/services/api.service.ts | 5 +++++ src/services/cipher.service.ts | 6 ++++-- src/services/folder.service.ts | 5 +++-- 8 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 src/models/request/folderWithIdRequest.ts create mode 100644 src/models/request/updateKeyRequest.ts diff --git a/src/abstractions/api.service.ts b/src/abstractions/api.service.ts index b3fb8512dc..ffb6ecb279 100644 --- a/src/abstractions/api.service.ts +++ b/src/abstractions/api.service.ts @@ -35,6 +35,7 @@ import { TwoFactorEmailRequest } from '../models/request/twoFactorEmailRequest'; import { TwoFactorProviderRequest } from '../models/request/twoFactorProviderRequest'; import { TwoFactorRecoveryRequest } from '../models/request/twoFactorRecoveryRequest'; import { UpdateDomainsRequest } from '../models/request/updateDomainsRequest'; +import { UpdateKeyRequest } from '../models/request/updateKeyRequest'; import { UpdateProfileRequest } from '../models/request/updateProfileRequest'; import { UpdateTwoFactorAuthenticatorRequest } from '../models/request/updateTwoFactorAuthenticatorRequest'; import { UpdateTwoFactorDuoRequest } from '../models/request/updateTwoFactorDuoRequest'; @@ -106,6 +107,7 @@ export abstract class ApiService { postAccountStorage: (request: StorageRequest) => Promise; postAccountPayment: (request: PaymentRequest) => Promise; postAccountLicense: (data: FormData) => Promise; + postAccountKey: (request: UpdateKeyRequest) => Promise; postAccountKeys: (request: KeysRequest) => Promise; postAccountVerifyEmail: () => Promise; postAccountVerifyEmailToken: (request: VerifyEmailRequest) => Promise; diff --git a/src/abstractions/cipher.service.ts b/src/abstractions/cipher.service.ts index 39176d1204..1046077659 100644 --- a/src/abstractions/cipher.service.ts +++ b/src/abstractions/cipher.service.ts @@ -14,7 +14,7 @@ export abstract class CipherService { decryptedCipherCache: CipherView[]; clearCache: () => void; - encrypt: (model: CipherView) => Promise; + encrypt: (model: CipherView, key?: SymmetricCryptoKey) => Promise; encryptFields: (fieldsModel: FieldView[], key: SymmetricCryptoKey) => Promise; encryptField: (fieldModel: FieldView, key: SymmetricCryptoKey) => Promise; get: (id: string) => Promise; diff --git a/src/abstractions/folder.service.ts b/src/abstractions/folder.service.ts index 381bc01317..1fec203798 100644 --- a/src/abstractions/folder.service.ts +++ b/src/abstractions/folder.service.ts @@ -1,6 +1,7 @@ import { FolderData } from '../models/data/folderData'; import { Folder } from '../models/domain/folder'; +import { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey'; import { FolderView } from '../models/view/folderView'; @@ -8,7 +9,7 @@ export abstract class FolderService { decryptedFolderCache: FolderView[]; clearCache: () => void; - encrypt: (model: FolderView) => Promise; + encrypt: (model: FolderView, key?: SymmetricCryptoKey) => Promise; get: (id: string) => Promise; getAll: () => Promise; getAllDecrypted: () => Promise; diff --git a/src/models/request/folderWithIdRequest.ts b/src/models/request/folderWithIdRequest.ts new file mode 100644 index 0000000000..a97ad6d813 --- /dev/null +++ b/src/models/request/folderWithIdRequest.ts @@ -0,0 +1,12 @@ +import { FolderRequest } from './folderRequest'; + +import { Folder } from '../domain/folder'; + +export class FolderWithIdRequest extends FolderRequest { + id: string; + + constructor(folder: Folder) { + super(folder); + this.id = folder.id; + } +} diff --git a/src/models/request/updateKeyRequest.ts b/src/models/request/updateKeyRequest.ts new file mode 100644 index 0000000000..0464e5ce53 --- /dev/null +++ b/src/models/request/updateKeyRequest.ts @@ -0,0 +1,10 @@ +import { CipherWithIdRequest } from './cipherWithIdRequest'; +import { FolderWithIdRequest } from './folderWithIdRequest'; + +export class UpdateKeyRequest { + ciphers: CipherWithIdRequest[] = []; + folders: FolderWithIdRequest[] = []; + masterPasswordHash: string; + privateKey: string; + key: string; +} diff --git a/src/services/api.service.ts b/src/services/api.service.ts index 12e40e0df5..f035ad0aec 100644 --- a/src/services/api.service.ts +++ b/src/services/api.service.ts @@ -41,6 +41,7 @@ import { TwoFactorEmailRequest } from '../models/request/twoFactorEmailRequest'; import { TwoFactorProviderRequest } from '../models/request/twoFactorProviderRequest'; import { TwoFactorRecoveryRequest } from '../models/request/twoFactorRecoveryRequest'; import { UpdateDomainsRequest } from '../models/request/updateDomainsRequest'; +import { UpdateKeyRequest } from '../models/request/updateKeyRequest'; import { UpdateProfileRequest } from '../models/request/updateProfileRequest'; import { UpdateTwoFactorAuthenticatorRequest } from '../models/request/updateTwoFactorAuthenticatorRequest'; import { UpdateTwoFactorDuoRequest } from '../models/request/updateTwoFactorDuoRequest'; @@ -256,6 +257,10 @@ export class ApiService implements ApiServiceAbstraction { return this.send('POST', '/accounts/keys', request, true, false); } + postAccountKey(request: UpdateKeyRequest): Promise { + return this.send('POST', '/accounts/key', request, true, false); + } + postAccountVerifyEmail(): Promise { return this.send('POST', '/accounts/verify-email', null, true, false); } diff --git a/src/services/cipher.service.ts b/src/services/cipher.service.ts index 54cc1517b8..b7b82eece9 100644 --- a/src/services/cipher.service.ts +++ b/src/services/cipher.service.ts @@ -60,7 +60,7 @@ export class CipherService implements CipherServiceAbstraction { this.decryptedCipherCache = null; } - async encrypt(model: CipherView): Promise { + async encrypt(model: CipherView, key?: SymmetricCryptoKey): Promise { const cipher = new Cipher(); cipher.id = model.id; cipher.folderId = model.folderId; @@ -69,7 +69,9 @@ export class CipherService implements CipherServiceAbstraction { cipher.type = model.type; cipher.collectionIds = model.collectionIds; - const key = await this.cryptoService.getOrgKey(cipher.organizationId); + if (key == null && cipher.organizationId != null) { + key = await this.cryptoService.getOrgKey(cipher.organizationId); + } await Promise.all([ this.encryptObjProperty(model, cipher, { name: null, diff --git a/src/services/folder.service.ts b/src/services/folder.service.ts index 955cc2387a..c03cb0c298 100644 --- a/src/services/folder.service.ts +++ b/src/services/folder.service.ts @@ -1,6 +1,7 @@ import { FolderData } from '../models/data/folderData'; import { Folder } from '../models/domain/folder'; +import { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey'; import { FolderRequest } from '../models/request/folderRequest'; @@ -35,10 +36,10 @@ export class FolderService implements FolderServiceAbstraction { this.decryptedFolderCache = null; } - async encrypt(model: FolderView): Promise { + async encrypt(model: FolderView, key?: SymmetricCryptoKey): Promise { const folder = new Folder(); folder.id = model.id; - folder.name = await this.cryptoService.encrypt(model.name); + folder.name = await this.cryptoService.encrypt(model.name, key); return folder; }