Moved vault to cached folders/sites

This commit is contained in:
Kyle Spearrin 2016-09-15 21:09:56 -04:00
parent 16a59f8d09
commit 6f142c3682
4 changed files with 118 additions and 51 deletions

View File

@ -110,4 +110,20 @@ var Folder = function (obj, alreadyEncrypted) {
return deferred.promise; return deferred.promise;
}; };
Folder.prototype.decrypt = function () {
var self = this;
var model = {
id: self.id
};
var deferred = Q.defer();
self.name.decryptWithPromise().then(function (val) {
model.name = val;
deferred.resolve(model);
});
return deferred.promise;
};
}(); }();

View File

@ -23,61 +23,31 @@
} }
function loadVault() { function loadVault() {
var promises = []; var decFolders = [];
var decSites = []; var decSites = [];
var decFolders = [{ var promises = [];
id: null,
name: '(none)'
}];
folderService.getAll(function (folders) { var folderPromise = $q.when(folderService.getAllDecrypted());
siteService.getAll(function (sites) { folderPromise.then(function (folders) {
for (var i = 1; i < folders.length; i++) { decFolders = folders;
decFolders.push({ });
id: folders[i].id promises.push(folderPromise);
});
var folderNamePromise = cipherService.decrypt(folders[i].name, i); var sitePromise = $q.when(siteService.getAllDecrypted());
promises.push(folderNamePromise); sitePromise.then(function (sites) {
folderNamePromise.then(function (obj) { decSites = sites;
decFolders[obj.index].name = obj.val; });
}); promises.push(sitePromise);
}
for (var j = 0; j < sites.length; j++) { $q.all(promises).then(function () {
decSites.push({ $rootScope.vaultFolders = decFolders.concat([{
id: sites[j].id, id: null,
folderId: sites[j].folderId, name: '(none)'
favorite: sites[j].favorite }]);
}); $rootScope.vaultSites = decSites;
if (!delayLoad) {
var namePromise = cipherService.decrypt(sites[j].name, j); setScrollY();
promises.push(namePromise); }
namePromise.then(function (obj) {
decSites[obj.index].name = obj.val;
});
var usernamePromise = cipherService.decrypt(sites[j].username, j);
promises.push(usernamePromise);
usernamePromise.then(function (obj) {
decSites[obj.index].username = obj.val;
});
var passwordPromise = cipherService.decrypt(sites[j].password, j);
promises.push(passwordPromise);
passwordPromise.then(function (obj) {
decSites[obj.index].password = obj.val;
});
}
$q.all(promises).then(function () {
$rootScope.vaultSites = decSites;
$rootScope.vaultFolders = decFolders;
if (!delayLoad) {
setScrollY();
}
});
});
}); });
} }

View File

@ -2,11 +2,37 @@
this.cryptoService = cryptoService; this.cryptoService = cryptoService;
this.userService = userService; this.userService = userService;
this.apiService = apiService; this.apiService = apiService;
this.decryptedFolderCache = null;
initFolderService(); initFolderService();
}; };
function initFolderService() { function initFolderService() {
FolderService.prototype.encrypt = function (folder) {
var model = {
id: folder.id
};
var deferred = Q.defer();
encryptWithPromise(folder.name).then(function (cs) {
model.name = cs;
deferred.resolve(model);
});
return deferred.promise;
};
function encryptWithPromise(plaintextString) {
var deferred = Q.defer();
cryptoService.encrypt(plaintextString, function (cipherString) {
deferred.resolve(cipherString);
});
return deferred.promise;
}
FolderService.prototype.get = function (id, callback) { FolderService.prototype.get = function (id, callback) {
if (!callback || typeof callback !== 'function') { if (!callback || typeof callback !== 'function') {
throw 'callback function required'; throw 'callback function required';
@ -48,6 +74,33 @@ function initFolderService() {
}); });
}; };
FolderService.prototype.getAllDecrypted = function () {
var deferred = Q.defer();
var self = this;
if (self.decryptedFolderCache) {
deferred.resolve(self.decryptedFolderCache);
return deferred.promise;
}
var promises = [];
var decFolders = [];
self.getAll(function (folders) {
for (var i = 0; i < folders.length; i++) {
promises.push(folders[i].decrypt().then(function (folder) {
decFolders.push(folder);
}));
}
Q.all(promises).then(function () {
self.decryptedFolderCache = decFolders;
deferred.resolve(self.decryptedFolderCache);
});
});
return deferred.promise;
};
FolderService.prototype.saveWithServer = function (folder, callback) { FolderService.prototype.saveWithServer = function (folder, callback) {
if (!callback || typeof callback !== 'function') { if (!callback || typeof callback !== 'function') {
throw 'callback function required'; throw 'callback function required';

View File

@ -2,6 +2,7 @@
this.cryptoService = cryptoService; this.cryptoService = cryptoService;
this.userService = userService; this.userService = userService;
this.apiService = apiService; this.apiService = apiService;
this.decryptedSiteCache = null;
initSiteService(); initSiteService();
}; };
@ -90,6 +91,33 @@ function initSiteService() {
}); });
}; };
SiteService.prototype.getAllDecrypted = function () {
var deferred = Q.defer();
var self = this;
if (self.decryptedSiteCache) {
deferred.resolve(self.decryptedSiteCache);
return deferred.promise;
}
var promises = [];
var decSites = [];
self.getAll(function (sites) {
for (var i = 0; i < sites.length; i++) {
promises.push(sites[i].decrypt().then(function (site) {
decSites.push(site);
}));
}
Q.all(promises).then(function () {
self.decryptedSiteCache = decSites;
deferred.resolve(self.decryptedSiteCache);
});
});
return deferred.promise;
};
SiteService.prototype.saveWithServer = function (site, successCallback, errorCallback) { SiteService.prototype.saveWithServer = function (site, successCallback, errorCallback) {
var self = this, var self = this,
request = new SiteRequest(site); request = new SiteRequest(site);