PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 8.6.2
Admin and Site Enhancements (ASE) v8.6.2
9.1.1 9.1.0 9.0.2 9.0.1 9.0.0 8.9.2 8.9.1 8.9.0 8.8.8 8.8.7 8.8.6 8.8.5 8.8.4 8.8.3 8.8.2 8.8.1 8.8.0 8.7.3 8.7.2 8.7.1 8.2.1 8.2.2 8.2.3 8.3.0 8.3.1 8.3.2 8.4.0 8.4.1 8.4.2 8.5.0 8.5.1 8.5.2 8.6.0 8.6.1 8.6.2 8.7.0 5.0.1 5.0.2 5.0.2.1 5.0.2.2 5.0.2.3 5.0.2.4 5.1.0 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.8.0 5.8.1 6.0.0 6.0.3 6.0.4 6.0.5 6.0.5.1 6.0.6 6.0.7 6.0.8.1 6.1.0 6.1.3 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.3.0 6.3.1 6.3.2 6.4.0 6.5.0 6.5.1 6.6.0 6.7.0 6.8.0 6.8.2 6.8.3 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13.1 6.9.13.2 6.9.2 6.9.3 6.9.4 6.9.5 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.2 7.0.2.1 7.0.2.2 7.0.2.3 7.0.3 7.1.0 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2.0 7.2.1 7.3.0 7.3.1 7.3.2 7.3.3 7.4.0 7.4.2 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.5.0 7.5.1 7.5.2 7.5.3 7.5.4 7.6.0 7.6.1 7.6.1.1 7.6.10 7.6.11 7.6.2 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.7.1 7.6.8 7.6.9 7.7.0 7.8.0 7.8.1 7.8.10 7.8.11 7.8.12 7.8.13 7.8.14 7.8.15 7.8.16 7.8.17 7.8.18 7.8.2 7.8.3 7.8.4 7.8.5 7.8.5.1 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1 7.9.10 7.9.11 7.9.2 7.9.3 7.9.4 7.9.5 7.9.6 7.9.7 7.9.8 7.9.9 8.0.0 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.0.6 8.0.7 8.0.8 8.1.0 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 trunk 1.0.0 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0 1.6.0 1.7.0 1.8.0 1.9.0 2.0.0 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.1 3.7.0 3.8.0 3.9.0 3.9.1 3.9.2 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.9.0 4.9.1 4.9.2 4.9.3 5.0.0
admin-site-enhancements / classes / class-password-protection.php
admin-site-enhancements / classes Last commit date
class-activation.php 4 months ago class-admin-menu-organizer.php 4 months ago class-admin-menu-svg-icon-mask.php 4 months ago class-auto-publish-posts-with-missed-schedule.php 4 months ago class-avif-upload.php 4 months ago class-captcha-protection.php 4 months ago class-change-login-url.php 4 months ago class-cleanup-admin-bar.php 4 months ago class-common-methods.php 4 months ago class-content-duplication.php 4 months ago class-content-order.php 4 months ago class-custom-admin-footer-text.php 4 months ago class-custom-body-class.php 4 months ago class-custom-css.php 4 months ago class-custom-nav-menu-items-in-new-tab.php 4 months ago class-deactivation.php 4 months ago class-disable-author-archives.php 4 months ago class-disable-comments.php 4 months ago class-disable-dashboard-widgets.php 4 months ago class-disable-embeds.php 4 months ago class-disable-feeds.php 4 months ago class-disable-gutenberg.php 4 months ago class-disable-rest-api.php 4 months ago class-disable-smaller-components.php 4 months ago class-disable-updates.php 4 months ago class-disable-xml-rpc.php 4 months ago class-display-system-summary.php 4 months ago class-email-address-obfuscator.php 4 months ago class-email-delivery.php 4 months ago class-enhance-list-tables.php 4 months ago class-external-permalinks.php 4 months ago class-heartbeat-control.php 4 months ago class-hide-admin-bar.php 4 months ago class-hide-admin-notices.php 4 months ago class-image-sizes-panel.php 4 months ago class-image-upload-control.php 4 months ago class-insert-head-body-footer-code.php 4 months ago class-last-login-column.php 4 months ago class-limit-login-attempts.php 4 months ago class-login-id-type.php 4 months ago class-login-logout-menu.php 4 months ago class-maintenance-mode.php 4 months ago class-manage-ads-appads-txt.php 4 months ago class-manage-robots-txt.php 4 months ago class-media-files-visibility-control.php 4 months ago class-media-replacement.php 4 months ago class-multiple-user-roles.php 4 months ago class-obfuscate-author-slugs.php 4 months ago class-open-external-links-in-new-tab.php 4 months ago class-password-protection.php 4 months ago class-redirect-after-login.php 4 months ago class-redirect-after-logout.php 4 months ago class-redirect-fourofour.php 4 months ago class-registration-date-column.php 4 months ago class-revisions-control.php 4 months ago class-search-engines-visibility.php 4 months ago class-settings-fields-render.php 4 months ago class-settings-sanitization.php 4 months ago class-settings-sections-fields.php 4 months ago class-show-custom-taxonomy-filters.php 4 months ago class-site-identity-on-login-page.php 4 months ago class-svg-upload.php 4 months ago class-various-admin-ui-enhancements.php 4 months ago class-view-admin-as-role.php 4 months ago class-wider-admin-menu.php 4 months ago class-wp-config-transformer.php 4 months ago
class-password-protection.php
214 lines
1 <?php
2
3 namespace ASENHA\Classes;
4
5 use WP_Error;
6 /**
7 * Class for Password Protection module
8 *
9 * @since 6.9.5
10 */
11 class Password_Protection {
12 /**
13 * Show Password Protection admin bar status icon
14 *
15 * @since 4.1.0
16 */
17 public function show_password_protection_admin_bar_icon() {
18 add_action( 'wp_before_admin_bar_render', [$this, 'add_password_protection_admin_bar_item'] );
19 add_action( 'admin_head', [$this, 'add_password_protection_admin_bar_item_styles'] );
20 add_action( 'wp_head', [$this, 'add_password_protection_admin_bar_item_styles'] );
21 }
22
23 /**
24 * Add WP Admin Bar item
25 *
26 * @since 4.1.0
27 */
28 public function add_password_protection_admin_bar_item() {
29 global $wp_admin_bar;
30 if ( is_user_logged_in() ) {
31 if ( current_user_can( 'manage_options' ) ) {
32 $wp_admin_bar->add_menu( array(
33 'id' => 'password_protection',
34 'title' => '',
35 'href' => admin_url( 'tools.php?page=admin-site-enhancements#utilities' ),
36 'meta' => array(
37 'title' => __( 'Password protection is currently enabled for this site.', 'admin-site-enhancements' ),
38 ),
39 ) );
40 }
41 }
42 }
43
44 /**
45 * Add icon and CSS for admin bar item
46 *
47 * @since 4.1.0
48 */
49 public function add_password_protection_admin_bar_item_styles() {
50 if ( is_user_logged_in() ) {
51 if ( current_user_can( 'manage_options' ) ) {
52 ?>
53 <style>
54 #wp-admin-bar-password_protection {
55 background-color: #c32121 !important;
56 transition: .25s;
57 }
58 #wp-admin-bar-password_protection > .ab-item {
59 color: #fff !important;
60 }
61 #wp-admin-bar-password_protection > .ab-item:before {
62 content: "\f160";
63 top: 2px;
64 color: #fff !important;
65 margin-right: 0px;
66 }
67 #wp-admin-bar-password_protection:hover > .ab-item {
68 background-color: #af1d1d !important;
69 color: #fff;
70 }
71 </style>
72 <?php
73 }
74 }
75 }
76
77 /**
78 * Disable page caching
79 *
80 * @since 4.1.0
81 */
82 public function maybe_disable_page_caching() {
83 if ( !defined( 'DONOTCACHEPAGE' ) ) {
84 define( 'DONOTCACHEPAGE', true );
85 }
86 }
87
88 /**
89 * Maybe show login form
90 *
91 * @since 4.1.0
92 */
93 public function maybe_show_login_form() {
94 // Do not redirect WP-Cron requests; wp-cron.php must return from bootstrap so core can run scheduled hooks.
95 if ( function_exists( 'wp_doing_cron' ) && wp_doing_cron() ) {
96 return;
97 }
98 if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
99 return;
100 }
101 $options = get_option( ASENHA_SLUG_U, array() );
102 $stored_password = $options['password_protection_password'];
103 // When user is logged-in as in an administrator
104 if ( is_user_logged_in() ) {
105 if ( current_user_can( 'manage_options' ) ) {
106 return;
107 // Do not load login form or perform redirection to the login form
108 }
109 }
110 // When site visitor has entered correct password, get the auth cookie
111 $auth_cookie = ( isset( $_COOKIE['asenha_password_protection'] ) ? $_COOKIE['asenha_password_protection'] : '' );
112 // Compared $auth_cookie against hashed string set in maybe_process_login()
113 if ( true === wp_check_password( $_SERVER['HTTP_HOST'] . '__' . $stored_password, $auth_cookie ) ) {
114 return;
115 // Do not load login form or perform redirection to the login form
116 }
117 if ( isset( $_REQUEST['protected-page'] ) && 'view' == $_REQUEST['protected-page'] ) {
118 // Show login form
119 $password_protected_login_page_template = ASENHA_PATH . 'includes/password-protected-login.php';
120 load_template( $password_protected_login_page_template );
121 exit;
122 } else {
123 // Redirect from current URL to login form
124 $current_url = (( is_ssl() ? 'https://' : 'http://' )) . sanitize_text_field( $_SERVER['HTTP_HOST'] ) . sanitize_text_field( $_SERVER['REQUEST_URI'] );
125 $args = array(
126 'protected-page' => 'view',
127 'source' => urlencode( $current_url ),
128 );
129 $pwd_protect_login_url = add_query_arg( $args, home_url( '/' ) );
130 nocache_headers();
131 wp_safe_redirect( $pwd_protect_login_url );
132 exit;
133 }
134 }
135
136 /**
137 * Maybe process login to access protected page content
138 *
139 * @since 4.1.0
140 */
141 public function maybe_process_login() {
142 global $password_protected_errors;
143 $password_protected_errors = new WP_Error();
144 if ( isset( $_REQUEST['protected_page_pwd'] ) ) {
145 $password_input = sanitize_text_field( $_REQUEST['protected_page_pwd'] );
146 $options = get_option( ASENHA_SLUG_U, array() );
147 $stored_password = $options['password_protection_password'];
148 if ( !empty( $password_input ) ) {
149 if ( $password_input == $stored_password ) {
150 // Password is correct
151 // Set auth cookie
152 // $expiration = time() + DAY_IN_SECONDS; // in 24 hours
153 $expiration = 0;
154 // by the end of browsing session
155 $hashed_cookie_value = wp_hash_password( $_SERVER['HTTP_HOST'] . '__' . $stored_password );
156 setcookie(
157 'asenha_password_protection',
158 $hashed_cookie_value,
159 $expiration,
160 COOKIEPATH,
161 COOKIE_DOMAIN,
162 false,
163 true
164 );
165 // Redirect
166 $redirect_to_url = ( isset( $_REQUEST['source'] ) ? sanitize_url( $_REQUEST['source'] ) : '' );
167 wp_safe_redirect( $redirect_to_url );
168 exit;
169 } else {
170 // Password is incorrect
171 // Add error message
172 $password_protected_errors->add( 'incorrect_password', __( 'Incorrect password.', 'admin-site-enhancements' ) );
173 }
174 } else {
175 // Password input is empty
176 // Add error message
177 $password_protected_errors->add( 'empty_password', __( 'Password can not be empty.', 'admin-site-enhancements' ) );
178 }
179 }
180 }
181
182 /**
183 * Add custom login error messages
184 *
185 * @since 4.1.0
186 */
187 public function add_login_error_messages() {
188 global $password_protected_errors;
189 if ( $password_protected_errors->get_error_code() ) {
190 $messages = '';
191 $errors = '';
192 // Extract the error message
193 foreach ( $password_protected_errors->get_error_codes() as $code ) {
194 $severity = $password_protected_errors->get_error_data( $code );
195 foreach ( $password_protected_errors->get_error_messages( $code ) as $error ) {
196 if ( 'message' == $severity ) {
197 $messages .= $error . '<br />';
198 } else {
199 $errors .= $error . '<br />';
200 }
201 }
202 }
203 // Output the error message
204 if ( !empty( $messages ) ) {
205 echo '<p class="message">' . wp_kses_post( $messages ) . '</p>';
206 }
207 if ( !empty( $errors ) ) {
208 echo '<div id="login_error">' . wp_kses_post( $errors ) . '</div>';
209 }
210 }
211 }
212
213 }
214