decrypt and list sites

This commit is contained in:
Kyle Spearrin 2016-09-05 22:27:32 -04:00
parent a7c8dec730
commit 27667a3086
5 changed files with 77 additions and 54 deletions

View File

@ -1,4 +1,4 @@
var FolderData = function (response, userId) {
var FolderData = function (response, userId) {
var data = null;
if (response instanceof FolderResponse) {
data = response;
@ -10,10 +10,10 @@
throw 'unsupported instance';
}
this.id = response.Id;
this.id = response.id;
this.userId = userId;
this.name = data.Name;
this.revisionDate = response.RevisionDate;
this.name = data.name;
this.revisionDate = response.revisionDate;
};
var SiteData = function (response, userId) {
@ -28,14 +28,14 @@ var SiteData = function (response, userId) {
throw 'unsupported instance';
}
this.id = response.Id;
this.folderId = response.FolderId;
this.id = response.id;
this.folderId = response.folderId;
this.userId = userId;
this.name = data.Name;
this.uri = data.Uri;
this.username = data.Username;
this.password = data.Password;
this.notes = data.Notes;
this.favorite = response.Favorite;
this.revisionDate = response.RevisionDate;
this.name = data.name;
this.uri = data.uri;
this.username = data.username;
this.password = data.password;
this.notes = data.notes;
this.favorite = response.favorite;
this.revisionDate = response.revisionDate;
};

View File

@ -18,40 +18,41 @@ var CipherString = function (encryptedString) {
callback(_decryptedValue);
});
}
callback(_decryptedValue);
else {
callback(_decryptedValue);
}
};
}();
var Site = function (obj, alreadyEncrypted) {
this.id = obj.id;
this.folderId = obj.folderId;
this.id = obj.id ? obj.id : null;
this.folderId = obj.folderId ? obj.folderId : null;
if (alreadyEncrypted === true) {
this.name = obj.name;
this.uri = obj.uri;
this.username = obj.username;
this.password = obj.password;
this.notes = obj.notes;
this.name = obj.name ? obj.name : null;
this.uri = obj.uri ? obj.uri : null;
this.username = obj.username ? obj.username : null;
this.password = obj.password ? obj.password : null;
this.notes = obj.notes ? obj.notes : null;
}
else {
this.name = new CipherString(obj.name);
this.uri = new CipherString(obj.uri);
this.username = new CipherString(obj.username);
this.password = new CipherString(obj.password);
this.notes = new CipherString(obj.notes);
this.name = obj.name ? new CipherString(obj.name) : null;
this.uri = obj.uri ? new CipherString(obj.uri) : null;
this.username = obj.username ? new CipherString(obj.username) : null;
this.password = obj.password ? new CipherString(obj.password) : null;
this.notes = obj.notes ? new CipherString(obj.notes) : null;
}
this.favorite = obj.favorite ? true : false;
};
var Folder = function (obj, alreadyEncrypted) {
this.id = obj.id;
this.id = obj.id ? obj.id : null;
if (alreadyEncrypted === true) {
this.name = obj.name;
this.name = obj.name ? obj.name : null;
}
else {
this.name = new CipherString(obj.name);
this.name = obj.name ? new CipherString(obj.name) : null;
}
};

View File

@ -1,7 +1,7 @@
angular
.module('bit.vault')
.controller('vaultController', function ($scope, $ionicModal, siteService, folderService) {
.controller('vaultController', function ($scope, $ionicModal, siteService, folderService, $q) {
$scope.parentScope = $scope;
$scope.sites = [];
$scope.folders = [];
@ -14,14 +14,16 @@
folderService.getAll(function (folders) {
siteService.getAll(function (sites) {
var promises = [];
for (var i = 0; i < folders.length; i++) {
decFolders.push({
id: folders[i].id
});
folders[i].name.decrypt(function (name) {
decFolders.name = name;
});
promises.push(decrypt(folders[j].name, i).then(function (obj) {
decFolders[obj.index].name = obj.val;
}));
}
for (var j = 0; j < sites.length; j++) {
@ -31,24 +33,35 @@
favorite: sites[j].favorite
});
if (sites[j].name && sites[j].name.encryptedString) {
sites[j].name.decrypt(function (name) {
decSites.name = name;
});
}
if (sites[j].username && sites[j].username.encryptedString) {
sites[j].username.decrypt(function (username) {
decSites.username = username;
});
}
promises.push(decrypt(sites[j].name, j).then(function (obj) {
decSites[obj.index].name = obj.val;
}));
promises.push(decrypt(sites[j].username, j).then(function (obj) {
decSites[obj.index].username = obj.val;
}));
}
$scope.sites = decSites;
$scope.folders = decFolders;
$q.all(promises).then(function () {
$scope.sites = decSites;
$scope.folders = decFolders;
});
});
});
function decrypt(cipherString, index) {
return $q(function(resolve, reject) {
if (!cipherString) {
resolve({val: null, index: index});
}
else {
cipherString.decrypt(function (decString) {
resolve({ val: decString, index: index });
});
}
});
}
$scope.addSite = function () {
$ionicModal.fromTemplateUrl('app/vault/views/vaultAddSite.html', {
scope: $scope,

View File

@ -4,10 +4,16 @@
</ion-nav-buttons>
<ion-content>
<div class="list">
<div class="item item-button-right">
Site 1
<button class="button button-clear button-dark"><i class="icon ion-more"></i></button>
</div>
<ng-repeat ng-repeat="folder in folders | orderBy: folderSort" ng-show="folders.length">
<div class="item item-divider">
{{folder.name}}
</div>
<div class="item item-button-right" ng-repeat="site in folderSites = (sites | filter: { folderId: folder.id } | orderBy: ['name', 'username'])">
{{site.name}}<br />
{{site.username}}
<button class="button button-clear button-dark"><i class="icon ion-more"></i></button>
</div>
</ng-repeat>
</div>
</ion-content>
</ion-view>

View File

@ -1,4 +1,4 @@
function CryptoService() {
function CryptoService() {
initCryptoService();
};
@ -105,6 +105,7 @@ function initCryptoService() {
if (plaintextValue === null || plaintextValue === undefined) {
callback(null);
return;
}
this.getKey(false, function (key) {
@ -123,7 +124,8 @@ function initCryptoService() {
var ct = ctJson.match(/"ct":"([^"]*)"/)[1];
var iv = sjcl.codec.base64.fromBits(response.iv);
callback(new CipherString(iv + "|" + ct));
var cs = new CipherString(iv + "|" + ct);
callback(cs);
});
};
@ -145,7 +147,8 @@ function initCryptoService() {
var ctBits = sjcl.codec.base64.toBits(cipherString.cipherText);
var decBits = sjcl.mode.cbc.decrypt(aes, ctBits, ivBits, null);
callback(sjcl.codec.utf8String.fromBits(decBits));
var decValue = sjcl.codec.utf8String.fromBits(decBits);
callback(decValue);
});
};
};