mirror of
https://github.com/bitwarden/browser
synced 2025-12-17 08:43:33 +00:00
Cipher service setup. Bind data for site view.
This commit is contained in:
77
src/popup/app/services/cipherService.js
Normal file
77
src/popup/app/services/cipherService.js
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
angular
|
||||||
|
.module('bit.services')
|
||||||
|
|
||||||
|
.factory('cipherService', function (cryptoService, $q) {
|
||||||
|
var _service = {};
|
||||||
|
|
||||||
|
_service.encryptSite = function (site, callback) {
|
||||||
|
var model = {};
|
||||||
|
|
||||||
|
cryptoService.encrypt(site.name, function (nameCipherString) {
|
||||||
|
model.name = nameCipherString;
|
||||||
|
cryptoService.encrypt(site.uri, function (uriCipherString) {
|
||||||
|
model.uri = uriCipherString;
|
||||||
|
cryptoService.encrypt(site.username, function (usernameCipherString) {
|
||||||
|
model.username = usernameCipherString;
|
||||||
|
cryptoService.encrypt(site.password, function (passwordCipherString) {
|
||||||
|
model.password = passwordCipherString;
|
||||||
|
cryptoService.encrypt(site.notes, function (notesCipherString) {
|
||||||
|
model.notes = notesCipherString;
|
||||||
|
callback(model);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_service.decryptSite = function (site) {
|
||||||
|
var model = {
|
||||||
|
id: site.id,
|
||||||
|
folderId: site.folderId,
|
||||||
|
favorite: site.favorite
|
||||||
|
};
|
||||||
|
|
||||||
|
return $q(function (resolve, reject) {
|
||||||
|
decrypt(site.name).then(function (obj) {
|
||||||
|
model.name = obj.val;
|
||||||
|
return decrypt(site.uri);
|
||||||
|
}).then(function (obj) {
|
||||||
|
model.uri = obj.val;
|
||||||
|
return decrypt(site.username);
|
||||||
|
}).then(function (obj) {
|
||||||
|
model.username = obj.val;
|
||||||
|
return decrypt(site.password);
|
||||||
|
}).then(function (obj) {
|
||||||
|
model.password = obj.val;
|
||||||
|
return decrypt(site.notes);
|
||||||
|
}).then(function (obj) {
|
||||||
|
model.notes = obj.val;
|
||||||
|
resolve(model);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_service.decrypt = decrypt;
|
||||||
|
|
||||||
|
function decrypt(cipherString, index) {
|
||||||
|
return $q(function (resolve, reject) {
|
||||||
|
if (!cipherString) {
|
||||||
|
resolve({
|
||||||
|
val: null,
|
||||||
|
index: index
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cipherString.decrypt(function (decVal) {
|
||||||
|
resolve({
|
||||||
|
val: decVal,
|
||||||
|
index: index
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return _service;
|
||||||
|
});
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
angular
|
angular
|
||||||
.module('bit.vault')
|
.module('bit.vault')
|
||||||
|
|
||||||
.controller('vaultAddSiteController', function ($scope, siteService, cryptoService) {
|
.controller('vaultAddSiteController', function ($scope, siteService, cipherService) {
|
||||||
$scope.site = {
|
$scope.site = {
|
||||||
folderId: null
|
folderId: null
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.createSite = function (model) {
|
$scope.createSite = function (model) {
|
||||||
encryptSite(model, function (siteModel) {
|
cipherService.encryptSite(model, function (siteModel) {
|
||||||
var site = new Site(siteModel, true);
|
var site = new Site(siteModel, true);
|
||||||
siteService.save(site, function () {
|
siteService.save(site, function () {
|
||||||
$scope.close();
|
$scope.close();
|
||||||
@@ -18,24 +18,4 @@
|
|||||||
$scope.close = function () {
|
$scope.close = function () {
|
||||||
$scope.parentScope.closeAddSite();
|
$scope.parentScope.closeAddSite();
|
||||||
};
|
};
|
||||||
|
|
||||||
function encryptSite(model, callback) {
|
|
||||||
var siteModel = {};
|
|
||||||
cryptoService.encrypt(model.name, function (nameCipherString) {
|
|
||||||
siteModel.name = nameCipherString;
|
|
||||||
cryptoService.encrypt(model.uri, function (uriCipherString) {
|
|
||||||
siteModel.uri = uriCipherString;
|
|
||||||
cryptoService.encrypt(model.username, function (usernameCipherString) {
|
|
||||||
siteModel.username = usernameCipherString;
|
|
||||||
cryptoService.encrypt(model.password, function (passwordCipherString) {
|
|
||||||
siteModel.password = passwordCipherString;
|
|
||||||
cryptoService.encrypt(model.notes, function (notesCipherString) {
|
|
||||||
siteModel.notes = notesCipherString;
|
|
||||||
callback(siteModel);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
angular
|
angular
|
||||||
.module('bit.vault')
|
.module('bit.vault')
|
||||||
|
|
||||||
.controller('vaultController', function ($scope, $ionicModal, siteService, folderService, $q) {
|
.controller('vaultController', function ($scope, $ionicModal, siteService, folderService, $q, cipherService) {
|
||||||
$scope.parentScope = $scope;
|
$scope.parentScope = $scope;
|
||||||
$scope.sites = [];
|
$scope.sites = [];
|
||||||
$scope.folders = [];
|
$scope.folders = [];
|
||||||
|
$scope.focusedSiteId = null;
|
||||||
|
|
||||||
$scope.$on("$ionicView.enter", function (event, data) {
|
$scope.$on("$ionicView.enter", function (event, data) {
|
||||||
loadVault();
|
loadVault();
|
||||||
@@ -29,7 +30,7 @@
|
|||||||
id: folders[i].id
|
id: folders[i].id
|
||||||
});
|
});
|
||||||
|
|
||||||
var folderNamePromise = decrypt(sites[i].name, i);
|
var folderNamePromise = cipherService.decrypt(sites[i].name, i);
|
||||||
promises.push(folderNamePromise);
|
promises.push(folderNamePromise);
|
||||||
folderNamePromise.then(function (obj) {
|
folderNamePromise.then(function (obj) {
|
||||||
decFolders[obj.index].name = obj.val;
|
decFolders[obj.index].name = obj.val;
|
||||||
@@ -43,13 +44,13 @@
|
|||||||
favorite: sites[j].favorite
|
favorite: sites[j].favorite
|
||||||
});
|
});
|
||||||
|
|
||||||
var namePromise = decrypt(sites[j].name, j);
|
var namePromise = cipherService.decrypt(sites[j].name, j);
|
||||||
promises.push(namePromise);
|
promises.push(namePromise);
|
||||||
namePromise.then(function (obj) {
|
namePromise.then(function (obj) {
|
||||||
decSites[obj.index].name = obj.val;
|
decSites[obj.index].name = obj.val;
|
||||||
});
|
});
|
||||||
|
|
||||||
var usernamePromise = decrypt(sites[j].username, j);
|
var usernamePromise = cipherService.decrypt(sites[j].username, j);
|
||||||
promises.push(usernamePromise);
|
promises.push(usernamePromise);
|
||||||
usernamePromise.then(function (obj) {
|
usernamePromise.then(function (obj) {
|
||||||
decSites[obj.index].username = obj.val;
|
decSites[obj.index].username = obj.val;
|
||||||
@@ -64,26 +65,8 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
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.viewSite = function (site) {
|
$scope.viewSite = function (site) {
|
||||||
|
$scope.focusedSiteId = site.id;
|
||||||
$ionicModal.fromTemplateUrl('app/vault/views/vaultViewSite.html', {
|
$ionicModal.fromTemplateUrl('app/vault/views/vaultViewSite.html', {
|
||||||
scope: $scope,
|
scope: $scope,
|
||||||
animation: 'slide-in-up'
|
animation: 'slide-in-up'
|
||||||
@@ -94,6 +77,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
$scope.editSite = function (site) {
|
$scope.editSite = function (site) {
|
||||||
|
$scope.focusedSiteId = site.id;
|
||||||
$ionicModal.fromTemplateUrl('app/vault/views/vaultEditSite.html', {
|
$ionicModal.fromTemplateUrl('app/vault/views/vaultEditSite.html', {
|
||||||
scope: $scope,
|
scope: $scope,
|
||||||
animation: 'slide-in-up'
|
animation: 'slide-in-up'
|
||||||
@@ -119,10 +103,12 @@
|
|||||||
|
|
||||||
$scope.closeViewSite = function () {
|
$scope.closeViewSite = function () {
|
||||||
$scope.viewSiteModal.hide();
|
$scope.viewSiteModal.hide();
|
||||||
|
$scope.focusedSiteId = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.closeEditSite = function () {
|
$scope.closeEditSite = function () {
|
||||||
$scope.editSiteModal.hide();
|
$scope.editSiteModal.hide();
|
||||||
|
$scope.focusedSiteId = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.$on('modal.hidden', function () {
|
$scope.$on('modal.hidden', function () {
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
angular
|
angular
|
||||||
.module('bit.vault')
|
.module('bit.vault')
|
||||||
|
|
||||||
.controller('vaultViewSiteController', function ($scope, siteService, cryptoService) {
|
.controller('vaultViewSiteController', function ($scope, siteService, cipherService) {
|
||||||
$scope.site = {
|
$scope.site = null;
|
||||||
folderId: null
|
siteService.get($scope.parentScope.focusedSiteId, function (site) {
|
||||||
};
|
cipherService.decryptSite(site).then(function (model) {
|
||||||
|
$scope.site = model;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
$scope.editSite = function () {
|
$scope.editSite = function () {
|
||||||
|
// TODO
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.close = function () {
|
$scope.close = function () {
|
||||||
|
|||||||
@@ -5,6 +5,35 @@
|
|||||||
<button class="button button-clear button-primary" ng-click="editSite()">Edit</button>
|
<button class="button button-clear button-primary" ng-click="editSite()">Edit</button>
|
||||||
</ion-header-bar>
|
</ion-header-bar>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
View site
|
<div class="list">
|
||||||
|
<div class="item item-divider">
|
||||||
|
Site Information
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<div>Name</div>
|
||||||
|
{{site.name}}
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<div>Website</div>
|
||||||
|
{{site.uri}}
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<div>Username</div>
|
||||||
|
{{site.username}}
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<div>Password</div>
|
||||||
|
{{site.password}}
|
||||||
|
</div>
|
||||||
|
<div class="item item-divider">
|
||||||
|
Notes
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
{{site.notes}}
|
||||||
|
</div>
|
||||||
|
<div class="item item-divider">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</ion-content>
|
</ion-content>
|
||||||
</ion-modal-view>
|
</ion-modal-view>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<script src="app/services/servicesModule.js"></script>
|
<script src="app/services/servicesModule.js"></script>
|
||||||
<script src="app/services/backgroundService.js"></script>
|
<script src="app/services/backgroundService.js"></script>
|
||||||
<script src="app/services/loginService.js"></script>
|
<script src="app/services/loginService.js"></script>
|
||||||
|
<script src="app/services/cipherService.js"></script>
|
||||||
|
|
||||||
<script src="app/accounts/accountsModule.js"></script>
|
<script src="app/accounts/accountsModule.js"></script>
|
||||||
<script src="app/accounts/accountsLoginController.js"></script>
|
<script src="app/accounts/accountsLoginController.js"></script>
|
||||||
|
|||||||
Reference in New Issue
Block a user