1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-13 14:53:33 +00:00

tuneing up mdoels and services for site add

This commit is contained in:
Kyle Spearrin
2016-09-05 01:49:44 -04:00
parent cc67d12c57
commit abb6f37af2
8 changed files with 141 additions and 114 deletions

View File

@@ -19,6 +19,8 @@
"node_modules/sjcl/core/bitArray.js",
"models/api/requestModels.js",
"models/api/responseModels.js",
"models/dataModels.js",
"models/domainModels.js",
"services/cryptoService.js",
"services/cryptoService.js",
"services/tokenService.js",

View File

@@ -13,7 +13,7 @@ var CipherString = function (encryptedString) {
CipherString.prototype.decrypt = function (callback) {
if (!_decryptedValue) {
var cryptoService = chrome.extension.getBackgroundPage().cryptoService;
_decryptedValue = cryptoService.Decrypt(this);
_decryptedValue = cryptoService.decrypt(this);
}
return _decryptedValue;
@@ -39,7 +39,7 @@ var Site = function (obj, alreadyEncrypted) {
this.notes = new CipherString(obj.notes);
}
this.favorite = new obj.favorite;
this.favorite = obj.favorite ? true : false;
};
var Folder = function (obj, alreadyEncrypted) {

View File

@@ -1,15 +1,15 @@
angular
.module('bit.services')
.factory('loginService', function (cryptoService, apiService, apiService, userService, tokenService, $q) {
.factory('loginService', function (cryptoService, apiService, userService, tokenService, $q) {
var _service = {};
_service.logIn = function (email, masterPassword) {
var key = cryptoService.makeKey(masterPassword, email);
var deferred = $q.defer();
cryptoService.hashPassword(masterPassword, key, function (hashedPassword) {
var request = new TokenRequest(email, hashedPassword);
var deferred = $q.defer();
apiService.postToken(request, function (response) {
if (!response || !response.token) {
return;
@@ -25,9 +25,8 @@
}, function (error) {
deferred.reject(error);
});
return deferred.promise;
});
return deferred.promise;
};
_service.logInTwoFactor = function (code, provider) {

View File

@@ -7,8 +7,7 @@
};
$scope.createSite = function (model) {
var newModel = model;
encryptSite(newModel, function (siteModel) {
encryptSite(model, function (siteModel) {
var site = new Site(siteModel, true);
siteService.save(site, function () {
$scope.close();
@@ -20,16 +19,17 @@
$scope.parentScope.closeAddSite();
};
function encryptSite(siteModel, callback) {
cryptoService.encrypt(siteModel.name, function (nameCipherString) {
function encryptSite(model, callback) {
var siteModel = {};
cryptoService.encrypt(model.name, function (nameCipherString) {
siteModel.name = nameCipherString;
cryptoService.encrypt(siteModel.uri, function (uriCipherString) {
cryptoService.encrypt(model.uri, function (uriCipherString) {
siteModel.uri = uriCipherString;
cryptoService.encrypt(siteModel.username, function (usernameCipherString) {
cryptoService.encrypt(model.username, function (usernameCipherString) {
siteModel.username = usernameCipherString;
cryptoService.encrypt(siteModel.password, function (passwordCipherString) {
cryptoService.encrypt(model.password, function (passwordCipherString) {
siteModel.password = passwordCipherString;
cryptoService.encrypt(siteModel.notes, function (notesCipherString) {
cryptoService.encrypt(model.notes, function (notesCipherString) {
siteModel.notes = notesCipherString;
callback(siteModel);
});

View File

@@ -15,7 +15,7 @@
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">URI</span>
<input type="url" ng-model="site.uri">
<input type="text" ng-model="site.uri">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">Username</span>

View File

@@ -7,6 +7,8 @@ function initCryptoService() {
_b64Key,
_aes;
sjcl.beware["CBC mode is dangerous because it doesn't protect message integrity."]();
CryptoService.prototype.setKey = function (key, callback) {
if (!callback || typeof callback !== 'function') {
throw 'callback function required';
@@ -101,6 +103,10 @@ function initCryptoService() {
throw 'callback function required';
}
if (plaintextValue === null || plaintextValue === undefined) {
callback(null);
}
this.getKey(false, function (key) {
if (!key) {
throw 'Encryption key unavailable.';
@@ -121,11 +127,15 @@ function initCryptoService() {
});
};
CryptoService.prototype.decrypt = function (cipherStrin, callback) {
CryptoService.prototype.decrypt = function (cipherString, callback) {
if (!callback || typeof callback !== 'function') {
throw 'callback function required';
}
if (cipherString === null || cipherString === undefined) {
throw 'cannot decrypt nothing';
}
this.getAes(function (aes) {
if (!aes) {
throw 'AES encryption unavailable.';

View File

@@ -7,14 +7,14 @@
};
function initFolderService() {
this.userService.getUserId(function (userId) {
var foldersKey = 'folders_' + userId;
FolderService.prototype.get = function (id, callback) {
if (!callback || typeof callback !== 'function') {
throw 'callback function required';
}
this.userService.getUserId(function (userId) {
var foldersKey = 'folders_' + userId;
chrome.storage.local.get(foldersKey, function (obj) {
var folders = obj[foldersKey];
if (id in folders) {
@@ -24,6 +24,7 @@ function initFolderService() {
callback(null);
});
});
};
FolderService.prototype.getAll = function (callback) {
@@ -31,6 +32,9 @@ function initFolderService() {
throw 'callback function required';
}
this.userService.getUserId(function (userId) {
var foldersKey = 'folders_' + userId;
chrome.storage.local.get(foldersKey, function (obj) {
var folders = obj[foldersKey];
var response = [];
@@ -41,10 +45,10 @@ function initFolderService() {
callback(response);
});
});
};
function handleError() {
// TODO: check for unauth or forbidden and logout
}
});
};

View File

@@ -7,14 +7,14 @@
};
function initSiteService() {
this.userService.getUserId(function (userId) {
var sitesKey = 'sites_' + userId;
SiteService.prototype.get = function (id, callback) {
if (!callback || typeof callback !== 'function') {
throw 'callback function required';
}
this.userService.getUserId(function (userId) {
var sitesKey = 'sites_' + userId;
chrome.storage.local.get(sitesKey, function (obj) {
var sites = obj[sitesKey];
if (id in sites) {
@@ -24,6 +24,7 @@ function initSiteService() {
callback(null);
});
});
};
SiteService.prototype.getAll = function (callback) {
@@ -31,15 +32,23 @@ function initSiteService() {
throw 'callback function required';
}
this.userService.getUserId(function (userId) {
var sitesKey = 'sites_' + userId;
chrome.storage.local.get(sitesKey, function (obj) {
var sites = obj[sitesKey];
var response = [];
for (var id in sites) {
if (!id) {
continue;
}
response.push(new Site(sites[id]));
}
callback(response);
});
});
};
SiteService.prototype.save = function (site, callback) {
@@ -47,7 +56,7 @@ function initSiteService() {
throw 'callback function required';
}
var newRecord = site.id === null,
var newRecord = site.id ? false : true,
self = this;
var request = new SiteRequest(site);
@@ -59,18 +68,20 @@ function initSiteService() {
}
function apiSuccess(response) {
site.id = response.id;
userService.getUserId(function (userId) {
var data = new SiteData(response, userId);
var sitesKey = 'sites_' + userId;
chrome.storage.local.get(sitesKey, function (obj) {
var sites = obj[sitesKey];
if (!newRecord && site.id in sites) {
if (!sites) {
sites = {};
}
sites[site.id] = data;
}
else {
sites.push(data);
site.id = data.id;
}
obj[sitesKey] = sites;
chrome.storage.local.set(obj, function () {
@@ -90,13 +101,15 @@ function initSiteService() {
function apiSuccess(response) {
userService.getUserId(function (userId) {
var sitesKey = 'sites_' + userId;
chrome.storage.local.get(sitesKey, function (obj) {
var sites = obj[sitesKey];
if (!sites) {
sites = {};
}
if (id in sites) {
var index = sites.indexOf(sites[id]);
sites.splice(index, 1);
obj[sitesKey] = sites;
delete obj[sitesKey];
chrome.storage.local.set(obj, function () {
callback();
});
@@ -112,5 +125,4 @@ function initSiteService() {
function handleError() {
// TODO: check for unauth or forbidden and logout
}
});
};