# easy-basic-authentication/1.3.4/class/easy-basic-authentication-class.php

Easy Basic Authentication – Add basic auth to site or admin area, version 1.3.4. 270 lines.

- Page: https://pluginprobe.com/plugins/easy-basic-authentication/1.3.4/code/class/easy-basic-authentication-class.php
- Raw: https://pluginprobe.com/plugins/easy-basic-authentication/1.3.4/raw/class/easy-basic-authentication-class.php
- Modified: 2023-10-18T17:20:12+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/easy-basic-authentication/1.3.4/code/class/easy-basic-authentication-class.php#L10-L20`.

```php
<?php 

class easy_basic_authentication_class {


    public function __construct()
    {
        if(get_option( 'basic_auth_plugin_admin_enable' )) {
            if (in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php'))) {
                add_action( 'init', array($this,'basic_auth_admin') );
            }
        }

        if(get_option( 'basic_auth_plugin_enable' ) && get_option( 'basic_auth_plugin_admin_enable' )){
            add_action( 'init', array($this,'basic_auth_root') );
        }
        
        add_action( 'admin_menu', array($this,'basic_auth_plugin_menu' ));
        add_action( 'admin_init', array($this,'basic_auth_plugin_settings_init' ));

        add_action( 'admin_init', array($this,'basic_auth_plugin_save_settings') );
        
    }

    public function basic_auth_root() {
        $user = get_option( 'basic_auth_plugin_username' ); 
        $pass = get_option( 'basic_auth_plugin_password' ); 
    
        if ( !isset( $_SERVER['PHP_AUTH_USER'] ) || !isset( $_SERVER['PHP_AUTH_PW'] ) ||
             $_SERVER['PHP_AUTH_USER'] != $user || !wp_check_password( $_SERVER['PHP_AUTH_PW'], $pass ) ) {
            
            $this->basic_auth_log_failed_access();

            do_action('basic_auth_before_401');
            
            header( 'WWW-Authenticate: Basic realm="My Website"' );
            header( 'HTTP/1.0 401 Unauthorized' );
            echo 'Autenticazione richiesta';
            exit;
        }
    }
    
    public function basic_auth_admin() {
        $user = get_option( 'basic_auth_plugin_username' ); 
        $pass = get_option( 'basic_auth_plugin_password' ); 
    
        if ( !isset( $_SERVER['PHP_AUTH_USER'] ) || !isset( $_SERVER['PHP_AUTH_PW'] ) ||
            $_SERVER['PHP_AUTH_USER'] != $user || !wp_check_password( $_SERVER['PHP_AUTH_PW'], $pass ) ) {
            
            $this->basic_auth_log_failed_access();

            do_action('basic_auth_before_401');

            header( 'HTTP/1.1 401 Unauthorized' );
            header( 'WWW-Authenticate: Basic realm="Admin Area"' );
            exit;
        }        
    }
    
    
    public function basic_auth_plugin_menu() {
        $access_count = $this->basic_auth_count_not_viewed_log_failed_access();
        add_menu_page(
            __('Configurations for Easy Basic Authentication', 'easy-basic-authentication'), 
            __('Easy Basic A.', 'easy-basic-authentication'), 
            'manage_options',
            'basic-auth-plugin',
            array($this, 'basic_auth_plugin_settings_page'),
            'dashicons-lock'
        );
        if($this->log_is_enabled()) {
            add_submenu_page(
                'basic-auth-plugin',
                __('Log Page', 'easy-basic-authentication'), 
                __('Log Page', 'easy-basic-authentication'). '<span class="update-plugins count-' . $access_count . '"><span class="plugin-count">' . $access_count . '</span></span>', 
                'manage_options',
                'basic-auth-login', 
                array($this, 'basic_auth_login_page')
            );
        }
        
    }
    
    public function basic_auth_login_page() {
        if(array_key_exists('clear_mode',$_POST)) {
            update_option('basic_auth_failure_logs', array());
        }
        $user_log_data = array_reverse($this->basic_auth_get_log_failed_access());
        include plugin_dir_path( __FILE__ ) . '../template/log_page.php';
        $this->update_view();
    }
    

    public function basic_auth_plugin_settings_page() {
        include plugin_dir_path( __FILE__ ) . '../template/settings_page.php';
    }
    
    public function basic_auth_plugin_settings_init() {
        register_setting( 'basic-auth-plugin-settings', 'basic_auth_plugin_admin_enable' );
        register_setting( 'basic-auth-plugin-settings', 'basic_auth_plugin_enable' );
        register_setting( 'basic-auth-plugin-settings', 'basic_auth_plugin_username' );
        register_setting( 'basic-auth-plugin-settings', 'basic_auth_plugin_admin_log_enable' );
    
        add_settings_section(
            'basic-auth-plugin-section',
            __('Configurations for Easy Basic Authentication', 'easy-basic-authentication'),
            array($this,'basic_auth_plugin_section_cb'),
            'basic-auth-plugin-settings'
        );
    
        add_settings_field(
            'basic-auth-plugin-admin-enable',
            __('Enable for wp-admin', 'easy-basic-authentication'),
            array($this,'basic_auth_plugin_admin_enable_cb'),
            'basic-auth-plugin-settings',
            'basic-auth-plugin-section'
        );
    
        add_settings_field(
            'basic-auth-plugin-enable',
            __('Enable for the entire site (only if wp-admin is enabled)', 'easy-basic-authentication'),
            array($this,'basic_auth_plugin_enable_cb'),
            'basic-auth-plugin-settings',
            'basic-auth-plugin-section'
        );
    
        add_settings_field(
            'basic-auth-plugin-username',
            __('Username', 'easy-basic-authentication'),
             array($this,'basic_auth_plugin_username_cb'),
            'basic-auth-plugin-settings',
            'basic-auth-plugin-section'
        );
    
        add_settings_field(
            'basic-auth-plugin-password',
            __('Password', 'easy-basic-authentication'),
            array($this,'basic_auth_plugin_password_cb'),
            'basic-auth-plugin-settings',
            'basic-auth-plugin-section'
        );
    
        add_settings_field(
            'basic-auth-plugin-admin-log-enable',
            __('Enable access logs', 'easy-basic-authentication'),
            array($this,'basic_auth_plugin_admin_log_enable_cb'),
            'basic-auth-plugin-settings',
            'basic-auth-plugin-section'
        );
        
    }
    
    public function basic_auth_plugin_section_cb() {
        echo __('Configure basic authentication', 'easy-basic-authentication');
    }
    
    public function basic_auth_plugin_enable_cb() {
        $admin_enable = get_option( 'basic_auth_plugin_admin_enable' );
        $enable = get_option( 'basic_auth_plugin_enable' );
        ?>
        <input type="checkbox" name="basic_auth_plugin_enable" value="1" <?php checked( $enable, 1 ); ?><?php disabled( !$admin_enable ); ?>>
        <?php
    }
    
    public function basic_auth_plugin_admin_enable_cb() {
        $enable = get_option( 'basic_auth_plugin_admin_enable' );
        ?>
        <input type="checkbox" name="basic_auth_plugin_admin_enable" value="1" <?php checked( $enable, 1 ); ?>>
        <?php
    }
    
    public function basic_auth_plugin_username_cb() {
        $username = get_option( 'basic_auth_plugin_username' );
        ?>
        <input type="text" name="basic_auth_plugin_username" value="<?php echo esc_attr( $username ); ?>">
        <?php
    }
    
    public function basic_auth_plugin_password_cb() {
        $password = get_option( 'basic_auth_plugin_password' )
                    ? __('Password entered', 'easy-basic-authentication')
                    : __('Enter the password', 'easy-basic-authentication');
        ?>
        <input type="password" name="basic_auth_plugin_password" value="" placeholder="<?php echo $password; ?>">
        <?php
    }
    
    public function basic_auth_plugin_admin_log_enable_cb() {
        $enable = get_option( 'basic_auth_plugin_admin_log_enable' );
        ?>
        <input type="checkbox" name="basic_auth_plugin_admin_log_enable" value="1" <?php checked( $enable, 1 ); ?>>
        <?php
    }
    
    
    public function basic_auth_plugin_save_settings() {
        if ( isset( $_POST['eba_submit'] ) ) {
            $admin_enable = isset( $_POST['basic_auth_plugin_admin_enable'] ) ? 1 : 0;
            $enable = isset( $_POST['basic_auth_plugin_enable'] ) ? 1 : 0;
            $username = sanitize_text_field( $_POST['basic_auth_plugin_username'] );
            $password = sanitize_text_field( $_POST['basic_auth_plugin_password'] );
            $log_enable = isset( $_POST['basic_auth_plugin_admin_log_enable'] ) ? 1 : 0;
    
            update_option( 'basic_auth_plugin_admin_enable', $admin_enable );
            update_option( 'basic_auth_plugin_enable', $enable );
            update_option( 'basic_auth_plugin_username', $username );
            update_option( 'basic_auth_plugin_admin_log_enable', $log_enable );
    
            if ( ! empty( $password ) ) {
                $hashed_password = wp_hash_password( $password );
                update_option( 'basic_auth_plugin_password', $hashed_password );
            }
        }
    }

    public function basic_auth_log_failed_access() {
        if($this->log_is_enabled()) {
            $logs = get_option('basic_auth_failure_logs', array());

            $log_entry = array(
                'id' => uniqid(),
                'ip' => $_SERVER['REMOTE_ADDR'],
                'data' => current_time('mysql'),
                'browser' => $_SERVER['HTTP_USER_AGENT'],
                'viewed' => 0
            );

            $log_entry = apply_filters('basic_auth_single_log_entry', $log_entry);

            $logs[] = $log_entry;

            $logs = apply_filters('basic_auth_logs_entry', $logs);

            update_option('basic_auth_failure_logs', $logs);
        }
    }

    public function basic_auth_get_log_failed_access() {
        return get_option('basic_auth_failure_logs', array());
    }

    public function basic_auth_count_log_failed_access() {
        return count($this->basic_auth_get_log_failed_access());
    }

    public function basic_auth_not_viewed_log_failed_access() {
        $return_not_viewed = array_filter($this->basic_auth_get_log_failed_access(), function ($entry) {
            return isset($entry['viewed']) && $entry['viewed'] === 0;
        });
        return $return_not_viewed;
    }

    public function basic_auth_count_not_viewed_log_failed_access() {
        return count($this->basic_auth_not_viewed_log_failed_access());
    }

    public function update_view() {
        $logs = get_option('basic_auth_failure_logs', array());
        foreach ($logs as &$entry) {
            $entry['viewed'] = 1;
        }
        update_option('basic_auth_failure_logs', $logs);
    }
 
    public function log_is_enabled() {
        return get_option( 'basic_auth_plugin_admin_log_enable' );
    }

}

```
