summaryrefslogtreecommitdiffstats
path: root/apps/twofactor_backupcodes/js/settingsview.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/twofactor_backupcodes/js/settingsview.js')
-rw-r--r--apps/twofactor_backupcodes/js/settingsview.js120
1 files changed, 120 insertions, 0 deletions
diff --git a/apps/twofactor_backupcodes/js/settingsview.js b/apps/twofactor_backupcodes/js/settingsview.js
new file mode 100644
index 00000000000..3da4c141159
--- /dev/null
+++ b/apps/twofactor_backupcodes/js/settingsview.js
@@ -0,0 +1,120 @@
+/* global Backbone, Handlebars, OC, _ */
+
+(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';
+
+ var View = OC.Backbone.View.extend({
+ _template: undefined,
+ template: function (data) {
+ if (!this._template) {
+ this._template = Handlebars.compile(TEMPLATE);
+ }
+ return this._template(data);
+ },
+ _loading: undefined,
+ _enabled: undefined,
+ _total: undefined,
+ _used: undefined,
+ _codes: undefined,
+ events: {
+ 'click #generate-backup-codes': '_onGenerateBackupCodes',
+ 'click #print-backup-codes': '_onPrintBackupCodes',
+ },
+ initialize: function () {
+ this._load();
+ },
+ render: function () {
+ this.$el.html(this.template({
+ enabled: this._enabled,
+ total: this._total,
+ used: this._used,
+ codes: this._codes,
+ download: this._getDownloadDataHref()
+ }));
+ },
+ _getDownloadDataHref: function () {
+ if (!this._codes) {
+ return '';
+ }
+ return 'data:text/plain,' + encodeURIComponent(_.reduce(this._codes, function (prev, code) {
+ return prev + code + "\r\n";
+ }, ''));
+ },
+ _load: function () {
+ this._loading = true;
+
+ var url = OC.generateUrl('/apps/twofactor_backupcodes/settings/state');
+ var loading = $.ajax(url, {
+ method: 'GET',
+ });
+
+ $.when(loading).done(function (data) {
+ this._enabled = data.enabled;
+ this._total = data.total;
+ this._used = data.used;
+ }.bind(this));
+ $.when(loading).always(function () {
+ this._loading = false;
+ this.render();
+ }.bind(this));
+ },
+ _onGenerateBackupCodes: function () {
+ // Hide old codes
+ this._enabled = false;
+ this.render();
+ $('#generate-backup-codes').addClass('icon-loading-small');
+ var url = OC.generateUrl('/apps/twofactor_backupcodes/settings/create');
+ $.ajax(url, {
+ method: 'POST'
+ }).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 () {
+ OC.Notification.showTemporary('An error occurred while generating your backup codes');
+ $('#generate-backup-codes').removeClass('icon-loading-small');
+ });
+ },
+ _onPrintBackupCodes: function () {
+ var url = this._getDownloadDataHref();
+ window.open(url, 'Nextcloud backpu codes');
+ window.print();
+ window.close();
+ }
+ });
+
+ OC.Settings.TwoFactorBackupCodes.View = View;
+
+})(OC, Handlebars, $, _); \ No newline at end of file