PluginProbe ʕ •ᴥ•ʔ
WP 2FA – Two-factor authentication for WordPress / 2.8.0
WP 2FA – Two-factor authentication for WordPress v2.8.0
4.0.0 1.7.1 2.0.0 2.0.1 2.1.0 2.2.0 2.2.1 2.3.0 2.4.0 2.4.1 2.4.2 2.5.0 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.8.0 2.9.0 2.9.1 2.9.2 2.9.3 3.0.0 3.0.1 3.1.0 3.1.1 3.1.1.2 trunk 1.2.0 1.3.0 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.6.0 1.6.1 1.6.2 1.7.0
wp-2fa / includes / classes / Admin / Views / class-passord-reset-2fa.php
wp-2fa / includes / classes / Admin / Views Last commit date
class-first-time-wizard-steps.php 1 year ago class-grace-period-notifications.php 1 year ago class-passord-reset-2fa.php 1 year ago class-re-login-2fa.php 1 year ago class-wizard-steps.php 1 year ago index.php 1 year ago
class-passord-reset-2fa.php
158 lines
1 <?php
2 /**
3 * Roles and main settings password reset class.
4 *
5 * @package wp2fa
6 * @subpackage views
7 *
8 * @copyright 2024 Melapress
9 * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
10 *
11 * @see https://wordpress.org/plugins/wp-2fa/
12 */
13
14 declare(strict_types=1);
15
16 namespace WP2FA\Admin\Views;
17
18 use WP2FA\Admin\Controllers\Settings;
19 use WP2FA\Extensions\RoleSettings\Role_Settings_Controller;
20
21 if ( ! class_exists( '\WP2FA\Admin\Views\Password_Reset_2FA' ) ) {
22 /**
23 * Password_Reset_2FA - Class for rendering the plugin settings related to 2fa when user resets the password.
24 *
25 * @since 2.5.0
26 */
27 class Password_Reset_2FA {
28 public const PASSWORD_RESET_SETTINGS_NAME = 'password-reset-2fa-show';
29
30 public const ENABLED_SETTING_VALUE = 'password-reset-2fa';
31
32 /**
33 * Inits all the class related hooks.
34 *
35 * @return void
36 *
37 * @since 2.5.0
38 */
39 public static function init() {
40 if ( is_admin() ) {
41 \add_filter( WP_2FA_PREFIX . 'before_grace_period', array( __CLASS__, 'password_reset_setting' ), 10, 5 );
42 \add_filter( WP_2FA_PREFIX . 'loop_settings', array( __CLASS__, 'add_setting_value' ) );
43 }
44 \add_filter( WP_2FA_PREFIX . 'default_settings', array( __CLASS__, 'add_default_settings' ) );
45 }
46
47 /**
48 * Shows the settings for the grace period notifications behavior.
49 *
50 * @param string $role - The name of the role.
51 * @param string $name_prefix - Name prefix for the input name, includes the role name if provided.
52 * @param string $data_role - Data attribute - used by the JS.
53 * @param string $role_id - The role name, used to identify the inputs.
54 *
55 * @return string
56 *
57 * @since 2.5.0
58 */
59 public static function reset_settings( string $role = '', string $name_prefix = '', string $data_role = '', string $role_id = '' ) {
60 ob_start();
61
62 if ( class_exists( 'WP2FA\Extensions\RoleSettings\Role_Settings_Controller' ) ) {
63 $password_reset_action = Role_Settings_Controller::get_setting( $role, self::PASSWORD_RESET_SETTINGS_NAME, true );
64 } else {
65 $password_reset_action = Settings::get_role_or_default_setting( self::PASSWORD_RESET_SETTINGS_NAME, null, null, true );
66 }
67 ?>
68 <div class="sub-setting-indent">
69 <fieldset>
70 <label for="<?php echo \esc_attr( self::ENABLED_SETTING_VALUE ); ?><?php echo \esc_attr( $role_id ); ?>" style="margin-bottom: 10px; display: inline-block;">
71 <input type="checkbox" name="<?php echo \esc_attr( $name_prefix ); ?>[<?php echo \esc_attr( self::PASSWORD_RESET_SETTINGS_NAME ); ?>]"
72 id="<?php echo \esc_attr( self::ENABLED_SETTING_VALUE ); ?><?php echo \esc_attr( $role_id ); ?>"
73 <?php echo $data_role; // phpcs:ignore?>
74 value="<?php echo \esc_attr( self::ENABLED_SETTING_VALUE ); ?>" <?php checked( $password_reset_action, self::ENABLED_SETTING_VALUE ); ?> class="js-nested">
75 <span><?php echo \esc_html__( 'Require 2FA on password reset', 'wp-2fa' ); ?></span>
76 </label>
77 </fieldset>
78 </div>
79 <?php
80 $html_content = ob_get_contents();
81 ob_end_clean();
82
83 return $html_content;
84 }
85
86 /**
87 * Adds global plugin setting options.
88 *
89 * @param array $loop_settings - Array with current plugin settings.
90 *
91 * @return array
92 *
93 * @since 2.5.0
94 */
95 public static function add_setting_value( array $loop_settings ) {
96 $loop_settings[] = self::PASSWORD_RESET_SETTINGS_NAME;
97
98 return $loop_settings;
99 }
100
101 /**
102 * Adds the extension default settings to the main plugin settings.
103 *
104 * @param array $default_settings - array with plugin default settings.
105 *
106 * @return array
107 *
108 * @since 2.5.0
109 */
110 public static function add_default_settings( array $default_settings ) {
111 $default_settings[ self::PASSWORD_RESET_SETTINGS_NAME ] = self::PASSWORD_RESET_SETTINGS_NAME;
112
113 return $default_settings;
114 }
115
116 /**
117 * Password reset settings.
118 *
119 * @param string $content - HTML content.
120 * @param string $role - The name of the role.
121 * @param string $name_prefix - Name prefix for the input name, includes the role name if provided.
122 * @param string $data_role - Data attribute - used by the JS.
123 * @param string $role_id - The role name, used to identify the inputs.
124 *
125 * @return string
126 *
127 * @since 2.5.0
128 */
129 public static function password_reset_setting( string $content, string $role = '', string $name_prefix = '', string $data_role = '', string $role_id = '' ) {
130 ob_start();
131 ?>
132 <h3><?php \esc_html_e( 'Do you want to require 2FA when users reset their password?', 'wp-2fa' ); ?></h3>
133 <p class="description">
134 <?php \esc_html_e( 'When you enable this setting users will be required to enter a one-time code sent to them via email when resetting the password.', 'wp-2fa' ); ?>
135 </p>
136
137 <table class="form-table">
138 <tbody>
139 <tr>
140 <th><label for="<?php echo \esc_attr( self::ENABLED_SETTING_VALUE ); ?><?php echo \esc_attr( $role_id ); ?>"><?php \esc_html_e( 'Password reset', 'wp-2fa' ); ?></label></th>
141 <td>
142 <fieldset class="contains-hidden-inputs">
143 <?php echo self::reset_settings( $role, $name_prefix, $data_role, $role_id ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
144 </fieldset>
145 </td>
146 </tr>
147 </tbody>
148 </table>
149 <?php
150
151 $content .= ob_get_contents();
152 ob_end_clean();
153
154 return $content;
155 }
156 }
157 }
158