mirror of
https://github.com/nextcloud/passman.git
synced 2024-11-15 12:32:46 +08:00
a40929d337
* Add compromised field to new credentials import Signed-off-by: Oliv4945 <oliv4945@gmail.com> * Detailed Keepass export instrucions Signed-off-by: Oliv4945 <oliv4945@gmail.com>
151 lines
3.8 KiB
JavaScript
151 lines
3.8 KiB
JavaScript
/**
|
|
* Nextcloud - passman
|
|
*
|
|
* @copyright Copyright (c) 2016, Sander Brand (brantje@gmail.com)
|
|
* @copyright Copyright (c) 2016, Marcos Zuriaga Miguel (wolfi@wolfi.es)
|
|
* @license GNU AGPL version 3 or any later version
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
var PassmanImporter = {};
|
|
(function(window, $, PassmanImporter) {
|
|
'use strict';
|
|
|
|
|
|
PassmanImporter.parseRow_ = function(row) {
|
|
// Strip leading quote.
|
|
row = row.trim();
|
|
var isQuoted = false;
|
|
if (row.charAt(0) === '"') {
|
|
row = row.substring(1);
|
|
isQuoted = true;
|
|
}
|
|
if (row.charAt(row.length - 2) === '"') {
|
|
row = row.substring(0, row.length - 2);
|
|
isQuoted = true;
|
|
}
|
|
// Strip trailing quote. There seems to be a character between the last quote
|
|
// and the line ending, hence 2 instead of 1.
|
|
if(isQuoted === true) {
|
|
row = row.split('","');
|
|
} else {
|
|
row = row.split(',');
|
|
}
|
|
return row;
|
|
};
|
|
PassmanImporter.htmlDecode = function(input){
|
|
var e = document.createElement('div');
|
|
e.innerHTML = input;
|
|
return e.childNodes[0].nodeValue;
|
|
};
|
|
PassmanImporter.toObject_ = function(headings, row) {
|
|
var result = {};
|
|
for (var i = 0, ii = row.length; i < ii; i++) {
|
|
if(headings[i]) {
|
|
headings[i] = headings[i].replace(',', '_')
|
|
.toLowerCase().replace(' ', '_')
|
|
.replace('(', '').replace(')', '')
|
|
.replace('"', '');
|
|
result[headings[i]] = row[i];
|
|
} else {
|
|
result[ii] = row[i];
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
|
|
PassmanImporter.join_ = function(arr, sep) {
|
|
var parts = [];
|
|
for (var i = 0, ii = arr.length; i < ii; i++) {
|
|
if(arr[i]){
|
|
parts.push(arr[i]);
|
|
}
|
|
}
|
|
return parts.join(sep);
|
|
};
|
|
|
|
PassmanImporter.newCredential = function () {
|
|
var credential = {
|
|
'credential_id': null,
|
|
'guid': null,
|
|
'vault_id': null,
|
|
'label': null,
|
|
'description': null,
|
|
'created': null,
|
|
'changed': null,
|
|
'tags': [],
|
|
'email': null,
|
|
'username': null,
|
|
'password': null,
|
|
'url': null,
|
|
'favicon': null,
|
|
'renew_interval': null,
|
|
'expire_time': 0,
|
|
'delete_time': 0,
|
|
'files': [],
|
|
'custom_fields': [],
|
|
'otp': {},
|
|
'hidden': false,
|
|
'compromised': false,
|
|
};
|
|
return credential;
|
|
};
|
|
|
|
/**
|
|
* Read a csv
|
|
* @param csv the csv file contents
|
|
* @param hasHeadings does csv has headings? (default true)
|
|
*/
|
|
PassmanImporter.readCsv = function( csv, hasHeadings ){
|
|
hasHeadings = (hasHeadings === undefined) ? true : hasHeadings;
|
|
var lines = [];
|
|
/** global: Papa */
|
|
Papa.parse(csv, {
|
|
complete: function(results) {
|
|
if(results.data) {
|
|
var headings = (hasHeadings) ? results.data[0] : null;
|
|
var start = (hasHeadings) ? 1 : 0;
|
|
for(var i = start; i < results.data.length; i++){
|
|
var _row = (hasHeadings) ? PassmanImporter.toObject_(headings, results.data[i]) : results.data[i];
|
|
lines.push(_row);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
return lines;
|
|
};
|
|
|
|
PassmanImporter.readJson = function (string){
|
|
return JSON.parse(string);
|
|
};
|
|
})(window, $, PassmanImporter);
|
|
|
|
|
|
String.prototype.replaceAll = function(search, replacement) {
|
|
var target = this;
|
|
return target.replace(new RegExp(search, 'g'), replacement);
|
|
};
|
|
|
|
Array.prototype.clean = function(deleteValue) {
|
|
for (var i = 0; i < this.length; i++) {
|
|
if (this[i] === deleteValue) {
|
|
this.splice(i, 1);
|
|
i--;
|
|
}
|
|
}
|
|
return this;
|
|
};
|