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
diff options
context:
space:
mode:
authorWolFi <wolfi@wolfi.es>2017-06-04 21:14:30 +0300
committerWolFi <wolfi@wolfi.es>2017-06-04 21:14:30 +0300
commit8cde638391f2abbd4610b7188811ced528ec32f1 (patch)
tree690a73570a195839b386c91b950536de015b9c89
parent92ac904f26e1f98064c273179040b3272f5dc8c9 (diff)
ADD JSON exporter
-rw-r--r--js/exporters/exporter-csv.js2
-rw-r--r--js/exporters/exporter-json.js64
-rw-r--r--js/templates.js4
-rw-r--r--templates/main.php1
4 files changed, 68 insertions, 3 deletions
diff --git a/js/exporters/exporter-csv.js b/js/exporters/exporter-csv.js
index f3a25345..f9b427ca 100644
--- a/js/exporters/exporter-csv.js
+++ b/js/exporters/exporter-csv.js
@@ -69,7 +69,7 @@ PassmanExporter.csv.export = function (credentials, FileService, EncryptService)
this.call_then();
download(file_data, 'passman-export.csv');
}).bind(this)).progress(function(progress) {
- console.log(progress);
+
});
diff --git a/js/exporters/exporter-json.js b/js/exporters/exporter-json.js
new file mode 100644
index 00000000..92478293
--- /dev/null
+++ b/js/exporters/exporter-json.js
@@ -0,0 +1,64 @@
+/**
+ * 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/>.
+ *
+ */
+
+
+/** global: PassmanExporter */
+PassmanExporter.json = {
+ info: {
+ name: 'JSON',
+ id: 'json',
+ description: 'Export credentials as a JSON file.'
+ }
+};
+
+PassmanExporter.json.export = function (credentials, FileService, EncryptService) {
+ /** global: C_Promise */
+ return new C_Promise(function () {
+ PassmanExporter.getCredentialsWithFiles(credentials, FileService, EncryptService).then((function(data){
+ var _output = [];
+ for (var i = 0; i < credentials.length; i++) {
+ var _credential = angular.copy(credentials[i]);
+
+ delete _credential.vault_key;
+ delete _credential.vault_id;
+ delete _credential.shared_key;
+
+ console.log(_credential);
+ _output.push(_credential);
+
+ var progress = {
+ percent: i / credentials.length * 100,
+ loaded: i,
+ total: credentials.length
+ };
+ this.call_progress(progress);
+ }
+ var file_data = JSON.stringify(_output);
+ this.call_then();
+ download(file_data, 'passman-export.json');
+ }).bind(this)).progress(function(progress) {
+ console.log(progress);
+ });
+
+
+ });
+};
diff --git a/js/templates.js b/js/templates.js
index f97e8d4b..a9d98c30 100644
--- a/js/templates.js
+++ b/js/templates.js
@@ -87,7 +87,7 @@ angular.module('views/partials/forms/settings/sharing.html', []).run(['$template
angular.module('views/partials/forms/settings/tool.html', []).run(['$templateCache', function ($templateCache) {
'use strict';
$templateCache.put('views/partials/forms/settings/tool.html',
- '<div class="row"><div class="col-xs-12"><p>{{ \'tool.intro\' | translate}}</p></div><div class="col-xs-12" ng-init="minStrength = 3;">{{ \'min.strength\' | translate}} <input type="number" min="1" max="4" value="3" ng-model="minStrength"> <button ng-click="startScan(minStrength)">Start scan</button></div></div><div class="row" ng-show="scan_result"><div class="col-xs-12"><p>{{ \'scan.result.msg\' | translate}}<br><span translate="scan.result" translate-values="{ scan_result: scan_result.length}"></span><br></p><table class="table scan-result-table"><thead><tr><td>{{ \'label\' | translate}}</td><td>{{ \'score\' | translate}}</td><td>{{ \'password\' | translate}}</td><td>{{ \'action\' | translate}}</td></tr></thead><tbody><tr ng-repeat="result in scan_result | orderBy:\'password_zxcvbn_result.score\'"><td>{{result.label}}</td><td class="score"><ng-password-meter password="result.password"></ng-password-meter></td><td><span credential-field value="result.password" secret="\'true\'"></span></td><td><a class="link" ng-href="#/vault/{{active_vault.guid}}/edit/{{result.guid}}" tooltip="\'Edit credential\'"><i class="fa fa-edit"></i></a></td></tr></tbody></table></div></div>');
+ '<div class="row"><div class="col-xs-12"><p>{{ \'tool.intro\' | translate}}</p></div><div class="col-xs-12" ng-init="minStrength = 3;">{{ \'min.strength\' | translate}} <input type="number" min="1" max="4" value="3" ng-model="minStrength"> <button ng-click="startScan(minStrength)">{{ \'scan.start\' | translate}}</button></div></div><div class="row" ng-show="scan_result"><div class="col-xs-12"><p>{{ \'scan.result.msg\' | translate}}<br><span translate="scan.result" translate-values="{ scan_result: scan_result.length}"></span><br></p><table class="table scan-result-table"><thead><tr><td>{{ \'label\' | translate}}</td><td>{{ \'score\' | translate}}</td><td>{{ \'password\' | translate}}</td><td>{{ \'action\' | translate}}</td></tr></thead><tbody><tr ng-repeat="result in scan_result | orderBy:\'password_zxcvbn_result.score\'"><td>{{result.label}}</td><td class="score"><ng-password-meter password="result.password"></ng-password-meter></td><td><span credential-field value="result.password" secret="\'true\'"></span></td><td><a class="link" ng-href="#/vault/{{active_vault.guid}}/edit/{{result.guid}}" tooltip="{{ \'edit.credential\' | translate}}"><i class="fa fa-edit"></i></a></td></tr></tbody></table></div></div>');
}]);
angular.module('views/partials/forms/share_credential/basics.html', []).run(['$templateCache', function ($templateCache) {
@@ -126,7 +126,7 @@ angular.module('views/show_vault.html', []).run(['$templateCache', function ($te
'use strict';
$templateCache.put('views/show_vault.html',
'<div off-click="closeSelected()" off-click-filter="\'.download-js-link, .sidebar-shown\'"><div id="passman-controls" ng-class="{ \'sidebar-shown\': selectedCredential }"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a><i class="fa fa-home"></i></a></div><div class="crumb svg last" ng-click="clearState()"><span>{{active_vault.name}}</span></div></div></div><div class="actions creatable"><span ng-click="addCredential()" class="button new"><span>+</span></span></div><div class="title" credential-counter="filtered_credentials" vault="active_vault" delete-time="delete_time" filters="filterOptions"></div><div class="searchboxContainer" ng-init="filterOptionShown = false;" off-click="filterOptionShown = false;"><input type="text" ng-model="filterOptions.filterText" class="searchbox" id="searchBox" placeholder="{{\'search.credential\' | translate}}" select-on-click clear-btn ng-click="filterOptionShown = true;"><div class="searchOptions" ng-show="filterOptionShown"><input type="checkbox" ng-model="filterOptions.useRegex"> {{ \'use.regex\' | translate }}</div></div><div class="viewModes"><div class="view-mode" ng-class="{\'active\': view_mode === \'list\' }" ng-click="switchViewMode(\'list\')"><i class="fa fa-list"></i></div><div class="view-mode" ng-class="{\'active\': view_mode === \'grid\' }" ng-click="switchViewMode(\'grid\')"><i class="fa fa-th-large"></i></div></div></div><div class="loaderContainer" ng-if="show_spinner"><div class="loader" use-theme type="\'border-bottom-color\'"></div></div><div ng-init="menuOpen = false;"><table class="credential-table" ng-if="view_mode === \'list\'"><tr ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="showCredentialRow(credential)" ng-click="selectCredential(credential)" ng-dblclick="editCredential(credential)" ng-class="{\'selected\': selectedCredential.credential_id == credential.credential_id}"><td><span class="tags"><span class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</span> </span><span class="icon"><i class="fa fa-lock" ng-if="!credential.acl && !credential.shared_key"></i> <i class="fa fa-share-alt" ng-if="credential.acl"></i> <i class="fa fa-share-alt-square" ng-if="credential.shared_key"></i> </span><span class="label">{{ ::credential.label}}</span></td></tr></table><ul class="grid-view" ng-if="view_mode === \'grid\'"><li class="credential" ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="credential.hidden == 0 && showCredentialRow(credential)" ng-click="selectCredential(credential)" use-theme type="\'border-color\'"><div class="credential_content"><div class="label">{{ ::credential.label}}</div><div class="tags"><div class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</div></div></div></li></ul></div><div id="app-sidebar" class="detailsView scroll-container app_sidebar" ng-show="selectedCredential"><h2>{{selectedCredential.label}}</h2><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span><div credential-template="selectedCredential"></div><div ng-show="selectedCredential"><div><button class="button" ng-click="editCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-edit"></span> {{ \'edit\' | translate}}</button> <button class="button" ng-click="deleteCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-trash"></span> {{ \'delete\' | translate}}</button> <button class="button" ng-click="shareCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && selectedCredential.acl === undefined &&\n' +
- ' (settings.user_sharing_enabled === 1 || settings.user_sharing_enabled === \'1\' || settings.link_sharing_enabled === 1 || settings.link_sharing_enabled === \'1\')"><span class="fa fa-share"></span> {{ \'share\' | translate}}</button> <button class="button" ng-click="getRevisions(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.HISTORY)"><span class="fa fa-undo"></span> {{ \'revisions\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="recoverCredential(selectedCredential) && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-recycle"></span> {{\'recover\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="destroyCredential(selectedCredential)"><span class="fa fa-bomb"></span> {{\'destroy\' | translate}}</button></div></div></div></div><div class="share_popup" style="display: none">{{ \'sharereq.title\' | translate}}<br>{{ \'sharereq.line1\' | translate}}<br>{{ \'sharereq.line2\' | translate}} {{active_vault.vault_id}}<table class="table"><thead><tr><td>{{ \'label\' | translate}}</td><td>{{ \'permissions\' | translate}}</td><td>{{ \'received.from\' | translate}}</td><td>{{ \'date\' | translate}}</td></tr></thead><tr ng-repeat="share_request in incoming_share_requests" ng-if="share_request.target_vault_id == active_vault.vault_id"><td>{{share_request.credential_label}}</td><td>{{share_request.permissions}}</td><td>{{share_request.from_user_id}}</td><td>{{share_request.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td><span class="link" ng-click="acceptShareRequest(share_request)">{{ \'accept\' | translate}}</span> | <span class="link" ng-click="declineShareRequest(share_request)">{{ \'decline\' | translate}}</span></td></tr></table></div>');
+ ' (settings.user_sharing_enabled === 1 || settings.user_sharing_enabled === \'1\' || settings.link_sharing_enabled === 1 || settings.link_sharing_enabled === \'1\')"><span class="fa fa-share"></span> {{ \'share\' | translate}}</button> <button class="button" ng-click="getRevisions(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.HISTORY)"><span class="fa fa-undo"></span> {{ \'revisions\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="recoverCredential(selectedCredential) && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-recycle"></span> {{\'recover\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="destroyCredential(selectedCredential)"><span class="fa fa-bomb"></span> {{\'destroy\' | translate}}</button></div></div></div></div><div class="share_popup" style="display: none">{{ \'sharereq.title\' | translate}}<br><p>{{ \'sharereq.line1\' | translate}}</p>{{active_vault.vault_id}}<table class="table"><thead><tr><td>{{ \'label\' | translate}}</td><td>{{ \'permissions\' | translate}}</td><td>{{ \'received.from\' | translate}}</td><td>{{ \'date\' | translate}}</td></tr></thead><tr ng-repeat="share_request in incoming_share_requests" ng-if="share_request.target_vault_id == active_vault.vault_id"><td>{{share_request.credential_label}}</td><td>{{share_request.permissions}}</td><td>{{share_request.from_user_id}}</td><td>{{share_request.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td><span class="link" ng-click="acceptShareRequest(share_request)">{{ \'accept\' | translate}}</span> | <span class="link" ng-click="declineShareRequest(share_request)">{{ \'decline\' | translate}}</span></td></tr></table></div>');
}]);
angular.module('views/vault_req_deletion.html', []).run(['$templateCache', function ($templateCache) {
diff --git a/templates/main.php b/templates/main.php
index aa10b94c..bea143e6 100644
--- a/templates/main.php
+++ b/templates/main.php
@@ -94,6 +94,7 @@ script('passman', 'importers/importer-passpackcsv');
script('passman', 'importers/importer-randomdata');
script('passman', 'exporters/exporter-main');
script('passman', 'exporters/exporter-csv');
+script('passman', 'exporters/exporter-json');
/*build-js-end*/