array( 'Username' => "Username", 'Hash' => "Hash", 'Salt' => "Salt", 'EmailAddress' => "EmailAddress" ), 'boolean' => array( 'IsAdmin' => "Admin", 'IsBanned' => "Banned" ), 'timestamp' => array( "RegistrationDate" => "RegistrationDate" ) ); public function GenerateSalt() { $this->uSalt = random_string(10); } public function GenerateHash() { if(!empty($this->uSalt)) { if(!empty($this->uPassword)) { $this->uHash = $this->CreateHash($this->uPassword); } else { throw new Exception("User object is missing a password."); } } else { throw new Exception("User object is missing a salt."); } } public function CreateHash($input) { global $cphp_config; $hash = crypt($input, "$5\$rounds=50000\${$this->uSalt}{$cphp_config->salt}$"); $parts = explode("$", $hash); return $parts[4]; } public function VerifyPassword($password) { if($this->CreateHash($password) == $this->sHash) { return true; } else { return false; } } public function Authenticate() { $_SESSION['user_id'] = $this->sId; $_SESSION['logout_key'] = random_string(32); $_SESSION['is_admin'] = $this->sIsAdmin; $this->SetGlobalVariables(); } public function Deauthenticate() { unset($_SESSION['user_id']); unset($_SESSION['is_admin']); } public function SetGlobalVariables() { NewTemplater::SetGlobalVariable("my-username", $this->sUsername); NewTemplater::SetGlobalVariable("logout-key", $_SESSION['logout_key']); } public static function CheckIfUsernameExists($username) { try { $result = User::FindByUsername($username); return true; } catch (NotFoundException $e) { return false; } } public static function FindByUsername($username) { return self::CreateFromQuery("SELECT * FROM users WHERE `Username` = :Username", array(':Username' => $username), 0, true); } public static function CheckIfEmailAddressExists($username) { try { $result = User::FindByEmailAddress($username); return true; } catch (NotFoundException $e) { return false; } } public static function FindByEmailAddress($email) { return self::CreateFromQuery("SELECT * FROM users WHERE `EmailAddress` = :EmailAddress", array(':EmailAddress' => $email), 0, true); } }