defining more abstractions
This commit is contained in:
parent
e5c1adedff
commit
11755e409a
|
@ -3,31 +3,31 @@ import { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';
|
|||
|
||||
import { ProfileOrganizationResponse } from '../models/response/profileOrganizationResponse';
|
||||
|
||||
export interface CryptoService {
|
||||
setKey(key: SymmetricCryptoKey): Promise<any>;
|
||||
setKeyHash(keyHash: string): Promise<{}>;
|
||||
setEncKey(encKey: string): Promise<{}>;
|
||||
setEncPrivateKey(encPrivateKey: string): Promise<{}>;
|
||||
setOrgKeys(orgs: ProfileOrganizationResponse[]): Promise<{}>;
|
||||
getKey(): Promise<SymmetricCryptoKey>;
|
||||
getKeyHash(): Promise<string>;
|
||||
getEncKey(): Promise<SymmetricCryptoKey>;
|
||||
getPrivateKey(): Promise<ArrayBuffer>;
|
||||
getOrgKeys(): Promise<Map<string, SymmetricCryptoKey>>;
|
||||
getOrgKey(orgId: string): Promise<SymmetricCryptoKey>;
|
||||
clearKey(): Promise<any>;
|
||||
clearKeyHash(): Promise<any>;
|
||||
clearEncKey(memoryOnly?: boolean): Promise<any>;
|
||||
clearPrivateKey(memoryOnly?: boolean): Promise<any>;
|
||||
clearOrgKeys(memoryOnly?: boolean): Promise<any>;
|
||||
clearKeys(): Promise<any>;
|
||||
toggleKey(): Promise<any>;
|
||||
makeKey(password: string, salt: string): SymmetricCryptoKey;
|
||||
hashPassword(password: string, key: SymmetricCryptoKey): Promise<string>;
|
||||
makeEncKey(key: SymmetricCryptoKey): Promise<CipherString>;
|
||||
encrypt(plainValue: string | Uint8Array, key?: SymmetricCryptoKey, plainValueEncoding?: string): Promise<CipherString>;
|
||||
encryptToBytes(plainValue: ArrayBuffer, key?: SymmetricCryptoKey): Promise<ArrayBuffer>;
|
||||
decrypt(cipherString: CipherString, key?: SymmetricCryptoKey, outputEncoding?: string): Promise<string>;
|
||||
decryptFromBytes(encBuf: ArrayBuffer, key: SymmetricCryptoKey): Promise<ArrayBuffer>;
|
||||
rsaDecrypt(encValue: string): Promise<string>;
|
||||
export abstract class CryptoService {
|
||||
setKey: (key: SymmetricCryptoKey) => Promise<any>;
|
||||
setKeyHash: (keyHash: string) => Promise<{}>;
|
||||
setEncKey: (encKey: string) => Promise<{}>;
|
||||
setEncPrivateKey: (encPrivateKey: string) => Promise<{}>;
|
||||
setOrgKeys: (orgs: ProfileOrganizationResponse[]) => Promise<{}>;
|
||||
getKey: () => Promise<SymmetricCryptoKey>;
|
||||
getKeyHash: () => Promise<string>;
|
||||
getEncKey: () => Promise<SymmetricCryptoKey>;
|
||||
getPrivateKey: () => Promise<ArrayBuffer>;
|
||||
getOrgKeys: () => Promise<Map<string, SymmetricCryptoKey>>;
|
||||
getOrgKey: (orgId: string) => Promise<SymmetricCryptoKey>;
|
||||
clearKey: () => Promise<any>;
|
||||
clearKeyHash: () => Promise<any>;
|
||||
clearEncKey: (memoryOnly?: boolean) => Promise<any>;
|
||||
clearPrivateKey: (memoryOnly?: boolean) => Promise<any>;
|
||||
clearOrgKeys: (memoryOnly?: boolean) => Promise<any>;
|
||||
clearKeys: () => Promise<any>;
|
||||
toggleKey: () => Promise<any>;
|
||||
makeKey: (password: string, salt: string) => SymmetricCryptoKey;
|
||||
hashPassword: (password: string, key: SymmetricCryptoKey) => Promise<string>;
|
||||
makeEncKey: (key: SymmetricCryptoKey) => Promise<CipherString>;
|
||||
encrypt: (plainValue: string | Uint8Array, key?: SymmetricCryptoKey, plainValueEncoding?: string) => Promise<CipherString>;
|
||||
encryptToBytes: (plainValue: ArrayBuffer, key?: SymmetricCryptoKey) => Promise<ArrayBuffer>;
|
||||
decrypt: (cipherString: CipherString, key?: SymmetricCryptoKey, outputEncoding?: string) => Promise<string>;
|
||||
decryptFromBytes: (encBuf: ArrayBuffer, key: SymmetricCryptoKey) => Promise<ArrayBuffer>;
|
||||
rsaDecrypt: (encValue: string) => Promise<string>;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
export abstract class I18nService {
|
||||
t: (id: string) => string;
|
||||
translate: (id: string) => string;
|
||||
}
|
|
@ -6,6 +6,7 @@ export { CollectionService } from './collection.service';
|
|||
export { CryptoService } from './crypto.service';
|
||||
export { EnvironmentService } from './environment.service';
|
||||
export { FolderService } from './folder.service';
|
||||
export { I18nService } from './i18n.service';
|
||||
export { LockService } from './lock.service';
|
||||
export { MessagingService } from './messaging.service';
|
||||
export { PasswordGenerationService } from './passwordGeneration.service';
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
import { DeviceType } from '../enums/deviceType';
|
||||
|
||||
export interface PlatformUtilsService {
|
||||
getDevice(): DeviceType;
|
||||
getDeviceString(): string;
|
||||
isFirefox(): boolean;
|
||||
isChrome(): boolean;
|
||||
isEdge(): boolean;
|
||||
isOpera(): boolean;
|
||||
isVivaldi(): boolean;
|
||||
isSafari(): boolean;
|
||||
analyticsId(): string;
|
||||
getDomain(uriString: string): string;
|
||||
isViewOpen(): boolean;
|
||||
export abstract class PlatformUtilsService {
|
||||
getDevice: () => DeviceType;
|
||||
getDeviceString: () => string;
|
||||
isFirefox: () => boolean;
|
||||
isChrome: () => boolean;
|
||||
isEdge: () => boolean;
|
||||
isOpera: () => boolean;
|
||||
isVivaldi: () => boolean;
|
||||
isSafari: () => boolean;
|
||||
analyticsId: () => string;
|
||||
getDomain: (uriString: string) => string;
|
||||
isViewOpen: () => boolean;
|
||||
launchUri: (uri: string) => void;
|
||||
saveFile: (win: Window, blobData: any, blobOptions: any, fileName: string) => void;
|
||||
alertError: (title: string, message: string) => void;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
export interface UtilsService {
|
||||
copyToClipboard(text: string, doc?: Document): void;
|
||||
getHostname(uriString: string): string;
|
||||
export abstract class UtilsService {
|
||||
copyToClipboard: (text: string, doc?: Document) => void;
|
||||
getHostname: (uriString: string) => string;
|
||||
}
|
||||
|
|
|
@ -48,4 +48,18 @@ export class CardView implements View {
|
|||
}
|
||||
return this._subTitle;
|
||||
}
|
||||
|
||||
get expiration(): string {
|
||||
if (!this.expMonth && !this.expYear) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let exp = this.expMonth != null ? ('0' + this.expMonth).slice(-2) : '__';
|
||||
exp += (' / ' + (this.expYear != null ? this.formatYear(this.expYear) : '____'));
|
||||
return exp;
|
||||
}
|
||||
|
||||
private formatYear(year: string): string {
|
||||
return year.length === 2 ? '20' + year : year;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,10 +6,33 @@ import { Field } from '../domain/field';
|
|||
|
||||
export class FieldView implements View {
|
||||
name: string;
|
||||
vault: string;
|
||||
type: FieldType;
|
||||
|
||||
// tslint:disable
|
||||
private _value: string;
|
||||
private _maskedValue: string;
|
||||
// tslint:enable
|
||||
|
||||
constructor(f: Field) {
|
||||
this.type = f.type;
|
||||
}
|
||||
|
||||
get value(): string {
|
||||
return this._value;
|
||||
}
|
||||
set value(value: string) {
|
||||
this._value = value;
|
||||
this._maskedValue = null;
|
||||
}
|
||||
|
||||
get maskedValue(): string {
|
||||
if (this._maskedValue == null && this.value != null) {
|
||||
this._maskedValue = '';
|
||||
for (let i = 0; i < this.value.length; i++) {
|
||||
this._maskedValue += '•';
|
||||
}
|
||||
}
|
||||
|
||||
return this._maskedValue;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,4 +62,25 @@ export class IdentityView implements View {
|
|||
|
||||
return this._subTitle;
|
||||
}
|
||||
|
||||
get fullName(): string {
|
||||
if (this.title != null || this.firstName != null || this.middleName != null || this.lastName != null) {
|
||||
let name = '';
|
||||
if (this.title != null) {
|
||||
name += (this.title + ' ');
|
||||
}
|
||||
if (this.firstName != null) {
|
||||
name += (this.firstName + ' ');
|
||||
}
|
||||
if (this.middleName != null) {
|
||||
name += (this.middleName + ' ');
|
||||
}
|
||||
if (this.lastName != null) {
|
||||
name += this.lastName;
|
||||
}
|
||||
return name.trim();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ import { EncryptedObject } from '../models/domain/encryptedObject';
|
|||
import { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';
|
||||
import { ProfileOrganizationResponse } from '../models/response/profileOrganizationResponse';
|
||||
|
||||
import { CryptoService as CryptoServiceInterface } from '../abstractions/crypto.service';
|
||||
import { CryptoService as CryptoServiceAbstraction } from '../abstractions/crypto.service';
|
||||
import { StorageService as StorageServiceInterface } from '../abstractions/storage.service';
|
||||
|
||||
import { ConstantsService } from './constants.service';
|
||||
|
@ -33,7 +33,7 @@ const AesAlgorithm = {
|
|||
const Crypto = window.crypto;
|
||||
const Subtle = Crypto.subtle;
|
||||
|
||||
export class CryptoService implements CryptoServiceInterface {
|
||||
export class CryptoService implements CryptoServiceAbstraction {
|
||||
private key: SymmetricCryptoKey;
|
||||
private encKey: SymmetricCryptoKey;
|
||||
private legacyEtmKey: SymmetricCryptoKey;
|
||||
|
|
Loading…
Reference in New Issue