<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[6747] sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-two-factor: 2FA: Second pass at backup codes</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://meta.trac.wordpress.org/changeset/6747">6747</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://meta.trac.wordpress.org/changeset/6747","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>obenland</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2018-02-26 01:08:02 +0000 (Mon, 26 Feb 2018)</dd>
</dl>
<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>2FA: Second pass at backup codes
Now copies/prints/downloads codes.
Also added links to authentication apps.
See <a href="http://meta.trac.wordpress.org/ticket/77">#77</a>.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginswporgtwofactorjsprofileeditjs">sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-two-factor/js/profile-edit.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginswporgtwofactorwporgtwofactorphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-two-factor/wporg-two-factor.php</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginswporgtwofactorjsprofileeditjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-two-factor/js/profile-edit.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-two-factor/js/profile-edit.js 2018-02-25 23:10:30 UTC (rev 6746)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-two-factor/js/profile-edit.js 2018-02-26 01:08:02 UTC (rev 6747)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -17,7 +17,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $( '<div class="bbp-template-notice info" />' ).text( response.data )
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px"> } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $( '#two-factor-active' ).find( 'div:first-of-type' ).prepend(
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $( '#two-factor-active' ).find( '> div:first-of-type' ).prepend(
</ins><span class="cx" style="display: block; padding: 0 10px"> $( '<div class="bbp-template-notice error" />' ).text( response.data )
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -91,9 +91,10 @@
</span><span class="cx" style="display: block; padding: 0 10px"> },
</span><span class="cx" style="display: block; padding: 0 10px"> function( response ) {
</span><span class="cx" style="display: block; padding: 0 10px"> if ( response.success ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- var $codesList = $( '.two-factor-backup-codes-unused-codes' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ var $codesList = $( '#two-factor-backup-codes-list' ),
+ txt_data = 'data:application/text;charset=utf-8,' + '\n';
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $( '#generate-backup-codes' ).remove();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $( '#two-factor-backup-codes-button' ).hide();
</ins><span class="cx" style="display: block; padding: 0 10px"> $( '.two-factor-backup-codes-wrapper' ).show();
</span><span class="cx" style="display: block; padding: 0 10px"> $codesList.html( '' );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -102,25 +103,55 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $codesList.append( '<li>' + response.data.codes[ i ] + '</li>' );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Update counter.
- $( '.two-factor-backup-codes-count' ).html( response.data.i18n.count );
-
</del><span class="cx" style="display: block; padding: 0 10px"> // Build the download link
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- var txt_data = 'data:application/text;charset=utf-8,' + '\n';
</del><span class="cx" style="display: block; padding: 0 10px"> txt_data += response.data.i18n.title.replace( /%s/g, document.domain ) + '\n\n';
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> for ( i = 0; i < response.data.codes.length; i++ ) {
</span><span class="cx" style="display: block; padding: 0 10px"> txt_data += i + 1 + '. ' + response.data.codes[ i ] + '\n';
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $( '#two-factor-backup-codes-download-link' ).attr( 'href', encodeURI( txt_data ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $( '#two-factor-backup-codes-download' ).attr( 'href', encodeURI( txt_data ) );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px"> } );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $( '#print-agreement' ).on( 'change', function() {
- $( '.two-factor-backup-codes-wrapper button[type="submit"]' ).prop( 'disabled', ! $( this ).prop( 'checked' ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ var $printAgreement = $( '#print-agreement' ),
+ $backupDoneButton = $( '.two-factor-backup-codes-wrapper button[type="submit"]' );
+
+ $printAgreement.on( 'change', function() {
+ $backupDoneButton.prop( 'disabled', ! $printAgreement.prop( 'checked' ) );
</ins><span class="cx" style="display: block; padding: 0 10px"> } );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $backupDoneButton.on( 'click', function( event ) {
+ event.preventDefault();
+
+ $( '.two-factor-backup-codes-wrapper' ).hide();
+ $( '#two-factor-backup-codes-button' ).show();
+ $printAgreement.prop( 'checked', false );
+ $backupDoneButton.prop( 'disabled', true );
+ } );
+
+ $( '#two-factor-backup-codes-copy' ).on( 'click', function() {
+ var $temp = $( '<textarea>' ),
+ list = '';
+
+ $( 'body' ).append( $temp );
+ $( '#two-factor-backup-codes-list' ).children().each( function( index, node ) {
+ list += node.innerText + "\n";
+ } );
+
+ $temp.val( list ).select();
+ document.execCommand( 'copy' );
+ $temp.remove();
+ } );
+
+ $( '#two-factor-backup-codes-print' ).on( 'click', function() {
+ var printer = window.open('', '_blank' );
+ printer.document.writeln( '<ol>' + $( '#two-factor-backup-codes-list' ).html() + '</ol>' );
+ printer.document.close();
+ printer.focus();
+ printer.print();
+ printer.close();
+ } );
</ins><span class="cx" style="display: block; padding: 0 10px"> } );
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginswporgtwofactorwporgtwofactorphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-two-factor/wporg-two-factor.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-two-factor/wporg-two-factor.php 2018-02-25 23:10:30 UTC (rev 6746)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-two-factor/wporg-two-factor.php 2018-02-26 01:08:02 UTC (rev 6747)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -57,27 +57,36 @@
</span><span class="cx" style="display: block; padding: 0 10px"> <h2 class="entry-title"><?php esc_html_e( 'Two Factor Authentication', 'wporg' ); ?></h2>
</span><span class="cx" style="display: block; padding: 0 10px"> <fieldset id="two-factor-active" class="bbp-form two-factor" <?php if ( ! $is_active ) { echo 'style="display:none;"'; } ?>>
</span><span class="cx" style="display: block; padding: 0 10px"> <legend><?php esc_html_e( 'Two Factor Authentication', 'wporg' ); ?></legend>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- <div><?php echo wp_kses_post( __( '<strong>Status:</strong> Two Factor Authentication is currently <span>ACTIVE</span>.', 'wporg' ) ); ?></div>
- <div><?php esc_html_e( 'While enabled, logging in to WordPress.org requires you to enter a unique passcode, generated by an app on your mobile device, in addition to your username and password.', 'wporg' ); ?></div>
- <div><?php esc_html_e( 'Switching to a new device? Follow these steps to avoid losing access to your account.', 'wporg' ); ?></div>
- <div><button type="cancel" class="button button-secondary alignright"><?php esc_html_e( 'Disable Two Factor Authentication', 'wporg' ); ?></button></div>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ <div>
+ <label for=""><?php esc_html_e( 'Two Factor', 'worg' ); ?></label>
+ <fieldset class="bbp-form">
+ <div>
+ <button type="cancel" class="button button-secondary alignright"><?php esc_html_e( 'Disable Two Factor Authentication', 'wporg' ); ?></button>
+ <p class="status"><?php echo wp_kses_post( __( '<strong>Status:</strong> <span>Active</span>', 'wporg' ) ); ?></p>
+ </div>
+ <p><?php esc_html_e( 'While enabled, logging in to WordPress.org requires you to enter a unique passcode, generated by an app on your mobile device, in addition to your username and password.', 'wporg' ); ?></p>
+ </fieldset>
+ </div>
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> <div>
</span><span class="cx" style="display: block; padding: 0 10px"> <label for=""><?php esc_html_e( 'Backup Codes', 'worg' ); ?></label>
</span><span class="cx" style="display: block; padding: 0 10px"> <fieldset class="bbp-form">
</span><span class="cx" style="display: block; padding: 0 10px"> <?php wp_nonce_field( 'two-factor-backup-codes-generate-json-' . $user->ID, '_nonce-backup-codes' ); ?>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- <button type="button" id="generate-backup-codes" class="button button-secondary"><?php esc_html_e( 'Generate New Backup Codes', 'wporg' ); ?></button>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ <div id="two-factor-backup-codes-button">
+ <div><button type="button" id="generate-backup-codes" class="button button-secondary"><?php esc_html_e( 'Generate New Backup Codes', 'wporg' ); ?></button></div>
+ <p><?php esc_html_e( 'Backup codes let you access your account if your phone is lost, stolen, or if you run it through the washing machine and the bag of rice trick doesn’t work.', 'worg' ); ?></p>
+ </div>
</ins><span class="cx" style="display: block; padding: 0 10px"> <div class="two-factor-backup-codes-wrapper" style="display:none;">
</span><span class="cx" style="display: block; padding: 0 10px"> <p class="description"><?php esc_html_e( 'We ask that you print this list of ten unique, one-time-use backup codes and keep the list in a safe place.', 'wporg' ); ?></p>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- <ol class="two-factor-backup-codes-unused-codes"></ol>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ <ol id="two-factor-backup-codes-list"></ol>
</ins><span class="cx" style="display: block; padding: 0 10px"> <div><small><?php esc_html_e( 'Without access to the app or a backup code, you will lose access to your account.', 'wporg' ); ?></small></div>
</span><span class="cx" style="display: block; padding: 0 10px"> <div>
</span><span class="cx" style="display: block; padding: 0 10px"> <input type="checkbox" id="print-agreement" name="print-agreement" />
</span><span class="cx" style="display: block; padding: 0 10px"> <label for="print-agreement"><?php esc_html_e( 'I have printed or saved these codes', 'wporg' ); ?></label>
</span><span class="cx" style="display: block; padding: 0 10px"> <span class="button-group">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- <button type="button" class="button button-secondary dashicons-before dashicons-clipboard" id="two-factor-backup-codes-copy-link" title="<?php esc_attr_e( 'Copy Codes', 'wporg' ); ?>"><span class="screen-reader-text"><?php esc_html_e( 'Copy Codes', 'wporg' ); ?></span></button>
- <button type="button" class="button button-secondary dashicons-before dashicons-index-card" id="two-factor-backup-codes-print-link" title="<?php esc_attr_e( 'Print Codes', 'wporg' ); ?>"><span class="screen-reader-text"><?php esc_html_e( 'Print Codes', 'wporg' ); ?></span></button>
- <a href="" class="button button-secondary dashicons-before dashicons-download" id="two-factor-backup-codes-download-link" title="<?php esc_attr_e( 'Download Codes', 'wporg' ); ?>" download="two-factor-backup-codes.txt"><span class="screen-reader-text"><?php esc_html_e( 'Download Codes', 'wporg' ); ?></span></a>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ <button type="button" class="button button-secondary dashicons-before dashicons-clipboard" id="two-factor-backup-codes-copy" title="<?php esc_attr_e( 'Copy Codes', 'wporg' ); ?>"><span class="screen-reader-text"><?php esc_html_e( 'Copy Codes', 'wporg' ); ?></span></button>
+ <button type="button" class="button button-secondary dashicons-before dashicons-index-card" id="two-factor-backup-codes-print" title="<?php esc_attr_e( 'Print Codes', 'wporg' ); ?>"><span class="screen-reader-text"><?php esc_html_e( 'Print Codes', 'wporg' ); ?></span></button>
+ <a href="" class="button button-secondary dashicons-before dashicons-download" id="two-factor-backup-codes-download" title="<?php esc_attr_e( 'Download Codes', 'wporg' ); ?>" download="two-factor-backup-codes.txt"><span class="screen-reader-text"><?php esc_html_e( 'Download Codes', 'wporg' ); ?></span></a>
</ins><span class="cx" style="display: block; padding: 0 10px"> </span>
</span><span class="cx" style="display: block; padding: 0 10px"> <button type="submit" class="button button-secondary" disabled="disabled"><?php esc_html_e( 'All Finished!', 'wporg' ); ?></button>
</span><span class="cx" style="display: block; padding: 0 10px"> </div>
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -110,6 +119,14 @@
</span><span class="cx" style="display: block; padding: 0 10px"> <input type="hidden" name="two-factor-totp-key" value="<?php echo esc_attr( $key ) ?>" />
</span><span class="cx" style="display: block; padding: 0 10px"> <input type="tel" name="two-factor-totp-authcode" class="input" value="" size="20" pattern="[0-9]*" placeholder="<?php esc_attr_e( 'e.g. 123456', 'wporg' ); ?>" />
</span><span class="cx" style="display: block; padding: 0 10px"> </p>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ <div>
+ <small>
+ <?php
+ /* translators: 1: URL to Authy; 2: URL to Google Authenticator */
+ printf( wp_kses_post( __( 'Not sure what this screen means? You may need to download <a href="%1$s">Authy</a> or <a href="%2$s">Google Authenticator</a> for your phone.', 'wporg' ) ), esc_url( 'https://authy.com/download/' ), esc_url( 'https://support.google.com/accounts/answer/1066447?hl=' . get_locale() ) );
+ ?>
+ </small>
+ </div>
</ins><span class="cx" style="display: block; padding: 0 10px"> <button type="cancel" class="button button-secondary alignleft"><?php esc_html_e( 'Cancel', 'wporg' ); ?></button>
</span><span class="cx" style="display: block; padding: 0 10px"> <button type="submit" class="button button-primary alignright"><?php esc_html_e( 'Enable', 'wporg' ); ?></button>
</span><span class="cx" style="display: block; padding: 0 10px"> </div>
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -127,12 +144,27 @@
</span><span class="cx" style="display: block; padding: 0 10px"> <input type="hidden" name="two-factor-totp-key" value="<?php echo esc_attr( $key ) ?>" />
</span><span class="cx" style="display: block; padding: 0 10px"> <input type="tel" name="two-factor-totp-authcode" class="input" value="" size="20" pattern="[0-9]*" placeholder="<?php esc_attr_e( 'e.g. 123456', 'wporg' ); ?>" />
</span><span class="cx" style="display: block; padding: 0 10px"> </p>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ <div>
+ <small>
+ <?php
+ /* translators: 1: URL to Authy; 2: URL to Google Authenticator */
+ printf( wp_kses_post( __( 'Not sure what this screen means? You may need to download <a href="%1$s">Authy</a> or <a href="%2$s">Google Authenticator</a> for your phone.', 'wporg' ) ), esc_url( 'https://authy.com/download/' ), esc_url( 'https://support.google.com/accounts/answer/1066447?hl=' . get_locale() ) );
+ ?>
+ </small>
+ </div>
</ins><span class="cx" style="display: block; padding: 0 10px"> <button type="cancel" class="button button-secondary alignleft"><?php esc_html_e( 'Cancel', 'wporg' ); ?></button>
</span><span class="cx" style="display: block; padding: 0 10px"> <button type="submit" class="button button-primary alignright"><?php esc_html_e( 'Enable', 'wporg' ); ?></button>
</span><span class="cx" style="display: block; padding: 0 10px"> </div>
</span><span class="cx" style="display: block; padding: 0 10px"> </fieldset>
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> <style>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ #bbpress-forums .two-factor .status {
+ margin: 5px 0;
+ }
+ #bbpress-forums .two-factor .status span {
+ color: #4ab866;
+ text-transform: uppercase;
+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> #bbpress-forums #bbp-your-profile input[type="checkbox"] {
</span><span class="cx" style="display: block; padding: 0 10px"> width: auto;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -140,7 +172,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> float: none;
</span><span class="cx" style="display: block; padding: 0 10px"> width: auto;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ #bbpress-forums #two-factor-qr-code > div,
+ #bbpress-forums #two-factor-key-code > div {
+ margin-left: 20%;
+ width: 60% !important;
+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> .dashicons-clipboard:before {
</span><span class="cx" style="display: block; padding: 0 10px"> transform: rotate( -45deg );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -179,7 +215,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( empty( $_POST['authcode'] ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- wp_send_json_error( __( 'Please enter a valid authorization code.' ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ wp_send_json_error( __( 'Please enter a valid authorization code.', 'wporg' ) );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( Two_Factor_Totp::is_valid_authcode( $_POST['key'], $_POST['authcode'] ) ) {
</span></span></pre>
</div>
</div>
</body>
</html>