mirror of
https://github.com/bitwarden/jslib
synced 2025-12-22 03:03:15 +00:00
[refactor] Expand StateService into a full coverage storage proxy
* Expand StateService to allow it to manage all data points of the application state regardless of memory. * Expand StateService to allow for storing and managing multiple accounts
This commit is contained in:
@@ -1,6 +1,241 @@
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
|
||||
import { KdfType } from '../enums/kdfType';
|
||||
import { UriMatchType } from '../enums/uriMatchType';
|
||||
|
||||
import { CipherData } from '../models/data/cipherData';
|
||||
import { CollectionData } from '../models/data/collectionData';
|
||||
import { EventData } from '../models/data/eventData';
|
||||
import { FolderData } from '../models/data/folderData';
|
||||
import { OrganizationData } from '../models/data/organizationData';
|
||||
import { PolicyData } from '../models/data/policyData';
|
||||
import { ProviderData } from '../models/data/providerData';
|
||||
import { SendData } from '../models/data/sendData';
|
||||
|
||||
import { Account } from '../models/domain/account';
|
||||
import { EncString } from '../models/domain/encString';
|
||||
import { GeneratedPasswordHistory } from '../models/domain/generatedPasswordHistory';
|
||||
import { Policy } from '../models/domain/policy';
|
||||
import { StorageOptions } from '../models/domain/storageOptions';
|
||||
import { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';
|
||||
|
||||
import { CipherView } from '../models/view/cipherView';
|
||||
import { CollectionView } from '../models/view/collectionView';
|
||||
import { FolderView } from '../models/view/folderView';
|
||||
import { SendView } from '../models/view/sendView';
|
||||
|
||||
export abstract class StateService {
|
||||
get: <T>(key: string) => Promise<T>;
|
||||
save: (key: string, obj: any) => Promise<any>;
|
||||
remove: (key: string) => Promise<any>;
|
||||
purge: () => Promise<any>;
|
||||
accounts: BehaviorSubject<{ [userId: string]: Account }>;
|
||||
|
||||
setActiveUser: (userId: string) => Promise<void>;
|
||||
addAccount: (account: Account) => Promise<void>;
|
||||
purge: (options?: StorageOptions) => Promise<void>;
|
||||
|
||||
getAccessToken: (options?: StorageOptions) => Promise<string>;
|
||||
getAddEditCipherInfo: (options?: StorageOptions) => Promise<any>;
|
||||
getAlwaysShowDock: (options?: StorageOptions) => Promise<boolean>;
|
||||
getApiKeyClientId: (options?: StorageOptions) => Promise<string>;
|
||||
getApiKeyClientSecret: (options?: StorageOptions) => Promise<string>;
|
||||
getAutoFillOnPageLoadDefault: (options?: StorageOptions) => Promise<boolean>;
|
||||
getBiometricAwaitingAcceptance: (options?: StorageOptions) => Promise<boolean>;
|
||||
getBiometricFingerprintValidated: (options?: StorageOptions) => Promise<boolean>;
|
||||
getBiometricLocked: (options?: StorageOptions) => Promise<boolean>;
|
||||
getBiometricText: (options?: StorageOptions) => Promise<string>;
|
||||
getBiometricUnlock: (options?: StorageOptions) => Promise<boolean>;
|
||||
getCanAccessPremium: (options?: StorageOptions) => Promise<boolean>;
|
||||
getClearClipboard: (options?: StorageOptions) => Promise<number>;
|
||||
getCollapsedGroupings: (options?: StorageOptions) => Promise<Set<string>>;
|
||||
getCryptoMasterKey: (options?: StorageOptions) => Promise<SymmetricCryptoKey>;
|
||||
getCryptoMasterKeyB64: (options: StorageOptions) => Promise<string>;
|
||||
getDecodedToken: (options?: StorageOptions) => Promise<any>;
|
||||
getDecryptedCiphers: (options?: StorageOptions) => Promise<CipherView[]>;
|
||||
getDecryptedCollections: (options?: StorageOptions) => Promise<CollectionView[]>;
|
||||
getDecryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise<SymmetricCryptoKey>;
|
||||
getDecryptedFolders: (options?: StorageOptions) => Promise<FolderView[]>;
|
||||
getDecryptedOrganizationKeys: (options?: StorageOptions) => Promise<Map<string, SymmetricCryptoKey>>;
|
||||
getDecryptedPasswordGenerationHistory: (options?: StorageOptions) => Promise<GeneratedPasswordHistory[]>;
|
||||
getDecryptedPinProtected: (options?: StorageOptions) => Promise<EncString>;
|
||||
getDecryptedPolicies: (options?: StorageOptions) => Promise<Policy[]>;
|
||||
getDecryptedPrivateKey: (options?: StorageOptions) => Promise<ArrayBuffer>;
|
||||
getDecryptedProviderKeys: (options?: StorageOptions) => Promise<Map<string, SymmetricCryptoKey>>;
|
||||
getDecryptedSends: (options?: StorageOptions) => Promise<SendView[]>;
|
||||
getDefaultUriMatch: (options?: StorageOptions) => Promise<UriMatchType>;
|
||||
getDisableAddLoginNotification: (options?: StorageOptions) => Promise<boolean>;
|
||||
getDisableAutoBiometricsPrompt: (options?: StorageOptions) => Promise<boolean>;
|
||||
getDisableAutoTotpCopy: (options?: StorageOptions) => Promise<boolean>;
|
||||
getDisableBadgeCounter: (options?: StorageOptions) => Promise<boolean>;
|
||||
getDisableChangedPasswordNotification: (options?: StorageOptions) => Promise<boolean>;
|
||||
getDisableContextMenuItem: (options?: StorageOptions) => Promise<boolean>;
|
||||
getDisableFavicon: (options?: StorageOptions) => Promise<boolean>;
|
||||
getDisableGa: (options?: StorageOptions) => Promise<boolean>;
|
||||
getDontShowCardsCurrentTab: (options?: StorageOptions) => Promise<boolean>;
|
||||
getDontShowIdentitiesCurrentTab: (options?: StorageOptions) => Promise<boolean>;
|
||||
getEmail: (options?: StorageOptions) => Promise<string>;
|
||||
getEmailVerified: (options?: StorageOptions) => Promise<boolean>;
|
||||
getEnableAlwaysOnTop: (options?: StorageOptions) => Promise<boolean>;
|
||||
getEnableAutoFillOnPageLoad: (options?: StorageOptions) => Promise<boolean>;
|
||||
getEnableBiometric: (options?: StorageOptions) => Promise<boolean>;
|
||||
getEnableBrowserIntegration: (options?: StorageOptions) => Promise<boolean>;
|
||||
getEnableBrowserIntegrationFingerprint: (options?: StorageOptions) => Promise<boolean>;
|
||||
getEnableCloseToTray: (options?: StorageOptions) => Promise<boolean>;
|
||||
getEnableGravitars: (options?: StorageOptions) => Promise<boolean>;
|
||||
getEnableMinimizeToTray: (options?: StorageOptions) => Promise<boolean>;
|
||||
getEnableStartToTray: (options?: StorageOptions) => Promise<boolean>;
|
||||
getEnableTray: (options?: StorageOptions) => Promise<boolean>;
|
||||
getEncryptedCiphers: (options?: StorageOptions) => Promise<{ [id: string]: CipherData }>;
|
||||
getEncryptedCollections: (options?: StorageOptions) => Promise<{ [id: string]: CollectionData }>;
|
||||
getEncryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise<string>;
|
||||
getEncryptedFolders: (options?: StorageOptions) => Promise<{ [id: string]: FolderData }>;
|
||||
getEncryptedOrganizationKeys: (options?: StorageOptions) => Promise<any>;
|
||||
getEncryptedPasswordGenerationHistory: (options?: StorageOptions) => Promise<GeneratedPasswordHistory[]>;
|
||||
getEncryptedPinProtected: (options?: StorageOptions) => Promise<string>;
|
||||
getEncryptedPolicies: (options?: StorageOptions) => Promise<{ [id: string]: PolicyData }>;
|
||||
getEncryptedPrivateKey: (options?: StorageOptions) => Promise<string>;
|
||||
getEncryptedProviderKeys: (options?: StorageOptions) => Promise<any>;
|
||||
getEncryptedSends: (options?: StorageOptions) => Promise<{ [id: string]: SendData }>;
|
||||
getEntityId: (options?: StorageOptions) => Promise<string>;
|
||||
getEntityType: (options?: StorageOptions) => Promise<any>;
|
||||
getEnvironmentUrls: (options?: StorageOptions) => Promise<any>;
|
||||
getEquivalentDomains: (options?: StorageOptions) => Promise<any>;
|
||||
getEventCollection: (options?: StorageOptions) => Promise<EventData[]>;
|
||||
getEverBeenUnlocked: (options?: StorageOptions) => Promise<boolean>;
|
||||
getForcePasswordReset: (options?: StorageOptions) => Promise<boolean>;
|
||||
getInstalledVersion: (options?: StorageOptions) => Promise<string>;
|
||||
getIsAuthenticated: (options?: StorageOptions) => Promise<boolean>;
|
||||
getKdfIterations: (options?: StorageOptions) => Promise<number>;
|
||||
getKdfType: (options?: StorageOptions) => Promise<KdfType>;
|
||||
getKeyHash: (options?: StorageOptions) => Promise<string>;
|
||||
getLastActive: (options?: StorageOptions) => Promise<number>;
|
||||
getLastSync: (options?: StorageOptions) => Promise<string>;
|
||||
getLegacyEtmKey: (options?: StorageOptions) => Promise<SymmetricCryptoKey>;
|
||||
getLocalData: (options?: StorageOptions) => Promise<any>;
|
||||
getLocale: (options?: StorageOptions) => Promise<string>;
|
||||
getMainWindowSize: (options?: StorageOptions) => Promise<number>;
|
||||
getMinimizeOnCopyToClipboard: (options?: StorageOptions) => Promise<boolean>;
|
||||
getNeverDomains: (options?: StorageOptions) => Promise<{ [id: string]: any }>;
|
||||
getNoAutoPromptBiometrics: (options?: StorageOptions) => Promise<boolean>;
|
||||
getNoAutoPromptBiometricsText: (options?: StorageOptions) => Promise<string>;
|
||||
getOpenAtLogin: (options?: StorageOptions) => Promise<boolean>;
|
||||
getOrganizationInvitation: (options?: StorageOptions) => Promise<any>;
|
||||
getOrganizations: (options?: StorageOptions) => Promise<{ [id: string]: OrganizationData }>;
|
||||
getPasswordGenerationOptions: (options?: StorageOptions) => Promise<any>;
|
||||
getProtectedPin: (options?: StorageOptions) => Promise<string>;
|
||||
getProviders: (options?: StorageOptions) => Promise<{ [id: string]: ProviderData }>;
|
||||
getPublicKey: (options?: StorageOptions) => Promise<ArrayBuffer>;
|
||||
getRefreshToken: (options?: StorageOptions) => Promise<string>;
|
||||
getRememberEmail: (options?: StorageOptions) => Promise<boolean>;
|
||||
getRememberedEmail: (options?: StorageOptions) => Promise<string>;
|
||||
getSecurityStamp: (options?: StorageOptions) => Promise<string>;
|
||||
getSettings: (options?: StorageOptions) => Promise<any>;
|
||||
getSsoCodeVerifier: (options?: StorageOptions) => Promise<string>;
|
||||
getSsoOrgIdentifier: (options?: StorageOptions) => Promise<string>;
|
||||
getSsoState: (options?: StorageOptions) => Promise<string>;
|
||||
getTheme: (options?: StorageOptions) => Promise<string>;
|
||||
getTwoFactorToken: (options?: StorageOptions) => Promise<string>;
|
||||
getUserId: (options?: StorageOptions) => Promise<string>;
|
||||
getVaultTimeout: (options?: StorageOptions) => Promise<number>;
|
||||
getVaultTimeoutAction: (options?: StorageOptions) => Promise<string>;
|
||||
getWindow: () => Promise<Map<string, any>>;
|
||||
setAccessToken: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setAddEditCipherInfo: (value: any, options?: StorageOptions) => Promise<void>;
|
||||
setAlwaysShowDock: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setApiKeyClientId: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setApiKeyClientSecret: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setAutoFillOnPageLoadDefault: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setBiometricAwaitingAcceptance: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setBiometricFingerprintValidated: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setBiometricLocked: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setBiometricText: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setBiometricUnlock: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setClearClipboard: (value: number, options?: StorageOptions) => Promise<void>;
|
||||
setCollapsedGroupings: (value: Set<string>, options?: StorageOptions) => Promise<void>;
|
||||
setCryptoMasterKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise<void>;
|
||||
setCryptoMasterKeyB64: (value: string, options: StorageOptions) => Promise<void>;
|
||||
setDecodedToken: (value: any, options?: StorageOptions) => Promise<void>;
|
||||
setDecryptedCiphers: (value: CipherView[], options?: StorageOptions) => Promise<void>;
|
||||
setDecryptedCollections: (value: CollectionView[], options?: StorageOptions) => Promise<void>;
|
||||
setDecryptedCryptoSymmetricKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise<void>;
|
||||
setDecryptedFolders: (value: FolderView[], options?: StorageOptions) => Promise<void>;
|
||||
setDecryptedOrganizationKeys: (value: Map<string, SymmetricCryptoKey>, options?: StorageOptions) => Promise<void>;
|
||||
setDecryptedPasswordGenerationHistory: (value: GeneratedPasswordHistory[], options?: StorageOptions) => Promise<void>;
|
||||
setDecryptedPinProtected: (value: EncString, options?: StorageOptions) => Promise<void>;
|
||||
setDecryptedPolicies: (value: Policy[], options?: StorageOptions) => Promise<void>;
|
||||
setDecryptedPrivateKey: (value: ArrayBuffer, options?: StorageOptions) => Promise<void>;
|
||||
setDecryptedProviderKeys: (value: Map<string, SymmetricCryptoKey>, options?: StorageOptions) => Promise<void>;
|
||||
setDecryptedSends: (value: SendView[], options?: StorageOptions) => Promise<void>;
|
||||
setDefaultUriMatch: (value: UriMatchType, options?: StorageOptions) => Promise<void>;
|
||||
setDisableAddLoginNotification: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setDisableAutoBiometricsPrompt: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setDisableAutoTotpCopy: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setDisableBadgeCounter: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setDisableChangedPasswordNotification: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setDisableContextMenuItem: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setDisableFavicon: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setDisableGa: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setDontShowCardsCurrentTab: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setDontShowIdentitiesCurrentTab: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setEmail: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setEmailVerified: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setEnableAlwaysOnTop: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setEnableAutoFillOnPageLoad: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setEnableBiometric: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setEnableBrowserIntegration: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setEnableBrowserIntegrationFingerprint: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setEnableCloseToTray: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setEnableGravitars: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setEnableMinimizeToTray: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setEnableStartToTray: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setEnableTray: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setEncryptedCiphers: (value: { [id: string]: CipherData }, options?: StorageOptions) => Promise<void>;
|
||||
setEncryptedCollections: (value: { [id: string]: CollectionData }, options?: StorageOptions) => Promise<void>;
|
||||
setEncryptedCryptoSymmetricKey: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setEncryptedFolders: (value: { [id: string]: FolderData }, options?: StorageOptions) => Promise<void>;
|
||||
setEncryptedOrganizationKeys: (value: Map<string, SymmetricCryptoKey>, options?: StorageOptions) => Promise<void>;
|
||||
setEncryptedPasswordGenerationHistory: (value: GeneratedPasswordHistory[], options?: StorageOptions) => Promise<void>;
|
||||
setEncryptedPinProtected: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setEncryptedPolicies: (value: { [id: string]: PolicyData }, options?: StorageOptions) => Promise<void>;
|
||||
setEncryptedPrivateKey: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setEncryptedProviderKeys: (value: any, options?: StorageOptions) => Promise<void>;
|
||||
setEncryptedSends: (value: { [id: string]: SendData }, options?: StorageOptions) => Promise<void>;
|
||||
setEntityId: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setEntityType: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setEnvironmentUrls: (value: any, options?: StorageOptions) => Promise<void>;
|
||||
setEquivalentDomains: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setEventCollection: (value: EventData[], options?: StorageOptions) => Promise<void>;
|
||||
setEverBeenUnlocked: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setForcePasswordReset: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setInstalledVersion: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setKdfIterations: (value: number, options?: StorageOptions) => Promise<void>;
|
||||
setKdfType: (value: KdfType, options?: StorageOptions) => Promise<void>;
|
||||
setKeyHash: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setLastActive: (value: number, options?: StorageOptions) => Promise<void>;
|
||||
setLastSync: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setLegacyEtmKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise<void>;
|
||||
setLocalData: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setLocale: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setMainWindowSize: (value: number, options?: StorageOptions) => Promise<void>;
|
||||
setMinimizeOnCopyToClipboard: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setNeverDomains: (value: { [id: string]: any }, options?: StorageOptions) => Promise<void>;
|
||||
setNoAutoPromptBiometrics: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setNoAutoPromptBiometricsText: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setOpenAtLogin: (value: boolean, options?: StorageOptions) => Promise<void>;
|
||||
setOrganizationInvitation: (value: any, options?: StorageOptions) => Promise<void>;
|
||||
setOrganizations: (value: { [id: string]: OrganizationData }, options?: StorageOptions) => Promise<void>;
|
||||
setPasswordGenerationOptions: (value: any, options?: StorageOptions) => Promise<void>;
|
||||
setProtectedPin: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setProviders: (value: { [id: string]: ProviderData }, options?: StorageOptions) => Promise<void>;
|
||||
setPublicKey: (value: ArrayBuffer, options?: StorageOptions) => Promise<void>;
|
||||
setRefreshToken: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setRememberedEmail: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setSecurityStamp: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setSettings: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setSsoCodeVerifier: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setSsoOrganizationIdentifier: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setSsoState: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setTheme: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setTwoFactorToken: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setVaultTimeout: (value: number, options?: StorageOptions) => Promise<void>;
|
||||
setVaultTimeoutAction: (value: string, options?: StorageOptions) => Promise<void>;
|
||||
setWindow: (value: Map<string, any>) => Promise<void>;
|
||||
}
|
||||
|
||||
|
||||
192
common/src/models/domain/account.ts
Normal file
192
common/src/models/domain/account.ts
Normal file
@@ -0,0 +1,192 @@
|
||||
import { OrganizationData } from '../data/organizationData';
|
||||
|
||||
import { KdfType } from '../../enums/kdfType';
|
||||
import { UriMatchType } from '../../enums/uriMatchType';
|
||||
|
||||
import { CipherView } from '../view/cipherView';
|
||||
import { CollectionView } from '../view/collectionView';
|
||||
import { FolderView } from '../view/folderView';
|
||||
import { SendView } from '../view/sendView';
|
||||
|
||||
import { EncString } from './encString';
|
||||
import { GeneratedPasswordHistory } from './generatedPasswordHistory';
|
||||
import { Policy } from './policy';
|
||||
import { SymmetricCryptoKey } from './symmetricCryptoKey';
|
||||
|
||||
import { CipherData } from '../data/cipherData';
|
||||
import { CollectionData } from '../data/collectionData';
|
||||
import { EventData } from '../data/eventData';
|
||||
import { FolderData } from '../data/folderData';
|
||||
import { PolicyData } from '../data/policyData';
|
||||
import { ProviderData } from '../data/providerData';
|
||||
import { SendData } from '../data/sendData';
|
||||
|
||||
export enum AuthenticationStatus {
|
||||
Locked = 'locked',
|
||||
Unlocked = 'unlocked',
|
||||
LoggedOut = 'loggedOut',
|
||||
Active = 'active',
|
||||
}
|
||||
|
||||
export class Account {
|
||||
userId: string;
|
||||
email: string;
|
||||
accessToken: string;
|
||||
decodedToken: any;
|
||||
apiKeyClientId: string;
|
||||
apiKeyClientSecret: string;
|
||||
alwaysShowDock: boolean;
|
||||
autoFillOnPageLoadDefault: boolean;
|
||||
biometricAwaitingAcceptance: boolean;
|
||||
biometricFingerprintValidated: boolean;
|
||||
biometricText: string;
|
||||
biometricUnlock: boolean;
|
||||
encryptedCiphers: { [id: string]: CipherData };
|
||||
decryptedCiphers: CipherView[];
|
||||
cryptoMasterKey: SymmetricCryptoKey;
|
||||
cryptoMasterKeyB64: string;
|
||||
encryptedCryptoSymmetricKey: string;
|
||||
decryptedCryptoSymmetricKey: SymmetricCryptoKey;
|
||||
defaultUriMatch: UriMatchType;
|
||||
disableAddLoginNotification: boolean;
|
||||
disableAutoBiometricsPrompt: boolean;
|
||||
disableAutoTotpCopy: boolean;
|
||||
disableBadgeCounter: boolean;
|
||||
disableChangedPasswordNotification: boolean;
|
||||
disableContextMenuItem: boolean;
|
||||
disableFavicon: boolean;
|
||||
disableGa: boolean;
|
||||
dontShowCardsCurrentTab: boolean;
|
||||
dontShowIdentitiesCurrentTab: boolean;
|
||||
emailVerified: boolean;
|
||||
enableAlwaysOnTop: boolean;
|
||||
enableAutoFillOnPageLoad: boolean;
|
||||
enableBiometric: boolean;
|
||||
enableBrowserIntegration: boolean;
|
||||
enableBrowserIntegrationFingerprint: boolean;
|
||||
enableCloseToTray: boolean;
|
||||
enableMinimizeToTray: boolean;
|
||||
enableStartToTray: boolean;
|
||||
enableTray: boolean;
|
||||
decryptedOrganizationKeys: Map<string, SymmetricCryptoKey>;
|
||||
encryptedOrganizationKeys: any;
|
||||
decryptedProviderKeys: Map<string, SymmetricCryptoKey>;
|
||||
encryptedProviderKeys: any;
|
||||
entityId: string;
|
||||
entityType: string;
|
||||
environmentUrls: any;
|
||||
equivalentDomains: any;
|
||||
eventCollection: EventData[];
|
||||
encryptedFolders: { [id: string]: FolderData };
|
||||
decryptedFolders: FolderView[];
|
||||
forcePasswordReset: boolean;
|
||||
installedVersion: string;
|
||||
kdfIterations: number;
|
||||
kdfType: KdfType;
|
||||
keyHash: string;
|
||||
lastActive: number;
|
||||
lastSync: string;
|
||||
legacyEtmKey: SymmetricCryptoKey;
|
||||
localData: any;
|
||||
mainWindowSize: number;
|
||||
minimizeOnCopyToClipboard: boolean;
|
||||
neverDomains: string[];
|
||||
noAutoPromptBiometrics: boolean;
|
||||
noAutoPromptBiometricsText: string;
|
||||
openAtLogin: boolean;
|
||||
encryptedPasswordGenerationHistory: GeneratedPasswordHistory[];
|
||||
decryptedPasswordGenerationHistory: GeneratedPasswordHistory[];
|
||||
passwordGenerationOptions: any;
|
||||
encryptedPinProtected: string;
|
||||
decryptedPinProtected: EncString;
|
||||
protectedPin: string;
|
||||
encryptedPolicies: { [id: string]: PolicyData };
|
||||
decryptedPolicies: Policy[];
|
||||
providers: { [id: string]: ProviderData };
|
||||
publicKey: ArrayBuffer;
|
||||
refreshToken: string;
|
||||
rememberEmail: boolean;
|
||||
rememberedEmail: string;
|
||||
securityStamp: string;
|
||||
encryptedSends: { [id: string]: SendData };
|
||||
decryptedSends: SendView[];
|
||||
settings: any;
|
||||
ssoCodeVerifier: string;
|
||||
ssoState: string;
|
||||
ssoOrganizationIdentifier: string;
|
||||
theme: string;
|
||||
twoFactorToken: string;
|
||||
vaultTimeout: number;
|
||||
vaultTimeoutAction: string;
|
||||
clearClipboard: number;
|
||||
collapsedGroupings: Set<string>;
|
||||
encryptedCollections: { [id: string]: CollectionData };
|
||||
decryptedCollections: CollectionView[];
|
||||
encryptedPrivateKey: string;
|
||||
decryptedPrivateKey: ArrayBuffer;
|
||||
locale: string;
|
||||
organizations: { [id: string]: OrganizationData };
|
||||
everBeenUnlocked: boolean;
|
||||
biometricLocked: boolean;
|
||||
enableGravitars: boolean;
|
||||
addEditCipherInfo: any;
|
||||
authenticationStatus: AuthenticationStatus;
|
||||
private hasPremiumPersonally: boolean;
|
||||
|
||||
constructor(userId: string, userEmail: string,
|
||||
kdfType: KdfType, kdfIterations: number,
|
||||
clientId: string, clientSecret: string,
|
||||
accessToken: string, refreshToken: string,
|
||||
hasPremium: boolean) {
|
||||
this.userId = userId;
|
||||
this.email = userEmail;
|
||||
this.kdfType = kdfType;
|
||||
this.kdfIterations = kdfIterations;
|
||||
this.apiKeyClientId = clientId;
|
||||
this.apiKeyClientSecret = clientSecret;
|
||||
this.accessToken = accessToken;
|
||||
this.refreshToken = refreshToken;
|
||||
this.hasPremiumPersonally = hasPremium;
|
||||
}
|
||||
|
||||
get isAuthenticated(): boolean {
|
||||
if (!this.accessToken) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return this.userId != null;
|
||||
}
|
||||
|
||||
get canAccessPremium(): boolean {
|
||||
if (!this.isAuthenticated) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return this.hasPremiumPersonally || this.hasPremiumThroughOrganization;
|
||||
}
|
||||
|
||||
private get hasPremiumThroughOrganization(): boolean {
|
||||
if (this.organizations == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (const id of Object.keys(this.organizations)) {
|
||||
const o = this.organizations[id];
|
||||
if (o.enabled && o.usersGetPremium && !o.isProviderUser) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private get hasMasterKey(): boolean {
|
||||
return this.cryptoMasterKey != null;
|
||||
}
|
||||
|
||||
private get isActive(): boolean {
|
||||
const diffSeconds = ((new Date()).getTime() - this.lastActive) / 1000;
|
||||
return diffSeconds < (this.vaultTimeout * 60);
|
||||
}
|
||||
}
|
||||
|
||||
16
common/src/models/domain/globals.ts
Normal file
16
common/src/models/domain/globals.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
export class Globals {
|
||||
biometricText: string;
|
||||
decodedToken: any;
|
||||
enableAlwaysOnTop: boolean;
|
||||
enableBiometrics: boolean;
|
||||
installedVersion: string;
|
||||
lastActive: number;
|
||||
locale: string;
|
||||
noAutoPromptBiometricsText: string;
|
||||
openAtLogin: boolean;
|
||||
organizationInvitation: any;
|
||||
rememberEmail: boolean;
|
||||
rememberedEmail: string;
|
||||
theme: string;
|
||||
window: Map<string, any> = new Map<string, any>();
|
||||
}
|
||||
9
common/src/models/domain/state.ts
Normal file
9
common/src/models/domain/state.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Account } from './account';
|
||||
import { Globals } from './globals';
|
||||
|
||||
export class State {
|
||||
accounts: { [userId: string]: Account } = {};
|
||||
globals: Globals;
|
||||
activeUserId: string;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user