class User extends BaseUser
{
- const UNUSABLE_PASSWORD = '!';
private $profile = null;
public function __toString()
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()
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;
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();