2016-10-19 23:44:19 +08:00
|
|
|
/**
|
|
|
|
* 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/>.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2016-10-08 19:26:48 +08:00
|
|
|
// Importers should always start with this
|
2016-10-08 20:00:07 +08:00
|
|
|
if (!window['PassmanExporter']) {
|
2017-06-05 01:07:10 +08:00
|
|
|
var PassmanExporter = {
|
|
|
|
getCredentialsWithFiles: function(credentials, FileService, EncryptService) {
|
|
|
|
var t = {
|
|
|
|
cred: credentials,
|
|
|
|
FS: FileService,
|
|
|
|
ES: EncryptService
|
2017-07-01 22:05:32 +08:00
|
|
|
};
|
|
|
|
/** global: C_Promise */
|
2017-06-05 01:07:10 +08:00
|
|
|
return new C_Promise(function() {
|
2017-07-01 22:05:32 +08:00
|
|
|
var _this = this.parent;
|
2017-06-05 01:07:10 +08:00
|
|
|
var credentials = _this.cred;
|
|
|
|
this.parent.total = 0;
|
|
|
|
this.parent.finished = 0;
|
|
|
|
this.parent.fileGUID_cred = [];
|
|
|
|
this.parent.files = [];
|
|
|
|
this.parent.step = (function(file) {
|
|
|
|
this.parent.finished ++;
|
|
|
|
this.call_progress({
|
|
|
|
total: this.parent.total,
|
|
|
|
finished: this.parent.finished
|
|
|
|
});
|
|
|
|
|
|
|
|
var dta = this.parent.fileGUID_cred[file.guid];
|
|
|
|
|
|
|
|
file.filename = this.parent.ES.decryptString(file.filename, this.parent.cred[dta.cred_pos].vault_key);
|
|
|
|
file.file_data = this.parent.ES.decryptString(file.file_data, this.parent.cred[dta.cred_pos].vault_key);
|
|
|
|
|
|
|
|
// Files and custom_fields have different field structure
|
|
|
|
if (dta.on === 'files') {
|
|
|
|
this.parent.cred[dta.cred_pos][dta.on][dta.at] = file;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
this.parent.cred[dta.cred_pos][dta.on][dta.at].value = file;
|
|
|
|
}
|
|
|
|
|
|
|
|
// We have finished downloading everything, so let's hand over job to somewhere else!
|
|
|
|
if (this.parent.total === this.parent.finished) {
|
|
|
|
this.call_then(this.parent.cred);
|
|
|
|
}
|
|
|
|
}).bind(this);
|
|
|
|
|
|
|
|
for (var i = 0; i < credentials.length; i++) {
|
|
|
|
|
|
|
|
var item = credentials[i];
|
|
|
|
|
|
|
|
// Custom fields
|
2017-07-01 22:05:32 +08:00
|
|
|
for (c = 0; c < item.custom_fields.length; c++) {
|
2017-06-05 01:07:10 +08:00
|
|
|
var cf = item.custom_fields[c];
|
|
|
|
if (cf.field_type === 'file') {
|
|
|
|
this.parent.total ++;
|
|
|
|
this.parent.fileGUID_cred[cf.value.guid] = {
|
|
|
|
cred_pos: i,
|
|
|
|
on: 'custom_fields',
|
|
|
|
at: c
|
|
|
|
};
|
2016-10-08 19:26:48 +08:00
|
|
|
|
2017-06-05 01:07:10 +08:00
|
|
|
this.parent.FS.getFile(cf.value).then((function(data){
|
|
|
|
this.parent.step(data);
|
|
|
|
}).bind(this));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Also get all files
|
|
|
|
for (var c = 0; c < item.files.length; c++) {
|
|
|
|
this.parent.total ++;
|
|
|
|
this.parent.fileGUID_cred[item.files[c].guid] = {
|
|
|
|
cred_pos: i,
|
|
|
|
on: 'files',
|
|
|
|
at: c
|
|
|
|
};
|
|
|
|
|
|
|
|
this.parent.FS.getFile(item.files[c]).then((function(data){
|
|
|
|
this.parent.step(data);
|
|
|
|
}).bind(this));
|
|
|
|
}
|
|
|
|
}
|
2017-09-30 20:49:21 +08:00
|
|
|
|
|
|
|
// We have finished downloading everything, so let's hand over job to somewhere else!
|
|
|
|
if (this.parent.total === 0) {
|
|
|
|
this.call_then(this.parent.cred);
|
|
|
|
}
|
2017-06-05 01:07:10 +08:00
|
|
|
}, t);
|
|
|
|
}
|
2017-07-01 22:05:32 +08:00
|
|
|
};
|
2017-09-30 20:49:21 +08:00
|
|
|
}
|