mirror of
https://github.com/bitwarden/browser.git
synced 2024-07-07 12:25:46 +02:00
handle lastpass import when users try to upload html file instead of csv
This commit is contained in:
parent
400826baf7
commit
004ddb1e75
|
@ -82,60 +82,100 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function importLastPass(file, success, error) {
|
function importLastPass(file, success, error) {
|
||||||
Papa.parse(file, {
|
if (file.type === 'text/html') {
|
||||||
header: true,
|
var reader = new FileReader();
|
||||||
complete: function (results) {
|
reader.readAsText(file, 'utf-8');
|
||||||
var folders = [],
|
reader.onload = function (evt) {
|
||||||
sites = [],
|
var doc = $(evt.target.result);
|
||||||
siteRelationships = [];
|
var pre = doc.find('pre');
|
||||||
|
|
||||||
angular.forEach(results.data, function (value, key) {
|
if (pre.length === 1) {
|
||||||
if (!value.url || value.url === '') {
|
var csv = pre.text().trim();
|
||||||
return;
|
var results = Papa.parse(csv, { header: true });
|
||||||
}
|
parseData(results.data);
|
||||||
|
}
|
||||||
var folderIndex = folders.length,
|
else {
|
||||||
siteIndex = sites.length,
|
var foundPre = false;
|
||||||
hasFolder = value.grouping && value.grouping !== '' && value.grouping !== '(none)',
|
for (var i = 0; i < doc.length; i++) {
|
||||||
addFolder = hasFolder;
|
if (doc[i].tagName === 'PRE') {
|
||||||
|
foundPre = true;
|
||||||
if (hasFolder) {
|
var csv = doc[i].outerText.trim();
|
||||||
for (var i = 0; i < folders.length; i++) {
|
var results = Papa.parse(csv, { header: true });
|
||||||
if (folders[i].name === value.grouping) {
|
parseData(results.data);
|
||||||
addFolder = false;
|
break;
|
||||||
folderIndex = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sites.push({
|
if (!foundPre) {
|
||||||
favorite: value.fav === '1',
|
error();
|
||||||
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) {
|
reader.onerror = function (evt) {
|
||||||
var relationship = {
|
error();
|
||||||
key: siteIndex,
|
};
|
||||||
value: folderIndex
|
}
|
||||||
};
|
else {
|
||||||
siteRelationships.push(relationship);
|
Papa.parse(file, {
|
||||||
|
header: true,
|
||||||
|
complete: function (results) {
|
||||||
|
parseData(results.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseData(data) {
|
||||||
|
var folders = [],
|
||||||
|
sites = [],
|
||||||
|
siteRelationships = [];
|
||||||
|
|
||||||
|
angular.forEach(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({
|
||||||
|
favorite: value.fav === '1',
|
||||||
|
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
|
||||||
});
|
});
|
||||||
|
|
||||||
success(folders, sites, siteRelationships);
|
if (addFolder) {
|
||||||
}
|
folders.push({
|
||||||
});
|
name: value.grouping
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasFolder) {
|
||||||
|
var relationship = {
|
||||||
|
key: siteIndex,
|
||||||
|
value: folderIndex
|
||||||
|
};
|
||||||
|
siteRelationships.push(relationship);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
success(folders, sites, siteRelationships);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function importSafeInCloudCsv(file, success, error) {
|
function importSafeInCloudCsv(file, success, error) {
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
}, function () {
|
}, function () {
|
||||||
$uibModalInstance.dismiss('cancel');
|
$uibModalInstance.dismiss('cancel');
|
||||||
$state.go('backend.vault').then(function () {
|
$state.go('backend.vault').then(function () {
|
||||||
$analytics.eventTrack('Imported Data', { label: model.source });
|
$analytics.eventTrack('Imported Data', { label: $scope.model.source });
|
||||||
toastr.success('Data has been successfully imported into your vault.', 'Import Success');
|
toastr.success('Data has been successfully imported into your vault.', 'Import Success');
|
||||||
});
|
});
|
||||||
}, importError);
|
}, importError);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user