Advertisement
Guest User

Untitled

a guest
Feb 4th, 2013
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.19 KB | None | 0 0
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2.  
  3. class User extends DataMapper {
  4.  
  5. public $table = "users";
  6.  
  7. public function __construct()
  8. {
  9. parent::__construct();
  10.  
  11. $this->load->config('auth');
  12. $this->load->helper('string');
  13.  
  14. $this->_default_rounds = $this->config->item('default_rounds');
  15. $this->_random_rounds = $this->config->item('random_rounds');
  16. $this->_min_rounds = $this->config->item('min_rounds');
  17. $this->_max_rounds = $this->config->item('max_rounds');
  18. $this->_password_recovery_key_expire = $this->config->item('password_recovery_key_expire');
  19.  
  20. if ($this->_random_rounds)
  21. {
  22. $rand = rand($this->_min_rounds,$this->_max_rounds);
  23. $rounds = array('rounds' => $rand);
  24. }
  25. else
  26. {
  27. $rounds = array('rounds' => $this->_default_rounds);
  28. }
  29.  
  30. // Load Bcrypt
  31. $this->load->library('bcrypt', $rounds);
  32. }
  33.  
  34. /**
  35. * email_exists
  36. *
  37. * Checks if given email exists
  38. *
  39. * @param string $email
  40. * @return bool
  41. */
  42. function email_exists($email)
  43. {
  44. $this->where('email', $email)->get();
  45.  
  46. if ($this->exists())
  47. {
  48. return TRUE;
  49. }
  50. }
  51.  
  52. /**
  53. * check_password
  54. *
  55. * This function takes a password and validates it
  56. * against an entry in the users table.
  57. *
  58. * @param string $password The password the user provides
  59. * @param string $hashed_password The hashed password stored in the database
  60. * @return bool
  61. */
  62. function check_password($password, $hashed_password)
  63. {
  64. $CI =& get_instance();
  65.  
  66. return $CI->bcrypt->verify($password, $hashed_password);
  67. }
  68.  
  69. /**
  70. * change_password
  71. *
  72. * @param int $user_id
  73. * @param string $password
  74. * @return bool
  75. */
  76. function change_password($user_id, $password)
  77. {
  78. $this->where('id', $user_id)->get();
  79.  
  80. $this->password = self::_encrypt($password);
  81.  
  82. if ($this->save())
  83. {
  84. return TRUE;
  85. }
  86. }
  87.  
  88. /**
  89. * is_valid_activation_key
  90. *
  91. * @param string $key
  92. * @return bool
  93. */
  94. function is_valid_activation_key($key)
  95. {
  96. $this->get_by_activation_key($key);
  97.  
  98. if ($this->exists())
  99. {
  100. return TRUE;
  101. }
  102. }
  103.  
  104. /**
  105. * set_activation_key
  106. *
  107. * @param int $user_id
  108. * @return bool
  109. */
  110. function set_activation_key($user_id)
  111. {
  112. $this->where('id', $user_id);
  113. $this->activation_key = self::_generate_unique_str();
  114.  
  115. if ($this->save())
  116. {
  117. return TRUE;
  118. }
  119. }
  120.  
  121. /**
  122. * is_activated
  123. *
  124. * @param int $user_id
  125. * @return bool
  126. */
  127. function is_activated($user_id)
  128. {
  129. $this->where('id', $user_id)->get();
  130.  
  131. if ($this->activated)
  132. {
  133. return TRUE;
  134. }
  135. }
  136.  
  137. /**
  138. * activate
  139. *
  140. * @param string $key
  141. * @return bool
  142. */
  143. function activate($key)
  144. {
  145. if (self::is_valid_activation_key($key))
  146. {
  147. $this->where('activation_key', $key)->get();
  148.  
  149. $this->activated = TRUE;
  150. $this->activation_key = NULL; // Remove activation key
  151.  
  152. if ($this->save())
  153. {
  154. return TRUE;
  155. }
  156. }
  157. }
  158.  
  159. /**
  160. * is_valid_password_recovery_key
  161. *
  162. * @param int $user_id
  163. * @param string $key
  164. * @return bool
  165. */
  166. function is_valid_password_recovery_key($user_id, $key)
  167. {
  168. $this->where('id', $user_id);
  169. $this->where('recover_password_key', $key);
  170. $this->where('recover_password_key_requested >', time() - $this->_password_recovery_key_expire);
  171. $this->get();
  172.  
  173. if ($this->exists())
  174. {
  175. return TRUE;
  176. }
  177. }
  178.  
  179. /**
  180. * set_password_recovery_key
  181. *
  182. * If the current recovery key isn't old enough
  183. * only update when this function was last
  184. * requested to prevent sabotage
  185. *
  186. * @param string $email
  187. */
  188. function set_password_recovery_key($email)
  189. {
  190. $this->where('email', $email)->get();
  191.  
  192. if ($this->recover_password_key_requested < time() - $this->_password_recovery_key_expire){
  193. $this->recover_password_key = self::_generate_unique_str();
  194. $this->recover_password_key_requested = time();
  195. }else{
  196. //$this->recover_password_key = $this->recover_password_key;
  197. $this->recover_password_key_requested = time();
  198. }
  199.  
  200. if ($this->save())
  201. {
  202. return TRUE;
  203. }
  204. }
  205.  
  206. /**
  207. * reset_password
  208. *
  209. * @param int $user_id
  210. * @param string $key
  211. * @param string $password
  212. * @return bool
  213. */
  214. function reset_password($user_id, $key, $password)
  215. {
  216. if (self::is_valid_password_recovery_key($user_id, $key))
  217. {
  218. $this->password = self::_encrypt($password);
  219. $this->recover_password_key = NULL;
  220. $this->recover_password_key_requested = NULL;
  221.  
  222. if ($this->save())
  223. {
  224. return TRUE;
  225. }
  226. }
  227. }
  228.  
  229. /**
  230. * login
  231. *
  232. * @param string $username
  233. * @param string $password
  234. * @return bool
  235. */
  236. function login($username, $password)
  237. {
  238. $CI =& get_instance();
  239.  
  240. $this->where('username', $username)->get();
  241.  
  242. if ($this->exists() && self::check_password($password, $this->password))
  243. {
  244. $this->last_login = time();
  245. $this->save();
  246.  
  247. return TRUE;
  248. }
  249.  
  250. }
  251.  
  252. /**
  253. * register
  254. *
  255. * @param mixed $data
  256. * @param bool $require_activation
  257. * @return bool
  258. */
  259. function register($data, $require_activation)
  260. {
  261. $CI =& get_instance();
  262.  
  263. $this->username = $data['username'];
  264. $this->password = self::_encrypt($data['password']);
  265. $this->email = $data['email'];
  266. $this->first_name = $data['first_name'];
  267. $this->last_name = $data['last_name'];
  268. $this->activated = $require_activation === TRUE ? FALSE : TRUE;
  269. $this->activation_key = $require_activation === TRUE ? self::_generate_unique_str() : NULL;
  270. $this->ip_address = $this->_ip_address;
  271. $this->created_on = time();
  272.  
  273. if ($this->save())
  274. {
  275. return TRUE;
  276. }
  277. }
  278.  
  279. /**
  280. * _generate_unique_key
  281. *
  282. * Generates a unique string (32 chars in lenght)
  283. *
  284. * @return string
  285. */
  286. function _generate_unique_str()
  287. {
  288. return random_string('unique');
  289. }
  290.  
  291. /**
  292. * _encrypt
  293. *
  294. * @param string $password
  295. */
  296. function _encrypt($password)
  297. {
  298. $CI =& get_instance();
  299.  
  300. return $CI->bcrypt->hash($password);
  301. }
  302. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement