Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Member extends AppModel
- {
- public $validate = array(
- 'name' => array(
- 'length' => array(
- 'rule' => array('minLength', 2),
- 'message' => 'Name must be at least 2 characters',
- ),
- 'unique' => array(
- 'rule' => 'isUnique',
- 'message' => 'This username has already been taken, please choose another',
- ),
- ),
- 'email' => array(
- 'validEmail' => array(
- 'rule' => array('email', true),
- 'message' => 'Please enter your email address',
- ),
- 'unique' => array(
- 'rule' => 'isUnique',
- 'message' => 'This email address has already been taken, please use another',
- ),
- ),
- 'password' => array(
- 'rule' => array('minLength', 1),
- 'message' => 'Please choose a password',
- ),
- );
- public $hasMany = array(
- 'Membership',
- 'MemberNetworks',
- );
- public $name = 'Member';
- /**
- * Member Status
- */
- const STATUS_ACTIVE = 1;
- const STATUS_BANNED = 2;
- const STATUS_DELETED = 3;
- const STATUS_MODERATED = 4;
- /**
- * Login systems
- */
- const FORUM = 1;
- /**
- * Salt options
- */
- protected $_saltLength = 50;
- protected $_saltChars = 'qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM,.#!%*()-+=';
- /**
- * Hash the password and set the salt
- *
- * @see Model::beforeSave()
- */
- public function beforeSave()
- {
- if (isset($this->data['Member']['password']))
- {
- $salt = $this->_generateSalt();
- $this->data['Member']['salt'] = $salt;
- $this->data['Member']['password'] = sha1($salt . $this->data['Member']['password']);
- $this->data['Member']['status'] = self::STATUS_ACTIVE;
- }
- return true;
- }
- /**
- * Validate a login
- */
- public function validateLogin($data)
- {
- $email = $data['Member']['email'];
- $password = $data['Member']['password'];
- // Fetch user
- $user = $this->findByEmail($email);
- // Email matched?
- if (!$user)
- {
- return false;
- }
- // Password match?
- $salt = $user['Member']['salt'];
- $hashedPassword = sha1($salt . $password);
- if ($hashedPassword == $user['Member']['password'])
- {
- // Remember me?
- $rememberHash = null;
- if ($data['Member']['remember_me'])
- {
- $rememberHash = $this->createRememberMeHash($user);
- }
- return array('id' => $user['Member']['id'], 'hash' => $rememberHash);
- }
- return false;
- }
- /**
- * Login from a Remember Me cookie
- */
- public function loginFromRememberMeHash($id, $hash)
- {
- $user = $this->findByIdAndRememberMe($id, $hash);
- if ($user)
- {
- return $user;
- }
- return false;
- }
- /**
- * Generates, sets and returns a remember me hash
- */
- public function createRememberMeHash($member)
- {
- $rememberHash = $this->_generateSalt();
- $id = 0;
- if (is_array($member))
- {
- $id = $member['Member']['id'];
- }
- else
- {
- $id = $member;
- }
- $this->set('id', $id);
- $this->set('remember_me', $rememberHash);
- $this->save();
- return $rememberHash;
- }
- /**
- * Fetches a member
- *
- * @param int UUID
- * @param int Login Type
- */
- public function fetchMember($id = 0, $loginType = 1)
- {
- $data = array();
- switch ($loginType)
- {
- default:
- case self::FORUM:
- $data = $this->findById($id);
- break;
- }
- return $data;
- }
- /**
- * Generate a random string
- */
- protected function _generateSalt()
- {
- $str = '';
- for ($i = 0; $i < $this->_saltLength; $i++)
- {
- $str .= $this->_saltChars[rand(0, $this->_saltLength - 1)];
- }
- return $str;
- }
- }
Add Comment
Please, Sign In to add comment