From 54c71af660b028501f5fa83d0dec9b003ae14fe4 Mon Sep 17 00:00:00 2001 From: Andrey Kutejko Date: Thu, 21 Aug 2014 00:32:21 +0300 Subject: [PATCH] cleanup User model --- ipf/auth/models/User.php | 64 +++------------------------------------- ipf/crypto.php | 14 +++++++++ 2 files changed, 18 insertions(+), 60 deletions(-) diff --git a/ipf/auth/models/User.php b/ipf/auth/models/User.php index ff6536b..bc85456 100644 --- a/ipf/auth/models/User.php +++ b/ipf/auth/models/User.php @@ -205,7 +205,6 @@ class AdminUser extends IPF_Admin_Model class User extends BaseUser { - const UNUSABLE_PASSWORD = '!'; private $profile = null; public function __toString() @@ -216,67 +215,12 @@ class User extends BaseUser return $s; } - public function smartName() - { - $username = $this->username; - if ($username===null) - return __('Anonymous'); - $name = $this->first_name.' '.$this->last_name; - if (trim($name)=='') - return $username; - return $name; - } - - static function createUser($username, $password=null, $email=null, $first_name=null, $last_name=null, $is_active=false, $is_staff=false, $is_superuser=false) - { - $user = new User(); - $user->username = $username; - - if (trim($email)=='') - $user->email = null; - else - $user->email = $email; - - $user->first_name = $first_name; - $user->last_name = $last_name; - $user->is_active = $is_active; - $user->is_staff = $is_staff; - $user->is_superuser = $is_superuser; - - if ($password!==null) - $user->setPassword($password); - else - $user->setUnusablePassword(); - - $user->save(); - return $user; - } - - function setUnusablePassword() - { - $this->password = UNUSABLE_PASSWORD; - } - - static function SetPassword2($raw_password) - { - $salt = IPF_Utils::randomString(5); - return 'sha1:'.$salt.':'.sha1($salt.$raw_password); - } - function setPassword($raw_password) { - $this->password = self::SetPassword2($raw_password); - } - - function checkPassword($password) - { - if ( ($this->password=='') || ($this->password==User::UNUSABLE_PASSWORD) ) - return false; - list($algo, $salt, $hash) = explode(':', $this->password); - if ($hash == $algo($salt.$password)) - return true; + if ($raw_password) + $this->password = IPF_Crypto::hashPassword($raw_password); else - return false; + $this->password = ''; } function isAnonymous() @@ -287,7 +231,7 @@ class User extends BaseUser public static function checkCreditentials($username, $password) { $user = self::table()->findOneByUsername($username); - if ($user && $user->is_active && $user->checkPassword($password)) + if ($user && $user->is_active && IPF_Crypto::checkPassword($password, $user->password)) return $user; else return false; diff --git a/ipf/crypto.php b/ipf/crypto.php index 6b150a9..7aed01e 100644 --- a/ipf/crypto.php +++ b/ipf/crypto.php @@ -22,6 +22,20 @@ class IPF_Crypto return hash_hmac('sha1', $string, self::get_key()); } + public static function hashPassword($rawPassword) + { + $salt = IPF_Utils::randomString(5); + return 'sha1:'.$salt.':'.sha1($salt . $rawPassword); + } + + public static function checkPassword($rawPassword, $hashedPassword) + { + if (!$rawPassword || !$hashedPassword) + return false; + list($algo, $salt, $hash) = explode(':', $hashedPassword); + return $hash === $algo($salt . $rawPassword); + } + private static function get_key() { $secret = self::secretKey(); -- 2.49.0