move collection service tio jslib

This commit is contained in:
Kyle Spearrin 2018-01-09 23:12:14 -05:00
parent d6eeab7b23
commit 5c98e94198
5 changed files with 9 additions and 134 deletions

View File

@ -4,6 +4,7 @@ import {
ApiService, ApiService,
AppIdService, AppIdService,
CipherService, CipherService,
CollectionService,
ConstantsService, ConstantsService,
ContainerService, ContainerService,
CryptoService, CryptoService,
@ -21,6 +22,7 @@ import {
ApiService as ApiServiceAbstraction, ApiService as ApiServiceAbstraction,
AppIdService as AppIdServiceAbstraction, AppIdService as AppIdServiceAbstraction,
CipherService as CipherServiceAbstraction, CipherService as CipherServiceAbstraction,
CollectionService as CollectionServiceAbstraction,
CryptoService as CryptoServiceAbstraction, CryptoService as CryptoServiceAbstraction,
EnvironmentService as EnvironmentServiceAbstraction, EnvironmentService as EnvironmentServiceAbstraction,
FolderService as FolderServiceAbstraction, FolderService as FolderServiceAbstraction,
@ -49,7 +51,6 @@ import AutofillService from '../services/autofill.service';
import BrowserMessagingService from '../services/browserMessaging.service'; import BrowserMessagingService from '../services/browserMessaging.service';
import BrowserPlatformUtilsService from '../services/browserPlatformUtils.service'; import BrowserPlatformUtilsService from '../services/browserPlatformUtils.service';
import BrowserStorageService from '../services/browserStorage.service'; import BrowserStorageService from '../services/browserStorage.service';
import CollectionService from '../services/collection.service';
import i18nService from '../services/i18n.service'; import i18nService from '../services/i18n.service';
import LockService from '../services/lock.service'; import LockService from '../services/lock.service';
import SyncService from '../services/sync.service'; import SyncService from '../services/sync.service';
@ -70,7 +71,7 @@ export default class MainBackground {
settingsService: SettingsServiceAbstraction; settingsService: SettingsServiceAbstraction;
cipherService: CipherServiceAbstraction; cipherService: CipherServiceAbstraction;
folderService: FolderServiceAbstraction; folderService: FolderServiceAbstraction;
collectionService: CollectionService; collectionService: CollectionServiceAbstraction;
lockService: LockService; lockService: LockService;
syncService: SyncService; syncService: SyncService;
passwordGenerationService: PasswordGenerationServiceAbstraction; passwordGenerationService: PasswordGenerationServiceAbstraction;

View File

@ -3,9 +3,11 @@ import { ConstantsService } from 'jslib/services/constants.service';
import { ApiService } from 'jslib/abstractions/api.service'; import { ApiService } from 'jslib/abstractions/api.service';
import { AppIdService } from 'jslib/abstractions/appId.service'; import { AppIdService } from 'jslib/abstractions/appId.service';
import { CipherService } from 'jslib/abstractions/cipher.service'; import { CipherService } from 'jslib/abstractions/cipher.service';
import { CollectionService } from 'jslib/abstractions/collection.service';
import { CryptoService } from 'jslib/abstractions/crypto.service'; import { CryptoService } from 'jslib/abstractions/crypto.service';
import { EnvironmentService } from 'jslib/abstractions/environment.service'; import { EnvironmentService } from 'jslib/abstractions/environment.service';
import { FolderService } from 'jslib/abstractions/folder.service'; import { FolderService } from 'jslib/abstractions/folder.service';
import { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service'; import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
import { SettingsService } from 'jslib/abstractions/settings.service'; import { SettingsService } from 'jslib/abstractions/settings.service';
import { StorageService } from 'jslib/abstractions/storage.service'; import { StorageService } from 'jslib/abstractions/storage.service';
@ -30,7 +32,7 @@ export const folderService = getBackgroundService<FolderService>('folderService'
export const cipherService = getBackgroundService<CipherService>('cipherService'); export const cipherService = getBackgroundService<CipherService>('cipherService');
export const syncService = getBackgroundService<any>('syncService'); export const syncService = getBackgroundService<any>('syncService');
export const autofillService = getBackgroundService<any>('autofillService'); export const autofillService = getBackgroundService<any>('autofillService');
export const passwordGenerationService = getBackgroundService<any>('passwordGenerationService'); export const passwordGenerationService = getBackgroundService<PasswordGenerationService>('passwordGenerationService');
export const platformUtilsService = getBackgroundService<PlatformUtilsService>('platformUtilsService'); export const platformUtilsService = getBackgroundService<PlatformUtilsService>('platformUtilsService');
export const utilsService = getBackgroundService<UtilsService>('utilsService'); export const utilsService = getBackgroundService<UtilsService>('utilsService');
export const appIdService = getBackgroundService<AppIdService>('appIdService'); export const appIdService = getBackgroundService<AppIdService>('appIdService');
@ -40,4 +42,4 @@ export const settingsService = getBackgroundService<SettingsService>('settingsSe
export const lockService = getBackgroundService<any>('lockService'); export const lockService = getBackgroundService<any>('lockService');
export const totpService = getBackgroundService<TotpService>('totpService'); export const totpService = getBackgroundService<TotpService>('totpService');
export const environmentService = getBackgroundService<EnvironmentService>('environmentService'); export const environmentService = getBackgroundService<EnvironmentService>('environmentService');
export const collectionService = getBackgroundService<any>('collectionService'); export const collectionService = getBackgroundService<CollectionService>('collectionService');

View File

@ -1,126 +0,0 @@
import {
CryptoService,
StorageService,
UserService,
} from 'jslib/abstractions';
import { CollectionData } from 'jslib/models/data';
import { Collection } from 'jslib/models/domain';
const Keys = {
collectionsPrefix: 'collections_',
};
export default class CollectionService {
decryptedCollectionCache: any[];
constructor(private cryptoService: CryptoService, private userService: UserService,
private storageService: StorageService) {
}
clearCache(): void {
this.decryptedCollectionCache = null;
}
async get(id: string): Promise<Collection> {
const userId = await this.userService.getUserId();
const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(
Keys.collectionsPrefix + userId);
if (collections == null || !collections.hasOwnProperty(id)) {
return null;
}
return new Collection(collections[id]);
}
async getAll(): Promise<Collection[]> {
const userId = await this.userService.getUserId();
const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(
Keys.collectionsPrefix + userId);
const response: Collection[] = [];
for (const id in collections) {
if (collections.hasOwnProperty(id)) {
response.push(new Collection(collections[id]));
}
}
return response;
}
async getAllDecrypted(): Promise<any[]> {
if (this.decryptedCollectionCache != null) {
return this.decryptedCollectionCache;
}
const key = await this.cryptoService.getKey();
if (key == null) {
throw new Error('No key.');
}
const decFolders: any[] = [];
const promises: Array<Promise<any>> = [];
const folders = await this.getAll();
folders.forEach((folder) => {
promises.push(folder.decrypt().then((f: any) => {
decFolders.push(f);
}));
});
await Promise.all(promises);
this.decryptedCollectionCache = decFolders;
return this.decryptedCollectionCache;
}
async upsert(collection: CollectionData | CollectionData[]): Promise<any> {
const userId = await this.userService.getUserId();
let collections = await this.storageService.get<{ [id: string]: CollectionData; }>(
Keys.collectionsPrefix + userId);
if (collections == null) {
collections = {};
}
if (collection instanceof CollectionData) {
const c = collection as CollectionData;
collections[c.id] = c;
} else {
(collection as CollectionData[]).forEach((c) => {
collections[c.id] = c;
});
}
await this.storageService.save(Keys.collectionsPrefix + userId, collections);
this.decryptedCollectionCache = null;
}
async replace(collections: { [id: string]: CollectionData; }): Promise<any> {
const userId = await this.userService.getUserId();
await this.storageService.save(Keys.collectionsPrefix + userId, collections);
this.decryptedCollectionCache = null;
}
async clear(userId: string): Promise<any> {
await this.storageService.remove(Keys.collectionsPrefix + userId);
this.decryptedCollectionCache = null;
}
async delete(id: string | string[]): Promise<any> {
const userId = await this.userService.getUserId();
const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(
Keys.collectionsPrefix + userId);
if (collections == null) {
return;
}
if (typeof id === 'string') {
const i = id as string;
delete collections[id];
} else {
(id as string[]).forEach((i) => {
delete collections[i];
});
}
await this.storageService.save(Keys.collectionsPrefix + userId, collections);
this.decryptedCollectionCache = null;
}
}

View File

@ -1,11 +1,10 @@
import CollectionService from './collection.service';
import { import {
ConstantsService, ConstantsService,
} from 'jslib/services'; } from 'jslib/services';
import { import {
CipherService, CipherService,
CollectionService,
CryptoService, CryptoService,
FolderService, FolderService,
PlatformUtilsService, PlatformUtilsService,

View File

@ -1,8 +1,7 @@
import CollectionService from './collection.service';
import { import {
ApiService, ApiService,
CipherService, CipherService,
CollectionService,
CryptoService, CryptoService,
FolderService, FolderService,
MessagingService, MessagingService,