Auth.php 3.53 KB
<?php
class Auth {
    const REG_METH_AUTO_REG    = 1;
    const REG_METH_VALID_EMAIL = 2;

    const FORGOT_METH_VALID_EMAIL = 1;
    const FORGOT_METH_RAND_PASS   = 2;

    const ACTION_ACTIVATE = 'activate_account';

    public static function make() {
        static $made = false;
        if (true === $made) {
            throw new Exception('Auth has already been instantiated');
        }
        $made = true;

        // if _GET activate self::activate();
    }

    /**
     * Attempts to login the user
     * @param {String} $username
     * @param {String} $password
     * @param {Boolean} $remember
     * @returns WP_User instance
     * @throws LogicException If headers have already been passed
     * @throws InvalidArgumentException If the authentication is invalid
     */
    public static function login($username, $password, $remember = true) {
        if (headers_sent()) {
            throw new LogicException('Unable to login because headers have been sent');
        }

        $auth = _signon(Array(
            'user_login'    => $username
          , 'user_password' => esc_sql($password)
          , 'remember'      => $remember
        ));

        $ref = new ReflectionObject($auth);
        if ($ref->name == 'WP_User') {
            return $auth;
        }

        throw new InvalidArgumentException('Invalid username/password');
            //$auth->get_error_message()); this would be nice except it links to a wp-page
    }

    /**
     * Attempts to log the user out
     * @returns Boolean
     * @throws LogicException If HTTP headers have already been sent
     */
    public static function logout() {
        if (headers_sent()) {
            throw new LogicException('Unable to logout because headers have been sent');
        }

        _logout();

        return true;
    }

    public static function register($user_data = Array(), $registration_method) {
    }

    public static function activate() {
        do_action(self::ACTION_ACTIVATE, $user_id);
    }

    public static function forgot_password($username, $forgot_method) {
        
    }
}

class Auth_Validation {
    public static $errors = Array();

    /**
     * @rule Not blank
     * @rule Valid WordPress username
     * @returns Boolean
     */
    public static function username($val) {
        if (empty($val)) {
            self::$errors[] = 'Username is blank';
            return false;
        }

        require_once(ABSPATH . WPINC . DIRECTORY_SEPARATOR . 'registration.php');
        if (!validate_username($val)) {
            self::$errors[] = 'Username must be at least 4 characters, letters and numbers only';
            return false;
        }

        if (username_exists($_POST['reg_username'])) {
            self::$errors[] = 'Username already exists';
            return false;
        }

        return true;
    }

    /**
     * @rule Not blank
     * @returns Boolean 
     */
    public static function password($val) {
        if (empty($val)) {
            self::$errors[] = 'Password can not be blank';
            return false;
        }
        self::$pass_check = $val;

        return true;
    }

    /**
     * @rule Valid email address (*@*.*)
     * @returns Boolean
     */
    public static function email($val) {
        if (!(boolean)filter_var($val, FILTER_VALIDATE_EMAIL)) {
            self::$errors[] = 'Invalid email address';
            return false;
        }

        if (false !== email_exists($val)) {
            self::$errors[] = 'Email address already registered';
            return false;
        }

        return true;
    }
}
?>