mirror of
https://github.com/bitwarden/browser
synced 2025-12-16 08:13:42 +00:00
created import service. added local importing.
This commit is contained in:
@@ -24,6 +24,7 @@
|
|||||||
/// <reference path="app/services/authService.js" />
|
/// <reference path="app/services/authService.js" />
|
||||||
/// <reference path="app/services/cipherService.js" />
|
/// <reference path="app/services/cipherService.js" />
|
||||||
/// <reference path="app/services/cryptoService.js" />
|
/// <reference path="app/services/cryptoService.js" />
|
||||||
|
/// <reference path="app/services/importservice.js" />
|
||||||
/// <reference path="app/services/passwordservice.js" />
|
/// <reference path="app/services/passwordservice.js" />
|
||||||
/// <reference path="app/services/servicesModule.js" />
|
/// <reference path="app/services/servicesModule.js" />
|
||||||
/// <reference path="app/services/tokenService.js" />
|
/// <reference path="app/services/tokenService.js" />
|
||||||
|
|||||||
134
src/Vault/wwwroot/app/services/importService.js
Normal file
134
src/Vault/wwwroot/app/services/importService.js
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
angular
|
||||||
|
.module('bit.services')
|
||||||
|
|
||||||
|
.factory('importService', function () {
|
||||||
|
var _service = {};
|
||||||
|
|
||||||
|
_service.import = function (source, file, success, error) {
|
||||||
|
switch (source) {
|
||||||
|
case 'local':
|
||||||
|
importLocal(file, success, error);
|
||||||
|
break;
|
||||||
|
case 'lastpass':
|
||||||
|
importLastPass(file, success, error);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
error();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function importLocal(file, success, error) {
|
||||||
|
Papa.parse(file, {
|
||||||
|
header: true,
|
||||||
|
complete: function (results) {
|
||||||
|
var folders = [],
|
||||||
|
sites = [],
|
||||||
|
siteRelationships = [];
|
||||||
|
|
||||||
|
angular.forEach(results.data, function (value, key) {
|
||||||
|
if (!value.uri || value.uri === '') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var folderIndex = folders.length,
|
||||||
|
siteIndex = sites.length,
|
||||||
|
hasFolder = value.folder && value.folder !== '',
|
||||||
|
addFolder = hasFolder;
|
||||||
|
|
||||||
|
if (hasFolder) {
|
||||||
|
for (var i = 0; i < folders.length; i++) {
|
||||||
|
if (folders[i].name == value.folder) {
|
||||||
|
addFolder = false;
|
||||||
|
folderIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sites.push({
|
||||||
|
uri: value.uri,
|
||||||
|
username: value.username && value.username !== '' ? value.username : null,
|
||||||
|
password: value.password,
|
||||||
|
notes: value.notes && value.notes !== '' ? value.notes : null,
|
||||||
|
name: value.name
|
||||||
|
});
|
||||||
|
|
||||||
|
if (addFolder) {
|
||||||
|
folders.push({
|
||||||
|
name: value.folder
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasFolder) {
|
||||||
|
var relationship = {
|
||||||
|
key: siteIndex,
|
||||||
|
value: folderIndex
|
||||||
|
};
|
||||||
|
siteRelationships.push(relationship);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
success(folders, sites, siteRelationships);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function importLastPass(file, success, error) {
|
||||||
|
Papa.parse(file, {
|
||||||
|
header: true,
|
||||||
|
complete: function (results) {
|
||||||
|
var folders = [],
|
||||||
|
sites = [],
|
||||||
|
siteRelationships = [];
|
||||||
|
|
||||||
|
angular.forEach(results.data, function (value, key) {
|
||||||
|
if (!value.url || value.url === '') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var folderIndex = folders.length,
|
||||||
|
siteIndex = sites.length,
|
||||||
|
hasFolder = value.grouping && value.grouping !== '' && value.grouping != '(none)',
|
||||||
|
addFolder = hasFolder;
|
||||||
|
|
||||||
|
if (hasFolder) {
|
||||||
|
for (var i = 0; i < folders.length; i++) {
|
||||||
|
if (folders[i].name == value.grouping) {
|
||||||
|
addFolder = false;
|
||||||
|
folderIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sites.push({
|
||||||
|
uri: value.url,
|
||||||
|
username: value.username && value.username !== '' ? value.username : null,
|
||||||
|
password: value.password,
|
||||||
|
notes: value.extra && value.extra !== '' ? value.extra : null,
|
||||||
|
name: value.name
|
||||||
|
});
|
||||||
|
|
||||||
|
if (addFolder) {
|
||||||
|
folders.push({
|
||||||
|
name: value.grouping
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasFolder) {
|
||||||
|
var relationship = {
|
||||||
|
key: siteIndex,
|
||||||
|
value: folderIndex
|
||||||
|
};
|
||||||
|
siteRelationships.push(relationship);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
success(folders, sites, siteRelationships);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return _service;
|
||||||
|
});
|
||||||
@@ -58,6 +58,5 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
return _service;
|
return _service;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" ng-click="close()" aria-label="Close"><span aria-hidden="true">×</span></button>
|
<button type="button" class="close" ng-click="close()" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||||
<h4 class="modal-title" id="deleteAccountModelLabel"><i class="fa fa-ban"></i> Delete Account</h4>
|
<h4 class="modal-title" id="deleteAccountModelLabel"><i class="fa fa-trash"></i> Delete Account</h4>
|
||||||
</div>
|
</div>
|
||||||
<form name="deleteAccountForm" ng-submit="deleteAccountForm.$valid && submit(model)" api-form="submitPromise">
|
<form name="deleteAccountForm" ng-submit="deleteAccountForm.$valid && submit(model)" api-form="submitPromise">
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
|
|||||||
@@ -1,83 +1,16 @@
|
|||||||
angular
|
angular
|
||||||
.module('bit.tools')
|
.module('bit.tools')
|
||||||
|
|
||||||
.controller('toolsImportController', function ($scope, $state, apiService, $uibModalInstance, cryptoService, cipherService, toastr) {
|
.controller('toolsImportController', function ($scope, $state, apiService, $uibModalInstance, cryptoService, cipherService, toastr, importService) {
|
||||||
$scope.model = { source: 'local' };
|
$scope.model = { source: 'local' };
|
||||||
|
|
||||||
$scope.import = function (model) {
|
$scope.import = function (model) {
|
||||||
$scope.processing = true;
|
$scope.processing = true;
|
||||||
var file = document.getElementById('file').files[0];
|
var file = document.getElementById('file').files[0];
|
||||||
|
importService.import(model.source, file, importSuccess, importError);
|
||||||
// local
|
|
||||||
if (model.source == 'local') {
|
|
||||||
Papa.parse(file, {
|
|
||||||
header: true,
|
|
||||||
complete: function (results) {
|
|
||||||
console.log(results);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} // lastpass
|
|
||||||
else if (model.source == 'lastpass') {
|
|
||||||
Papa.parse(file, {
|
|
||||||
header: true,
|
|
||||||
complete: function (results) {
|
|
||||||
var folders = [],
|
|
||||||
sites = [],
|
|
||||||
siteRelationships = [];
|
|
||||||
|
|
||||||
angular.forEach(results.data, function (value, key) {
|
|
||||||
if (!value.url || value.url === '') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var folderIndex = folders.length,
|
|
||||||
siteIndex = sites.length,
|
|
||||||
hasFolder = value.grouping && value.grouping !== '' && value.grouping != '(none)',
|
|
||||||
addFolder = hasFolder;
|
|
||||||
|
|
||||||
if (hasFolder) {
|
|
||||||
for (var i = 0; i < folders.length; i++) {
|
|
||||||
if (folders[i].name == value.grouping) {
|
|
||||||
addFolder = false;
|
|
||||||
folderIndex = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sites.push({
|
|
||||||
uri: value.url,
|
|
||||||
username: value.username && value.username !== '' ? value.username : null,
|
|
||||||
password: value.password,
|
|
||||||
notes: value.extra && value.extra !== '' ? value.extra : null,
|
|
||||||
name: value.name
|
|
||||||
});
|
|
||||||
|
|
||||||
if (addFolder) {
|
|
||||||
folders.push({
|
|
||||||
name: value.grouping
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasFolder) {
|
|
||||||
var relationship = {
|
|
||||||
key: siteIndex,
|
|
||||||
value: folderIndex
|
|
||||||
};
|
|
||||||
siteRelationships.push(relationship);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
doImport(folders, sites, siteRelationships);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// source not supported
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function doImport(folders, sites, siteRelationships) {
|
function importSuccess(folders, sites, siteRelationships) {
|
||||||
apiService.accounts.import({
|
apiService.accounts.import({
|
||||||
folders: cipherService.encryptFolders(folders, cryptoService.getKey()),
|
folders: cipherService.encryptFolders(folders, cryptoService.getKey()),
|
||||||
sites: cipherService.encryptSites(sites, cryptoService.getKey()),
|
sites: cipherService.encryptSites(sites, cryptoService.getKey()),
|
||||||
@@ -87,10 +20,12 @@
|
|||||||
$state.go('backend.vault').then(function () {
|
$state.go('backend.vault').then(function () {
|
||||||
toastr.success('Data has been successfully imported into your vault.', 'Import Success');
|
toastr.success('Data has been successfully imported into your vault.', 'Import Success');
|
||||||
});
|
});
|
||||||
}, function () {
|
}, importError);
|
||||||
$uibModalInstance.dismiss('cancel');
|
}
|
||||||
toastr.error('Something went wrong. Try again.', 'Oh No!');
|
|
||||||
});
|
function importError() {
|
||||||
|
$uibModalInstance.dismiss('cancel');
|
||||||
|
toastr.error('Something went wrong. Try again.', 'Oh No!');
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.close = function () {
|
$scope.close = function () {
|
||||||
|
|||||||
@@ -87,6 +87,7 @@
|
|||||||
<script src="app/services/cipherService.js"></script>
|
<script src="app/services/cipherService.js"></script>
|
||||||
<script src="app/services/validationService.js"></script>
|
<script src="app/services/validationService.js"></script>
|
||||||
<script src="app/services/passwordService.js"></script>
|
<script src="app/services/passwordService.js"></script>
|
||||||
|
<script src="app/services/importService.js"></script>
|
||||||
|
|
||||||
<script src="app/global/globalModule.js"></script>
|
<script src="app/global/globalModule.js"></script>
|
||||||
<script src="app/global/mainController.js"></script>
|
<script src="app/global/mainController.js"></script>
|
||||||
|
|||||||
Reference in New Issue
Block a user