diff --git a/src/app/services/importService.js b/src/app/services/importService.js index 7e718aaf49..482189d7c6 100644 --- a/src/app/services/importService.js +++ b/src/app/services/importService.js @@ -53,6 +53,9 @@ case 'pwsafexml': importPasswordSafeXml(file, success, error); break; + case 'dashlanecsv': + importDashlaneCsv(file, success, error); + break; default: error(); break; @@ -1014,7 +1017,7 @@ uri: null, password: null, username: null, - notes: note && note !== '' ? note : null, + notes: note && note !== '' ? note : null }; if (row.length > 2 && (row.length % 2) === 0) { @@ -1154,5 +1157,120 @@ }; } + function importDashlaneCsv(file, success, error) { + Papa.parse(file, { + encoding: 'UTF-8', + complete: function (results) { + parseCsvErrors(results); + + var folders = [], + sites = [], + siteRelationships = []; + + for (var j = 0; j < results.data.length; j++) { + var skip = false; + var row = results.data[j]; + if (!row.length || row.length === 1) { + continue; + } + + var site = { + name: row[0] && row[0] !== '' ? row[0] : '--', + favorite: false, + uri: null, + password: null, + username: null, + notes: null + }; + + if (row.length === 2) { + site.uri = trimUri(row[1]); + } + else if (row.length === 3) { + site.uri = trimUri(row[1]); + site.username = row[2]; + } + else if (row.length === 4) { + if (row[2] === '' && row[3] === '') { + site.username = row[1]; + site.notes = row[2] + '\n' + row[3]; + } + else { + site.username = row[2]; + site.notes = row[1] + '\n' + row[3]; + } + } + else if (row.length === 5) { + site.uri = trimUri(row[1]); + site.username = row[2]; + site.password = row[3]; + site.notes = row[4]; + } + else if (row.length === 6) { + if (row[2] === '') { + site.username = row[3]; + site.notes = row[5]; + } + else { + site.username = row[2]; + site.notes = row[3] + '\n' + row[5]; + } + + site.uri = trimUri(row[1]); + site.password = row[4]; + } + else if (row.length === 7) { + if (row[2] === '') { + site.username = row[3]; + site.notes = row[4] + '\n' + row[6]; + } + else { + site.username = row[2]; + site.notes = row[3] + '\n' + row[4] + '\n' + row[6]; + } + + site.uri = trimUri(row[1]); + site.password = row[5]; + } + else { + site.notes = ''; + for (var i = 1; i < row.length; i++) { + site.notes = site.notes + row[i] + '\n'; + if (row[i] === 'NO_TYPE') { + skip = true; + break; + } + } + } + + if (site.uri && site.uri.indexOf('.') >= 0) { + site.uri = 'http://' + site.uri.toLowerCase().trim(); + } + + if (skip) { + continue; + } + + if (site.username === '') { + site.username = null; + } + if (site.password === '') { + site.password = null; + } + if (site.notes === '') { + site.notes = null; + } + if (site.uri === '') { + site.uri = null; + } + + sites.push(site); + } + + success(folders, sites, siteRelationships); + } + }); + } + return _service; }); diff --git a/src/app/tools/views/toolsImport.html b/src/app/tools/views/toolsImport.html index d548cdd600..c27f94d308 100644 --- a/src/app/tools/views/toolsImport.html +++ b/src/app/tools/views/toolsImport.html @@ -15,6 +15,7 @@ +