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

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

- Page: https://pluginprobe.com/plugins/easy-basic-authentication/1.3.1/code/class/easy-basic-authentication-class.php
- Raw: https://pluginprobe.com/plugins/easy-basic-authentication/1.3.1/raw/class/easy-basic-authentication-class.php
- Modified: 2023-10-10T17:31:28+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.1/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();
            
            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();
    
            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') . '<span class="update-plugins count-' . $access_count . '"><span class="plugin-count">' . $access_count . '</span></span>', 
            'manage_options',
            'basic-auth-plugin',
            array($this, 'basic_auth_plugin_settings_page'),
            'dashicons-lock'
        );
    
        add_submenu_page(
            'basic-auth-plugin',
            __('Log Page', 'easy-basic-authentication'), 
            __('Log Page', 'easy-basic-authentication'), 
            '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' );
    
        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'
        );
        
    }
    
    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_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'] );
    
            update_option( 'basic_auth_plugin_admin_enable', $admin_enable );
            update_option( 'basic_auth_plugin_enable', $enable );
            update_option( 'basic_auth_plugin_username', $username );
    
            if ( ! empty( $password ) ) {
                $hashed_password = wp_hash_password( $password );
                update_option( 'basic_auth_plugin_password', $hashed_password );
            }
        }
    }

    public function basic_auth_log_failed_access() {
        $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
        );

        $logs[] = $log_entry;

        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);
    }
    
}

```
