diff --git a/customize.dist/pages/recovery.js b/customize.dist/pages/recovery.js index c5736f4ac..8355e7a81 100644 --- a/customize.dist/pages/recovery.js +++ b/customize.dist/pages/recovery.js @@ -112,7 +112,7 @@ Msg.recovery_totp_disabled = "Multi-factor authentication is already disabled fo Msg._getKey('recovery_totp_beta', [Config.adminEmail])) : undefined, h('label', Msg.recovery_totp_proof), h('textarea.cp-recover-email', {readonly: 'readonly'}), - h('button.btn.btn-secondary', Msg.copyToClipboard), + h('button.btn.btn-secondary#totpcopyproof', Msg.copyToClipboard), ]), ]), h('div.cp-recovery-step.step-info', { style: 'display: none;' }, [ diff --git a/www/recovery/main.js b/www/recovery/main.js index 7dff9745d..15ac298d9 100644 --- a/www/recovery/main.js +++ b/www/recovery/main.js @@ -10,6 +10,7 @@ define([ '/common/common-realtime.js', '/common/common-constants.js', '/common/common-feedback.js', + '/common/clipboard.js', '/common/outer/local-store.js', '/common/outer/login-block.js', '/common/outer/http-command.js', @@ -18,7 +19,7 @@ define([ 'css!/bower_components/components-font-awesome/css/font-awesome.min.css', ], function ($, Sortify, Login, Cryptpad, /*Test,*/ Cred, UI, Util, Realtime, Constants, Feedback, - LocalStore, Block, ServerCommand) { + Clipboard, LocalStore, Block, ServerCommand) { if (window.top !== window) { return; } var Messages = Cryptpad.Messages; @@ -35,6 +36,7 @@ define([ var $uname = $('#username'); var $passwd = $('#password'); var $recoveryKey = $('#totprecovery'); + var $copyProof = $('#totpcopyproof'); var $step1 = $('.cp-recovery-step.step1'); var $step2 = $('.cp-recovery-step.step2'); @@ -55,6 +57,7 @@ define([ $stepInfo.show(); }; + var proofStr; var addProof = function (blockKeys) { var pub = blockKeys.sign.publicKey; var sec = blockKeys.sign.secretKey; @@ -65,9 +68,19 @@ define([ }; var proof = Nacl.sign.detached(Nacl.util.decodeUTF8(Sortify(toSign)), sec); toSign.proof = Nacl.util.encodeBase64(proof); - $totpProof.html(JSON.stringify(toSign, 0, 2)); + proofStr = JSON.stringify(toSign, 0, 2); + $totpProof.html(proofStr); }; + $copyProof.click(function () { + if (!proofStr) { return; } + if (Clipboard.copy.multiline(proofStr)) { + UI.log(Messages.genericCopySuccess); + } else { + UI.warn(Messages.error); + } + }); + var revokeTOTP = function (blockKeys) { var recoveryKey = $recoveryKey.val().trim(); if (!recoveryKey || recoveryKey.length !== 32) {