Fix saving backup codes by using a correct data uri
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
This commit is contained in:
parent
c7735006b8
commit
02e41c9b50
|
@ -1,6 +1,6 @@
|
|||
/* global Backbone, Handlebars, OC, _ */
|
||||
|
||||
(function (OC, Handlebars, $, _) {
|
||||
(function(OC, Handlebars, $, _) {
|
||||
'use strict';
|
||||
|
||||
OC.Settings = OC.Settings || {};
|
||||
|
@ -33,27 +33,68 @@
|
|||
+ '{{/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 _.reduce(this._codes, function (prev, code) {
|
||||
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 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;
|
||||
|
|
Loading…
Reference in New Issue