Guest User

Untitled

a guest
Apr 7th, 2018
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.59 KB | None | 0 0
  1. <?php
  2.  
  3. class Member extends AppModel
  4. {
  5.    
  6.     public $validate = array(
  7.         'name' => array(
  8.             'length' => array(
  9.                 'rule' => array('minLength', 2),
  10.                 'message' => 'Name must be at least 2 characters',
  11.             ),
  12.             'unique' => array(
  13.                 'rule' => 'isUnique',
  14.                 'message' => 'This username has already been taken, please choose another',
  15.             ),
  16.         ),
  17.         'email' => array(
  18.             'validEmail' => array(
  19.                 'rule' => array('email', true),
  20.                 'message' => 'Please enter your email address',
  21.             ),
  22.             'unique' => array(
  23.                 'rule' => 'isUnique',
  24.                 'message' => 'This email address has already been taken, please use another',
  25.             ),
  26.         ),
  27.         'password' => array(
  28.             'rule' => array('minLength', 1),
  29.             'message' => 'Please choose a password',
  30.         ),
  31.     );
  32.    
  33.     public $hasMany = array(
  34.         'Membership',
  35.         'MemberNetworks',
  36.     );
  37.    
  38.     public $name = 'Member';
  39.    
  40.     /**
  41.      * Member Status
  42.      */
  43.     const STATUS_ACTIVE = 1;
  44.     const STATUS_BANNED = 2;
  45.     const STATUS_DELETED = 3;
  46.     const STATUS_MODERATED = 4;
  47.    
  48.     /**
  49.      * Login systems
  50.      */
  51.     const FORUM = 1;
  52.    
  53.     /**
  54.      * Salt options
  55.      */
  56.     protected $_saltLength = 50;
  57.     protected $_saltChars = 'qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM,.#!%*()-+=';
  58.    
  59.     /**
  60.      * Hash the password and set the salt
  61.      *
  62.      * @see Model::beforeSave()
  63.      */
  64.     public function beforeSave()
  65.     {
  66.        
  67.         if (isset($this->data['Member']['password']))
  68.         {
  69.             $salt = $this->_generateSalt();
  70.             $this->data['Member']['salt'] = $salt;
  71.             $this->data['Member']['password'] = sha1($salt . $this->data['Member']['password']);
  72.             $this->data['Member']['status'] = self::STATUS_ACTIVE;
  73.         }
  74.        
  75.         return true;
  76.        
  77.     }
  78.    
  79.     /**
  80.      * Validate a login
  81.      */
  82.     public function validateLogin($data)
  83.     {
  84.        
  85.         $email = $data['Member']['email'];
  86.         $password = $data['Member']['password'];
  87.        
  88.         // Fetch user
  89.         $user = $this->findByEmail($email);
  90.                
  91.         // Email matched?
  92.         if (!$user)
  93.         {
  94.             return false;
  95.         }
  96.        
  97.         // Password match?
  98.         $salt = $user['Member']['salt'];
  99.         $hashedPassword = sha1($salt . $password);
  100.        
  101.         if ($hashedPassword == $user['Member']['password'])
  102.         {
  103.             // Remember me?
  104.             $rememberHash = null;
  105.             if ($data['Member']['remember_me'])
  106.             {
  107.                 $rememberHash = $this->createRememberMeHash($user);
  108.             }                      
  109.                
  110.             return array('id' => $user['Member']['id'], 'hash' => $rememberHash);
  111.         }
  112.        
  113.         return false;
  114.        
  115.     }
  116.    
  117.     /**
  118.      * Login from a Remember Me cookie
  119.      */
  120.     public function loginFromRememberMeHash($id, $hash)
  121.     {
  122.        
  123.         $user = $this->findByIdAndRememberMe($id, $hash);
  124.        
  125.         if ($user)
  126.         {
  127.             return $user;
  128.         }
  129.        
  130.         return false;
  131.        
  132.     }
  133.    
  134.     /**
  135.      * Generates, sets and returns a remember me hash
  136.      */
  137.     public function createRememberMeHash($member)
  138.     {
  139.        
  140.         $rememberHash = $this->_generateSalt();
  141.        
  142.         $id = 0;
  143.        
  144.         if (is_array($member))
  145.         {
  146.             $id = $member['Member']['id'];
  147.         }
  148.         else
  149.         {
  150.             $id = $member;
  151.         }
  152.        
  153.         $this->set('id', $id);
  154.         $this->set('remember_me', $rememberHash);
  155.         $this->save();
  156.        
  157.         return $rememberHash;
  158.        
  159.     }
  160.    
  161.     /**
  162.      * Fetches a member
  163.      *
  164.      * @param   int     UUID
  165.      * @param   int     Login Type
  166.      */
  167.     public function fetchMember($id = 0, $loginType = 1)
  168.     {
  169.        
  170.         $data = array();
  171.        
  172.         switch ($loginType)
  173.         {
  174.             default:
  175.             case self::FORUM:
  176.                 $data = $this->findById($id);
  177.             break;
  178.         }
  179.        
  180.         return $data;
  181.        
  182.     }
  183.    
  184.     /**
  185.      * Generate a random string
  186.      */
  187.     protected function _generateSalt()
  188.     {
  189.        
  190.         $str = '';
  191.        
  192.         for ($i = 0; $i < $this->_saltLength; $i++)
  193.         {
  194.             $str .= $this->_saltChars[rand(0, $this->_saltLength - 1)];
  195.         }
  196.        
  197.         return $str;
  198.        
  199.     }
  200.    
  201. }
Add Comment
Please, Sign In to add comment