# easy-basic-authentication/1.6/class/easy-basic-authentication-form-class.php

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

- Page: https://pluginprobe.com/plugins/easy-basic-authentication/1.6/code/class/easy-basic-authentication-form-class.php
- Raw: https://pluginprobe.com/plugins/easy-basic-authentication/1.6/raw/class/easy-basic-authentication-form-class.php
- Modified: 2024-03-10T01:05:02+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.6/code/class/easy-basic-authentication-form-class.php#L10-L20`.

```php
<?php 

class easy_basic_authentication_form_class {

    const FORM_FIELD = array(
        '0' => array(
            'id'        => 'basic-auth-plugin-admin-enable',
            'title'     => 'Enable for wp-admin',
            'callback'  => 'basic_auth_plugin_admin_enable_cb',
        ),
        '1' => array(
            'id'        => 'basic-auth-plugin-enable',
            'title'     => 'Enable for the entire site (only if wp-admin is enabled)',
            'callback'  => 'basic_auth_plugin_enable_cb',
        ),
        '2' => array(
            'id'        => 'basic-auth-plugin-username',
            'title'     => 'Username',
            'callback'  => 'basic_auth_plugin_username_cb',
        ),
        '3' => array(
            'id'        => 'basic-auth-plugin-password',
            'title'     => 'Password',
            'callback'  => 'basic_auth_plugin_password_cb',
        ),
        '4' => array(
            'id'        => 'basic-auth-plugin-admin-log-enable',
            'title'     => 'Enable access logs',
            'callback'  => 'basic_auth_plugin_admin_log_enable_cb',
        ),
        '5' => array(
            'id'        => 'basic-auth-plugin-alert-enable',
            'title'     => 'Enable email alert',
            'callback'  => 'basic_auth_plugin_alert_enable_cb',
        ),
        '6' => array(
            'id'        => 'basic-auth-plugin-email-alert',
            'title'     => 'Email for alert',
            'callback'  => 'basic_auth_plugin_alertemail_cb',
        ),
        '7' => array(
            'id'        => 'basic-auth-plugin-white-list',
            'title'     => 'Ip White list',
            'callback'  => 'basic_auth_plugin_whitelist_cb',
        )
    );

    public function __construct()
    {
        
    }
    
    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' );
        register_setting( 'basic-auth-plugin-settings', 'basic_auth_plugin_whitelist' );
    
        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'
        );
    
        foreach(self::FORM_FIELD as $field) {
            add_settings_field(
                $field['id'],
                __($field['title'], 'easy-basic-authentication'),
                array($this,$field['callback']),
                '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' );
        $this->printInputText("text","basic_auth_plugin_username",esc_attr( $username ));
    }
    
    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');
        $this->printInputText("password","basic_auth_plugin_password",'',$password);
    }
    
    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_alert_enable_cb() {
        $enable = get_option( 'basic_auth_plugin_alert_enable' );
        ?>
        <input type="checkbox" name="basic_auth_plugin_alert_enable" value="1" <?php checked( $enable, 1 ); ?>>
        <?php
    }
    
    public function basic_auth_plugin_alertemail_cb() {
        $email_alert = get_option( 'basic_auth_plugin_alertemail' );
        $this->printInputText("text","basic_auth_plugin_alertemail",esc_attr( $email_alert ),__('Enter the email', 'easy-basic-authentication'));
    }
    
    public function basic_auth_plugin_whitelist_cb() {
        $white_list = get_option( 'basic_auth_plugin_whitelist' );
        $this->printInputText("text","basic_auth_plugin_whitelist",esc_attr( $white_list ),__('White list, separated by comma', 'easy-basic-authentication'));
    }

    public function printInputText($tipe, $name, $value='', $placeholder = '') {
        echo "<input type='$tipe' name='$name' value='$value' placeholder='$placeholder'>";
    }

    public function basic_auth_plugin_save_settings($param) {
        if ( isset( $param['eba_submit'] ) ) {
            $admin_enable = isset( $param['basic_auth_plugin_admin_enable'] ) ? 1 : 0;
            $enable = isset( $param['basic_auth_plugin_enable'] ) ? 1 : 0;
            $username = sanitize_text_field( $param['basic_auth_plugin_username'] );
            $password = sanitize_text_field( $param['basic_auth_plugin_password'] );
            $log_enable = isset( $param['basic_auth_plugin_admin_log_enable'] ) ? 1 : 0;
            $alert_enable = isset( $param['basic_auth_plugin_alert_enable'] ) ? 1 : 0;
            $alert_email = sanitize_text_field( $param['basic_auth_plugin_alertemail'] );
            $white_list = sanitize_text_field( $param['basic_auth_plugin_whitelist'] );

            if ( !is_email( $alert_email ) ) {
                add_settings_error(
                    'basic_auth_plugin_alertemail',
                    'basic_auth_plugin_alertemail_error',
                    __('Invalid email address', 'easy-basic-authentication'),
                    'error'
                );
            } else {
                update_option( 'basic_auth_plugin_alertemail', $alert_email );
            }
    
            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 );
            update_option( 'basic_auth_plugin_alert_enable', $alert_enable );
            

            if (strlen($white_list)) {
                if( $this->validateIpList( $white_list ) ) {
                    update_option( 'basic_auth_plugin_whitelist', $white_list );
                } else {
                    add_settings_error(
                        'basic_auth_plugin_whitelist',
                        'basic_auth_plugin_whitelist_error',
                        __('Invalid whitelist format. Please enter valid ip addresses separated by commas.', 'easy-basic-authentication'),
                        'error'
                    );
                }    
            }
            if ( ! empty( $password ) ) {
                $hashed_password = wp_hash_password( $password );
                update_option( 'basic_auth_plugin_password', $hashed_password );
            }
        }
    }
    
    public function basic_auth_plugin_settings_page() {
        include plugin_dir_path( __FILE__ ) . '../template/settings_page.php';
    } 

    public function validateIpList($white_list) {
        $pattern = '/^(\s*(?:\d{1,3}\.){3}\d{1,3}\s*(?:,\s*|$))+$/';

        if ( preg_match( $pattern, $white_list ) ) {
            return true;
        }
        return false;

    }
}
```
