summaryrefslogblamecommitdiffstats
path: root/app/class/user.class.php
blob: bd2e1743df5e2b0150087b5e60bb59dc9cf11d73 (plain) (tree)


















                                      
                    







                                           

      














                                                                                                              













                                                                                 





















































                                                                                                     








                                                                                     


  
<?php

require_once "class/object.class.php";

/*
 * Application users
 */
class User extends Object
{
    /*
     * Constructor
     */
    function __construct($guid = null)
    {
        $cols = array(
            "guid",
            "key",
            "salt",
            "alias",
            "admin",
            "email",
            "emailConf",
            "emailConfKey"
        );

        parent::__construct("user", $cols);
        $this->loadObj($guid);
    }

    /*
     * Initialize object by username
     */
    function initByUsername($username)
    {
        $query = "SELECT guid FROM object WHERE type = 'user' AND name = '" . $this->db->esc($username) . "'";
        $result = $this->db->query($query);

        if (count($result) == 0)
            return false;

        $this->loadObj($result[0]['guid']);
        return true;
    }

    /*
     * Get all users -- ordered by name, ascending
     */
    function getAllUsers_orderByName()
    {
        $query = "SELECT guid FROM `object` WHERE `type` = 'user' ORDER BY name";
        $result = $this->db->query($query);

        $users = array();

        foreach ($result as $u)
            $users[] = new User($u['guid']);

        return $users;
    }

    /*
     * Check whether a given username is currently in use
     */
    function usernameInUse($username)
    {
        $escd_username = $this->db->esc($username);

        $query = "SELECT name FROM object WHERE type = 'user' AND name = '" . $escd_username . "'";
        $results = $this->db->query($query);

        if (count($results) > 0)
            return true;

        return false;
    }

    /*
     * Generate a key from a user's password and salt
     */
    function getKey($password, $salt)
    {
        return hash("sha256", $salt . $password);
    }

    /*
     * Create a new User object with the given username and keyed with the given plain-text password
     * This function returns false if $username is already being used
     * On success, this object should be initialized as the new user (use only on new User() objects)
     */
    function createNewUser($username, $password)
    {
        if ($this->usernameInUse($username))
            return false;

        /* if there exist no users already, make this new one an admin */
        if (count($this->getAllUsers_orderByName()) == 0)
            $this->admin = 1;

        $this->perms = 0;
        $this->name = $username;
        $this->type = "user";
        $this->salt = $this->getBlob();
        $this->key = $this->getKey($password, $this->salt);
        $this->emailConf = 0;
        $this->emailConfKey = $this->getBlob();

        $this->saveObj();

        $this->owner = $this->guid;
        $this->saveObj();

        return true;
    }

    /*
     * Validate the password for this user.  Returns true if correct, false otherwise
     */
    function validatePassword($password)
    {
        $key = $this->getKey($password, $this->salt);
        return $key == $this->key;
    }
}

?>