mirror of
https://github.com/bitwarden/browser
synced 2025-12-12 06:13:38 +00:00
fix sync and vault listing bugs
This commit is contained in:
@@ -4,3 +4,4 @@ var apiService = new ApiService(tokenService);
|
|||||||
var userService = new UserService(tokenService, apiService);
|
var userService = new UserService(tokenService, apiService);
|
||||||
var siteService = new SiteService(cryptoService, userService, apiService);
|
var siteService = new SiteService(cryptoService, userService, apiService);
|
||||||
var folderService = new FolderService(cryptoService, userService, apiService);
|
var folderService = new FolderService(cryptoService, userService, apiService);
|
||||||
|
var syncService = new SyncService(siteService, folderService, userService, apiService);
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
"services/userService.js",
|
"services/userService.js",
|
||||||
"services/folderService.js",
|
"services/folderService.js",
|
||||||
"services/siteService.js",
|
"services/siteService.js",
|
||||||
|
"services/syncService.js",
|
||||||
"background.js"
|
"background.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
this.id = response.Id;
|
this.id = response.Id;
|
||||||
this.folderId = response.FolderId;
|
this.folderId = response.FolderId;
|
||||||
this.type = response.Type;
|
this.type = response.Type;
|
||||||
this.favorite = response.favorite;
|
this.favorite = response.Favorite;
|
||||||
this.data = response.Data;
|
this.data = response.Data;
|
||||||
this.revisionDate = response.RevisionDate;
|
this.revisionDate = response.RevisionDate;
|
||||||
};
|
};
|
||||||
@@ -21,7 +21,7 @@ var SiteResponse = function (response) {
|
|||||||
this.username = response.Username;
|
this.username = response.Username;
|
||||||
this.password = response.Password;
|
this.password = response.Password;
|
||||||
this.notes = response.Notes;
|
this.notes = response.Notes;
|
||||||
this.favorite = response.favorite;
|
this.favorite = response.Favorite;
|
||||||
this.revisionDate = response.RevisionDate;
|
this.revisionDate = response.RevisionDate;
|
||||||
|
|
||||||
if(response.Folder) {
|
if(response.Folder) {
|
||||||
@@ -47,7 +47,7 @@ var TokenResponse = function (response) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var ListResponse = function (data) {
|
var ListResponse = function (data) {
|
||||||
this.Data = data;
|
this.data = data;
|
||||||
};
|
};
|
||||||
|
|
||||||
var ErrorResponse = function (response) {
|
var ErrorResponse = function (response) {
|
||||||
|
|||||||
@@ -1,41 +1,43 @@
|
|||||||
var FolderData = function (response, userId) {
|
var FolderData = function (response, userId) {
|
||||||
var data = null;
|
this.id = response.id;
|
||||||
|
this.userId = userId;
|
||||||
|
|
||||||
if (response instanceof FolderResponse) {
|
if (response instanceof FolderResponse) {
|
||||||
data = response;
|
this.name = response.name;
|
||||||
}
|
}
|
||||||
else if (response instanceof CipherResponse) {
|
else if (response instanceof CipherResponse) {
|
||||||
data = response.Data;
|
this.name = response.data.Name;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw 'unsupported instance';
|
throw 'unsupported instance';
|
||||||
}
|
}
|
||||||
|
|
||||||
this.id = response.id;
|
|
||||||
this.userId = userId;
|
|
||||||
this.name = data.name;
|
|
||||||
this.revisionDate = response.revisionDate;
|
this.revisionDate = response.revisionDate;
|
||||||
};
|
};
|
||||||
|
|
||||||
var SiteData = function (response, userId) {
|
var SiteData = function (response, userId) {
|
||||||
var data = null;
|
this.id = response.id;
|
||||||
|
this.folderId = response.folderId;
|
||||||
|
this.userId = userId;
|
||||||
|
|
||||||
if (response instanceof SiteResponse) {
|
if (response instanceof SiteResponse) {
|
||||||
data = response;
|
this.name = response.name;
|
||||||
|
this.uri = response.uri;
|
||||||
|
this.username = response.username;
|
||||||
|
this.password = response.password;
|
||||||
|
this.notes = response.notes;
|
||||||
}
|
}
|
||||||
else if (response instanceof CipherResponse) {
|
else if (response instanceof CipherResponse) {
|
||||||
data = response.Data;
|
this.name = response.data.Name;
|
||||||
|
this.uri = response.data.Uri;
|
||||||
|
this.username = response.data.Username;
|
||||||
|
this.password = response.data.Password;
|
||||||
|
this.notes = response.notes = response.data.Notes;;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw 'unsupported instance';
|
throw 'unsupported instance';
|
||||||
}
|
}
|
||||||
|
|
||||||
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.favorite = response.favorite;
|
||||||
this.revisionDate = response.revisionDate;
|
this.revisionDate = response.revisionDate;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,4 +18,7 @@
|
|||||||
})
|
})
|
||||||
.factory('siteService', function () {
|
.factory('siteService', function () {
|
||||||
return chrome.extension.getBackgroundPage().siteService;
|
return chrome.extension.getBackgroundPage().siteService;
|
||||||
|
})
|
||||||
|
.factory('syncService', function () {
|
||||||
|
return chrome.extension.getBackgroundPage().syncService;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
angular
|
angular
|
||||||
.module('bit.settings')
|
.module('bit.settings')
|
||||||
|
|
||||||
.controller('settingsController', function ($scope, loginService, $state) {
|
.controller('settingsController', function ($scope, loginService, $state, syncService) {
|
||||||
|
$scope.sync = function () {
|
||||||
|
syncService.fullSync(function () {
|
||||||
|
alert('Sync done!');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
$scope.logOut = function (model) {
|
$scope.logOut = function (model) {
|
||||||
loginService.logOut(function () {
|
loginService.logOut(function () {
|
||||||
$state.go('login');
|
$state.go('login');
|
||||||
|
|||||||
@@ -1,6 +1,15 @@
|
|||||||
<ion-view view-title="Settings">
|
<ion-view view-title="Settings">
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<div class="list">
|
<div class="list">
|
||||||
|
<div class="item item-divider">
|
||||||
|
Manage
|
||||||
|
</div>
|
||||||
|
<a class="item" href="#">
|
||||||
|
Folders
|
||||||
|
</a>
|
||||||
|
<a class="item" ng-click="sync()">
|
||||||
|
Sync
|
||||||
|
</a>
|
||||||
<div class="item item-divider">
|
<div class="item item-divider">
|
||||||
Current Session
|
Current Session
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -7,14 +7,11 @@
|
|||||||
$scope.folders = [];
|
$scope.folders = [];
|
||||||
$scope.focusedSiteId = null;
|
$scope.focusedSiteId = null;
|
||||||
|
|
||||||
$scope.$on("$ionicView.enter", function (event, data) {
|
$scope.$on('$ionicView.enter', function (event, data) {
|
||||||
loadVault();
|
loadVault();
|
||||||
});
|
});
|
||||||
|
|
||||||
function loadVault() {
|
function loadVault() {
|
||||||
$scope.sites = [];
|
|
||||||
$scope.folders = [];
|
|
||||||
|
|
||||||
var decSites = [];
|
var decSites = [];
|
||||||
var decFolders = [{
|
var decFolders = [{
|
||||||
id: null,
|
id: null,
|
||||||
@@ -25,12 +22,12 @@
|
|||||||
siteService.getAll(function (sites) {
|
siteService.getAll(function (sites) {
|
||||||
var promises = [];
|
var promises = [];
|
||||||
|
|
||||||
for (var i = 0; i < folders.length; i++) {
|
for (var i = 1; i < folders.length; i++) {
|
||||||
decFolders.push({
|
decFolders.push({
|
||||||
id: folders[i].id
|
id: folders[i].id
|
||||||
});
|
});
|
||||||
|
|
||||||
var folderNamePromise = cipherService.decrypt(sites[i].name, i);
|
var folderNamePromise = cipherService.decrypt(folders[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;
|
||||||
@@ -65,6 +62,14 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$scope.folderSort = function (item) {
|
||||||
|
if (!item.id) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return item.name.toLowerCase();
|
||||||
|
};
|
||||||
|
|
||||||
$scope.viewSite = function (site) {
|
$scope.viewSite = function (site) {
|
||||||
$scope.focusedSiteId = site.id;
|
$scope.focusedSiteId = site.id;
|
||||||
$ionicModal.fromTemplateUrl('app/vault/views/vaultViewSite.html', {
|
$ionicModal.fromTemplateUrl('app/vault/views/vaultViewSite.html', {
|
||||||
@@ -111,7 +116,7 @@
|
|||||||
$scope.focusedSiteId = null;
|
$scope.focusedSiteId = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.$on('modal.hidden', function () {
|
$scope.$on('closeViewSite.hidden', function () {
|
||||||
console.log('modal hidden');
|
console.log('modal hidden');
|
||||||
loadVault();
|
loadVault();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -203,8 +203,8 @@ function initApiService() {
|
|||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
success: function (response) {
|
success: function (response) {
|
||||||
var data = [];
|
var data = [];
|
||||||
for (var i = 0; i < response.length; i++) {
|
for (var i = 0; i < response.Data.length; i++) {
|
||||||
data.push(new CipherResponse(response[i]));
|
data.push(new CipherResponse(response.Data[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
success(new ListResponse(data))
|
success(new ListResponse(data))
|
||||||
|
|||||||
@@ -15,39 +15,39 @@ function initSyncService() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
this.userService.isAuthenticated(function (isAuthenticated) {
|
self.userService.isAuthenticated(function (isAuthenticated) {
|
||||||
if (!isAuthenticated) {
|
if (!isAuthenticated) {
|
||||||
callback(false);
|
callback(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
syncStarted();
|
self.userService.getUserId(function (userId) {
|
||||||
var now = new Date();
|
syncStarted();
|
||||||
var ciphers = self.apiService.getCiphers(function (response) {
|
var now = new Date();
|
||||||
var sites = {};
|
var ciphers = self.apiService.getCiphers(function (response) {
|
||||||
var folders = {};
|
var sites = {};
|
||||||
|
var folders = {};
|
||||||
|
|
||||||
for (var i = 0; i < response.Data.lenth; i++) {
|
for (var i = 0; i < response.data.length; i++) {
|
||||||
var data = response.Data[i];
|
var data = response.data[i];
|
||||||
if (data.type === 1) {
|
if (data.type === 1) {
|
||||||
sites[data.id] = new SiteData(data);
|
sites[data.id] = new SiteData(data, userId);
|
||||||
|
}
|
||||||
|
else if (data.type === 0) {
|
||||||
|
folders[data.id] = new FolderData(data, userId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (data.type === 0) {
|
|
||||||
folders[data.id] = new FolderData(data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
folderService.replace(folders, function () {
|
self.folderService.replace(folders, function () {
|
||||||
siteService.replace(sites, function () {
|
self.siteService.replace(sites, function () {
|
||||||
setLastSync(now, function () {
|
self.setLastSync(now, function () {
|
||||||
syncCompleted(true);
|
syncCompleted(true);
|
||||||
callback(true);
|
callback(true);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
}, handleError);
|
||||||
|
});
|
||||||
}, handleError);
|
|
||||||
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -71,12 +71,12 @@ function initSyncService() {
|
|||||||
self.userService.getUserId(function (userId) {
|
self.userService.getUserId(function (userId) {
|
||||||
self.folderService.getAll(function (folders) {
|
self.folderService.getAll(function (folders) {
|
||||||
var localFolders = {};
|
var localFolders = {};
|
||||||
for (var i = 0; i < folders.lenth; i++) {
|
for (var i = 0; i < folders.length; i++) {
|
||||||
localFolders[folders[i].id] = folders[i];
|
localFolders[folders[i].id] = folders[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
var data = [];
|
var data = [];
|
||||||
for (var j = 0; j < serverFolders.lenth; j++) {
|
for (var j = 0; j < serverFolders.length; j++) {
|
||||||
var serverFolder = serverFolders[j];
|
var serverFolder = serverFolders[j];
|
||||||
var existingLocalFolder = localFolders[serverFolder.id];
|
var existingLocalFolder = localFolders[serverFolder.id];
|
||||||
|
|
||||||
@@ -105,12 +105,12 @@ function initSyncService() {
|
|||||||
self.userService.getUserId(function (userId) {
|
self.userService.getUserId(function (userId) {
|
||||||
self.siteService.getAll(function (sites) {
|
self.siteService.getAll(function (sites) {
|
||||||
var localSites = {};
|
var localSites = {};
|
||||||
for (var i = 0; i < sites.lenth; i++) {
|
for (var i = 0; i < sites.length; i++) {
|
||||||
localSites[sites[i].id] = sites[i];
|
localSites[sites[i].id] = sites[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
var data = [];
|
var data = [];
|
||||||
for (var j = 0; j < serverSites.lenth; j++) {
|
for (var j = 0; j < serverSites.length; j++) {
|
||||||
var serverSite = serverSites[j];
|
var serverSite = serverSites[j];
|
||||||
var existingLocalSite = localSites[serverSite.id];
|
var existingLocalSite = localSites[serverSite.id];
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ function initUserService() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var decodedToken = this.tokenService.decodeToken(token);
|
var decodedToken = this.tokenService.decodeToken(token);
|
||||||
var twoFactor = decodedToken.authmethod === "TwoFactor";
|
var twoFactor = decodedToken.authmethod === 'TwoFactor';
|
||||||
|
|
||||||
_userProfile = {
|
_userProfile = {
|
||||||
id: decodedToken.nameid,
|
id: decodedToken.nameid,
|
||||||
|
|||||||
Reference in New Issue
Block a user