Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/passman.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorbinsky <timo@binsky.org>2021-03-24 02:05:07 +0300
committerbinsky <timo@binsky.org>2021-03-24 02:37:01 +0300
commitd4c4e4fcc056bcae42cdcbe76af460a9c45c4508 (patch)
treeeb153ffd3a7ee910f1bd5d8d800d3dc1932e71e2 /js
parent5eece67ea690e37da13c9e61202943ddcf48e595 (diff)
add file import and fix custom fields import for passman json file import
Diffstat (limited to 'js')
-rw-r--r--js/app/controllers/import.js50
-rw-r--r--js/importers/import-main.js1
-rw-r--r--js/importers/importer-passmanjson.js79
3 files changed, 95 insertions, 35 deletions
diff --git a/js/app/controllers/import.js b/js/app/controllers/import.js
index aea8c5d7..7014e9ea 100644
--- a/js/app/controllers/import.js
+++ b/js/app/controllers/import.js
@@ -31,7 +31,7 @@
* Controller of the passmanApp
*/
angular.module('passmanApp')
- .controller('ImportCtrl', ['$scope', '$window', 'CredentialService', 'VaultService', '$translate', function ($scope, $window, CredentialService, VaultService, $translate) {
+ .controller('ImportCtrl', ['$scope', '$window', 'CredentialService', 'VaultService', 'FileService', 'EncryptService', '$translate', function ($scope, $window, CredentialService, VaultService, FileService, EncryptService, $translate) {
$scope.available_importers = [];
$scope.active_vault = VaultService.getActiveVault();
@@ -124,29 +124,37 @@
$scope.import_progress = 0;
$scope.file_read_percent = 0;
if (file_data) {
- $window.PassmanImporter[$scope.selectedImporter.id]
- .readFile(file_data)
- .then(function (parseddata) {
- parsed_data = parseddata;
- $scope.file_read_progress = {
- percent: 100,
- loaded: parsed_data.length,
- total: parsed_data.length
- };
- var msg = $translate.instant('import.loaded').replace('{{num}}', parsed_data.length);
- _log(msg);
- if (parsed_data.length > 0) {
- addCredential(0);
- } else {
- // @TODO Show message no data found
- }
- }).progress(function (progress) {
- $scope.file_read_progress = progress;
- $scope.$digest();
+ var process = $window.PassmanImporter[$scope.selectedImporter.id];
+
+ if ($scope.selectedImporter.id === 'passmanJson'){
+ process.setRequiredServices(FileService, EncryptService);
+ }
+
+ process = process.readFile(file_data).then(function (parseddata) {
+ parsed_data = parseddata;
+ $scope.file_read_progress = {
+ percent: 100,
+ loaded: parsed_data.length,
+ total: parsed_data.length
+ };
+ var msg = $translate.instant('import.loaded').replace('{{num}}', parsed_data.length);
+ _log(msg);
+ if (parsed_data.length > 0) {
+ addCredential(0);
+ } else {
+ // @TODO Show message no data found
+ }
});
+
+ if ($scope.selectedImporter.id !== 'passmanJson'){
+ process.progress(function (progress) {
+ $scope.file_read_progress = progress;
+ $scope.$digest();
+ });
+ }
}
};
}]);
-}()); \ No newline at end of file
+}());
diff --git a/js/importers/import-main.js b/js/importers/import-main.js
index 0029ba37..1c9ecb00 100644
--- a/js/importers/import-main.js
+++ b/js/importers/import-main.js
@@ -92,6 +92,7 @@ var PassmanImporter = {};
'password': null,
'url': null,
'favicon': null,
+ 'icon': null,
'renew_interval': null,
'expire_time': 0,
'delete_time': 0,
diff --git a/js/importers/importer-passmanjson.js b/js/importers/importer-passmanjson.js
index 713d7dd6..0aee2071 100644
--- a/js/importers/importer-passmanjson.js
+++ b/js/importers/importer-passmanjson.js
@@ -33,14 +33,68 @@ var PassmanImporter = PassmanImporter || {};
}
};
- PassmanImporter.passmanJson.readFile = function (file_data) {
+ var FileService = null;
+ var EncryptService = null;
+
+ PassmanImporter.passmanJson.setRequiredServices = function (FileSvc, EncryptSvc) {
+ FileService = FileSvc;
+ EncryptService = EncryptSvc;
+ };
+
+ PassmanImporter.passmanJson.readFile = async function (file_data) {
/** global: C_Promise */
- return new C_Promise(function(){
+ return new C_Promise(async function(){
+ var parseCustomFields = function (customFields, credential){
+ if (customFields.length > 0) {
+ for (var cf = 0; cf < customFields.length; cf++) {
+ if (customFields[cf].hasOwnProperty('clicktoshow')){
+ /** compatibility mode for the old version of the custom fields import implementation */
+ credential.custom_fields.push(
+ {
+ 'label': customFields[cf].label,
+ 'value': customFields[cf].value,
+ 'secret': (customFields[cf].clicktoshow === '1'),
+ 'field_type': customFields[cf].clicktoshow === '1' ? 'password' : 'text'
+ }
+ );
+ } else {
+ credential.custom_fields.push(
+ {
+ 'label': customFields[cf].label,
+ 'value': customFields[cf].value,
+ 'secret': customFields[cf].secret,
+ 'field_type': customFields[cf].field_type
+ }
+ );
+ }
+ }
+ }
+ return credential;
+ };
+ var parseFiles = async function (files, credential){
+ if (files.length > 0) {
+ for (var cf = 0; cf < files.length; cf++) {
+ var _file = {
+ filename: files[cf].filename,
+ size: files[cf].size,
+ mimetype: files[cf].mimetype,
+ data: files[cf].file_data
+ };
+ var file_result = await FileService.uploadFile(_file);
+ delete file_result.file_data;
+ file_result.filename = EncryptService.decryptString(file_result.filename);
+ credential.files.push(file_result);
+ }
+ }
+ return credential;
+ };
+
var parsed_json = PassmanImporter.readJson(file_data);
var credential_list = [];
for (var i = 0; i < parsed_json.length; i++) {
var item = parsed_json[i];
var _credential = PassmanImporter.newCredential();
+ _credential.icon = item.icon;
_credential.label = item.label;
_credential.username = item.username;
_credential.password = item.password;
@@ -50,17 +104,14 @@ var PassmanImporter = PassmanImporter || {};
_credential.description = item.description;
//Check for custom fields
if (item.hasOwnProperty('customFields')) {
- if (item.customFields.length > 0) {
- for (var cf = 0; cf < item.customFields.length; cf++) {
- _credential.custom_fields.push(
- {
- 'label': item.customFields[cf].label,
- 'value': item.customFields[cf].value,
- 'secret': (item.customFields[cf].clicktoshow === '1')
- }
- )
- }
- }
+ _credential = parseCustomFields(item.customFields, _credential);
+ }
+ if (item.hasOwnProperty('custom_fields')) {
+ _credential = parseCustomFields(item.custom_fields, _credential);
+ }
+ //Check for files
+ if (item.hasOwnProperty('files')) {
+ _credential = await parseFiles(item.files, _credential);
}
// Check for otp
if (item.hasOwnProperty('otp')) {
@@ -74,7 +125,7 @@ var PassmanImporter = PassmanImporter || {};
},
'secret': item.otp.secret,
'type': item.otp.type
- }
+ };
}
}
if(_credential.label){