0016 - Move Decryption and Encryption to Views
最后更新于
class FolderDomain implements DecryptableDomain {
id: string;
name: EncString;
revisionDate: Date;
keyIdentifier(): string | null {
return null;
}
}
class FolderView implements Encryptable<Folder> {
id: string = null;
name: string = null;
revisionDate: Date = null;
keyIdentifier(): string | null {
return null;
}
async encrypt(encryptService: EncryptService, key: SymmetricCryptoKey): Promise<Folder> {
const folder = new Folder();
folder.id = this.id;
folder.revisionDate = this.revisionDate;
folder.name = this.name != null ? await encryptService.encrypt(this.name, key) : null;
return folder;
}
static async decrypt(encryptService: EncryptService, key: SymmetricCryptoKey, model: Folder) {
const view = new FolderView();
view.id = model.id;
view.revisionDate = model.revisionDate;
view.name = await model.name?.decryptWithEncryptService(encryptService, key);
return view;
}
}// Fetch from server
const response: FolderResponse = await this.folderApiService.getFolder(id);
const folderData: FolderData = new FolderData(response);
const folder: Folder = new Folder(folderData);
// Decrypt / Encrypt
const folderView: FolderView = this.encryptionService.decryptView(FolderView, folder, key);
folderView.name = "New folder name";
const encryptedFolder: Folder = this.encryptionService.encryptView(folderView, key);
// Update
const request: FolderRequest = new FolderUpdateRequest(encryptedFolder);