diff options
author | Christoph Wurst <christoph@winzerhof-wurst.at> | 2017-02-28 10:20:30 +0100 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2017-02-28 10:20:30 +0100 |
commit | 2f980ca76ca1c2399e216fa1b94862c4932db3dd (patch) | |
tree | ef61e4f6e9903db3d9de55419b18acc6f6d35ba2 /apps/twofactor_backupcodes | |
parent | b72b02778dac5b1ab15594de8dce0ccd04a030ba (diff) | |
download | nextcloud-server-2f980ca76ca1c2399e216fa1b94862c4932db3dd.tar.gz nextcloud-server-2f980ca76ca1c2399e216fa1b94862c4932db3dd.zip |
Fix saving backup codes by using a correct data uri
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'apps/twofactor_backupcodes')
-rw-r--r-- | apps/twofactor_backupcodes/js/settingsview.js | 162 |
1 files changed, 121 insertions, 41 deletions
diff --git a/apps/twofactor_backupcodes/js/settingsview.js b/apps/twofactor_backupcodes/js/settingsview.js index 753644fb210..101db0c8e71 100644 --- a/apps/twofactor_backupcodes/js/settingsview.js +++ b/apps/twofactor_backupcodes/js/settingsview.js @@ -1,59 +1,100 @@ /* global Backbone, Handlebars, OC, _ */ -(function (OC, Handlebars, $, _) { +(function(OC, Handlebars, $, _) { 'use strict'; OC.Settings = OC.Settings || {}; OC.Settings.TwoFactorBackupCodes = OC.Settings.TwoFactorBackupCodes || {}; var TEMPLATE = '<div>' - + '{{#unless enabled}}' - + '<button id="generate-backup-codes">' + t('twofactor_backupcodes', 'Generate backup codes') + '</button>' - + '{{else}}' - + '<p>' - + '{{#unless codes}}' - + t('twofactor_backupcodes', 'Backup codes have been generated. {{used}} of {{total}} codes have been used.') - + '{{else}}' - + t('twofactor_backupcodes', 'These are your backup codes. Please save and/or print them as you will not be able to read the codes again later') - + '<ul>' - + '{{#each codes}}' - + '<li class="backup-code">{{this}}</li>' - + '{{/each}}' - + '</ul>' - + '<a href="{{download}}" class="button" download="Nextcloud-backup-codes.txt">' + t('twofactor_backupcodes', 'Save backup codes') + '</a>' - + '<button id="print-backup-codes" class="button">' + t('twofactor_backupcodes', 'Print backup codes') + '</button>' - + '{{/unless}}' - + '</p>' - + '<p>' - + '<button id="generate-backup-codes">' + t('twofactor_backupcodes', 'Regenerate backup codes') + '</button>' - + '</p>' - + '<p>' - + t('twofactor_backupcodes', 'If you regenerate backup codes, you automatically invalidate old codes.') - + '</p>' - + '{{/unless}}' - + '</div'; + + '{{#unless enabled}}' + + '<button id="generate-backup-codes">' + t('twofactor_backupcodes', 'Generate backup codes') + '</button>' + + '{{else}}' + + '<p>' + + '{{#unless codes}}' + + t('twofactor_backupcodes', 'Backup codes have been generated. {{used}} of {{total}} codes have been used.') + + '{{else}}' + + t('twofactor_backupcodes', 'These are your backup codes. Please save and/or print them as you will not be able to read the codes again later') + + '<ul>' + + '{{#each codes}}' + + '<li class="backup-code">{{this}}</li>' + + '{{/each}}' + + '</ul>' + + '<a href="{{download}}" class="button" download="Nextcloud-backup-codes.txt">' + t('twofactor_backupcodes', 'Save backup codes') + '</a>' + + '<button id="print-backup-codes" class="button">' + t('twofactor_backupcodes', 'Print backup codes') + '</button>' + + '{{/unless}}' + + '</p>' + + '<p>' + + '<button id="generate-backup-codes">' + t('twofactor_backupcodes', 'Regenerate backup codes') + '</button>' + + '</p>' + + '<p>' + + t('twofactor_backupcodes', 'If you regenerate backup codes, you automatically invalidate old codes.') + + '</p>' + + '{{/unless}}' + + '</div'; + /** + * @class OC.Settings.TwoFactorBackupCodes.View + */ var View = OC.Backbone.View.extend({ + + /** + * @type {undefined|Function} + */ _template: undefined, - template: function (data) { + + /** + * @param {Object} data + * @returns {string} + */ + template: function(data) { if (!this._template) { this._template = Handlebars.compile(TEMPLATE); } return this._template(data); }, + + /** + * @type {boolean} + */ _loading: undefined, + + /** + * @type {boolean} + */ _enabled: undefined, + + /** + * @type {Number} + */ _total: undefined, + + /** + * @type {Number} + */ _used: undefined, + + /** + * @type {Array} + */ _codes: undefined, + events: { 'click #generate-backup-codes': '_onGenerateBackupCodes', - 'click #print-backup-codes': '_onPrintBackupCodes', + 'click #print-backup-codes': '_onPrintBackupCodes' }, - initialize: function () { + + /** + * @returns {undefined} + */ + initialize: function() { this._load(); }, - render: function () { + + /** + * @returns {self} + */ + render: function() { this.$el.html(this.template({ enabled: this._enabled, total: this._total, @@ -61,34 +102,66 @@ codes: this._codes, download: this._getDownloadData() })); + + return this; }, - _getDownloadData: function () { + + /** + * @private + * @returns {String} + */ + _getDownloadData: function() { + if (!this._codes) { + return ''; + } + return 'data:text/plain,' + encodeURIComponent(_.reduce(this._codes, function(prev, code) { + return prev + code + '\r\n'; + }, '')); + }, + + /** + * @private + * @returns {String} + */ + _getPrintData: function() { if (!this._codes) { return ''; } - return _.reduce(this._codes, function (prev, code) { + return _.reduce(this._codes, function(prev, code) { return prev + code + "<br>"; }, ''); }, - _load: function () { + + /** + * Load codes from the server + * + * @returns {undefined} + */ + _load: function() { this._loading = true; var url = OC.generateUrl('/apps/twofactor_backupcodes/settings/state'); var loading = $.ajax(url, { - method: 'GET', + method: 'GET' }); - $.when(loading).done(function (data) { + $.when(loading).done(function(data) { this._enabled = data.enabled; this._total = data.total; this._used = data.used; }.bind(this)); - $.when(loading).always(function () { + $.when(loading).always(function() { this._loading = false; this.render(); }.bind(this)); }, - _onGenerateBackupCodes: function () { + + /** + * Event handler to generate the codes + * + * @returns {undefined} + */ + _onGenerateBackupCodes: function() { if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this._onGenerateBackupCodes, this)); return; @@ -101,25 +174,32 @@ var url = OC.generateUrl('/apps/twofactor_backupcodes/settings/create'); $.ajax(url, { method: 'POST' - }).done(function (data) { + }).done(function(data) { this._enabled = data.state.enabled; this._total = data.state.total; this._used = data.state.used; this._codes = data.codes; this.render(); - }.bind(this)).fail(function () { + }.bind(this)).fail(function() { OC.Notification.showTemporary(t('twofactor_backupcodes', 'An error occurred while generating your backup codes')); $('#generate-backup-codes').removeClass('icon-loading-small'); }); }, - _onPrintBackupCodes: function () { - var data = this._getDownloadData(); + + /** + * Event handler to print the codes + * + * @returns {undefined} + */ + _onPrintBackupCodes: function() { + var data = this._getPrintData(); var newTab = window.open('', t('twofactor_backupcodes', 'Nextcloud backup codes')); newTab.document.write('<h1>' + t('twofactor_backupcodes', 'Nextcloud backup codes') + '</h1>'); newTab.document.write(data); newTab.print(); newTab.close(); } + }); OC.Settings.TwoFactorBackupCodes.View = View; |