PageRenderTime 48ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/Modules/user/user_model.php

https://github.com/swestcott/emoncms
PHP | 312 lines | 243 code | 43 blank | 26 comment | 16 complexity | 205832465a121344cf31feeead6716d6 MD5 | raw file
Possible License(s): AGPL-3.0
  1. <?php
  2. /*
  3. All Emoncms code is released under the GNU Affero General Public License.
  4. See COPYRIGHT.txt and LICENSE.txt.
  5. ---------------------------------------------------------------------
  6. Emoncms - open source energy visualisation
  7. Part of the OpenEnergyMonitor project:
  8. http://openenergymonitor.org
  9. */
  10. // no direct access
  11. defined('EMONCMS_EXEC') or die('Restricted access');
  12. function user_apikey_session($apikey_in)
  13. {
  14. $session = array();
  15. //----------------------------------------------------
  16. // Check for apikey login
  17. //----------------------------------------------------
  18. $apikey_in = db_real_escape_string($apikey_in);
  19. $userid = get_apikey_read_user($apikey_in);
  20. if ($userid != 0)
  21. {
  22. session_regenerate_id();
  23. $session['userid'] = $userid;
  24. $session['read'] = 1;
  25. $session['write'] = 0;
  26. $session['admin'] = 0;
  27. $session['editmode'] = TRUE;
  28. // $session['lang'] = "en";
  29. }
  30. $userid = get_apikey_write_user($apikey_in);
  31. if ($userid != 0)
  32. {
  33. session_regenerate_id();
  34. $session['userid'] = $userid;
  35. $session['read'] = 1;
  36. $session['write'] = 1;
  37. $session['admin'] = 0;
  38. $session['editmode'] = TRUE;
  39. // $session['lang'] = "en";
  40. }
  41. //----------------------------------------------------
  42. return $session;
  43. }
  44. function get_user($userid)
  45. {
  46. $result = db_query("SELECT * FROM users WHERE id=$userid");
  47. if ($result)
  48. {
  49. $row = db_fetch_array($result);
  50. if (!isset($row['email'])) $row['email']="";
  51. $user = array(
  52. 'username' => $row['username'],
  53. 'email' => $row['email'],
  54. 'apikey_read' => $row['apikey_read'],
  55. 'apikey_write' => $row['apikey_write'],
  56. 'lang' => $row['lang'],
  57. 'timeoffset' => $row['timeoffset']
  58. );
  59. }
  60. return $user;
  61. }
  62. function get_apikey_read($userid)
  63. {
  64. $result = db_query("SELECT apikey_read FROM users WHERE id=$userid");
  65. if ($result)
  66. {
  67. $row = db_fetch_array($result);
  68. $apikey = $row['apikey_read'];
  69. }
  70. return $apikey;
  71. }
  72. function get_apikey_write($userid)
  73. {
  74. $result = db_query("SELECT apikey_write FROM users WHERE id=$userid");
  75. if ($result)
  76. {
  77. $row = db_fetch_array($result);
  78. $apikey = $row['apikey_write'];
  79. }
  80. return $apikey;
  81. }
  82. function set_user_username($userid, $username)
  83. {
  84. db_query("UPDATE users SET username = '$username' WHERE id='$userid'");
  85. }
  86. function set_user_email($userid, $email)
  87. {
  88. db_query("UPDATE users SET email = '$email' WHERE id='$userid'");
  89. }
  90. function set_apikey_read($userid, $apikey)
  91. {
  92. db_query("UPDATE users SET apikey_read = '$apikey' WHERE id='$userid'");
  93. }
  94. function set_apikey_write($userid, $apikey)
  95. {
  96. db_query("UPDATE users SET apikey_write = '$apikey' WHERE id='$userid'");
  97. }
  98. function get_apikey_read_user($apikey)
  99. {
  100. $result = db_query("SELECT id FROM users WHERE apikey_read='$apikey'");
  101. $row = db_fetch_array($result);
  102. return $row['id'];
  103. }
  104. function get_apikey_write_user($apikey)
  105. {
  106. $result = db_query("SELECT id FROM users WHERE apikey_write='$apikey'");
  107. $row = db_fetch_array($result);
  108. return $row['id'];
  109. }
  110. function create_user($username, $password)
  111. {
  112. $hash = hash('sha256', $password);
  113. $string = md5(uniqid(mt_rand(), true));
  114. $salt = substr($string, 0, 3);
  115. $hash = hash('sha256', $salt . $hash);
  116. $apikey_write = md5(uniqid(mt_rand(), true));
  117. $apikey_read = md5(uniqid(mt_rand(), true));
  118. db_query("INSERT INTO users ( username, password, salt ,apikey_read, apikey_write ) VALUES ( '$username' , '$hash' , '$salt', '$apikey_read', '$apikey_write' );");
  119. // Make the first user an admin
  120. $userid = db_insert_id();
  121. if ($userid == 1)
  122. {
  123. db_query("UPDATE users SET admin = 1 WHERE id = '$userid'");
  124. }
  125. return $userid;
  126. }
  127. function ckeck_for_user_directory($username)
  128. {
  129. // Get the user id
  130. $id = get_user_id($username);
  131. // Check if the user directory exists and create it
  132. //if (!is_dir("./users/$id"))
  133. // mkdir("./users/$id", 0700);
  134. }
  135. function user_logon($username, $password)
  136. {
  137. $result = db_query("SELECT id,password,admin,salt,lang FROM users WHERE username = '$username'");
  138. $userData = db_fetch_array($result);
  139. $hash = hash('sha256', $userData['salt'] . hash('sha256', $password));
  140. if ((db_num_rows($result) < 1) || ($hash != $userData['password']))
  141. {
  142. $_SESSION['read'] = 0;
  143. $_SESSION['write'] = 0;
  144. $_SESSION['admin'] = 0;
  145. $success = 0;
  146. }
  147. else
  148. {
  149. //this is a security measure
  150. session_regenerate_id();
  151. $_SESSION['userid'] = $userData['id'];
  152. $_SESSION['username'] = $username;
  153. $_SESSION['read'] = 1;
  154. $_SESSION['write'] = 1;
  155. $_SESSION['admin'] = $userData['admin'];
  156. $_SESSION['lang'] = $userData['lang'];
  157. $_SESSION['editmode'] = TRUE;
  158. // If user is created or login we check here if the user directory was created on server
  159. ckeck_for_user_directory($username);
  160. $success = 1;
  161. }
  162. return $success;
  163. }
  164. function user_logout()
  165. {
  166. $_SESSION['read'] = 0;
  167. $_SESSION['write'] = 0;
  168. $_SESSION['admin'] = 0;
  169. session_destroy();
  170. }
  171. function get_user_id($username)
  172. {
  173. $result = db_query("SELECT id FROM users WHERE username = '$username';");
  174. $row = db_fetch_array($result);
  175. return $row['id'];
  176. }
  177. function get_user_name($id)
  178. {
  179. $result = db_query("SELECT username FROM users WHERE id = '$id';");
  180. $row = db_fetch_array($result);
  181. return $row['username'];
  182. }
  183. function change_password($userid, $oldpass, $newpass)
  184. {
  185. $result = db_query("SELECT password, salt FROM users WHERE id = '$userid'");
  186. $userData = db_fetch_array($result);
  187. $hash = hash('sha256', $userData['salt'] . hash('sha256', $oldpass));
  188. // hash of oldpass
  189. if ($hash == $userData['password'])
  190. {
  191. $hash = hash('sha256', $newpass);
  192. $string = md5(uniqid(rand(), true));
  193. $salt = substr($string, 0, 3);
  194. $hash = hash('sha256', $salt . $hash);
  195. db_query("UPDATE users SET password = '$hash', salt = '$salt' WHERE id = '$userid'");
  196. return 1;
  197. // success
  198. }
  199. else
  200. {
  201. return 0;
  202. // failed
  203. }
  204. }
  205. function get_user_list()
  206. {
  207. $result = db_query("SELECT id, username, admin, uphits, dnhits FROM users");
  208. $userlist = array();
  209. while ($row = db_fetch_array($result))
  210. {
  211. $userlist[] = array(
  212. 'userid' => $row['id'],
  213. 'name' => $row['username'],
  214. 'admin' => $row['admin'],
  215. 'uphits' => $row['uphits'],
  216. 'dnhits' => $row['dnhits']
  217. );
  218. }
  219. return $userlist;
  220. }
  221. function set_user_lang($userid, $lang)
  222. {
  223. db_query("UPDATE users SET lang = '$lang' WHERE id='$userid'");
  224. }
  225. function get_user_lang($userid)
  226. {
  227. $result = db_query("SELECT lang FROM users WHERE id = '$userid';");
  228. $row = db_fetch_array($result);
  229. return $row['lang'];
  230. }
  231. function set_user_timeoffset($userid,$timeoffset)
  232. {
  233. db_query("UPDATE users SET timeoffset = '$timeoffset' WHERE id='$userid'");
  234. }
  235. function get_user_timeoffset($userid)
  236. {
  237. $result = db_query("SELECT timeoffset FROM users WHERE id = '$userid';");
  238. $row = db_fetch_array($result);
  239. return $row['timeoffset'];
  240. }
  241. function get_user_settingsarray($userid)
  242. {
  243. $result = db_query("SELECT settingsarray FROM users WHERE id = '$userid';");
  244. $row = db_fetch_array($result);
  245. return json_decode($row['settingsarray']);
  246. }
  247. function set_user_settingsarray($userid, $settingsarray)
  248. {
  249. $settingsarray = json_encode($settingsarray);
  250. db_query("UPDATE users SET settingsarray = '$settingsarray' WHERE id='$userid'");
  251. }
  252. function user_inc_uphits($userid)
  253. {
  254. db_query("update users SET uphits = uphits + 1 WHERE id='$userid'");
  255. }
  256. function user_inc_dnhits($userid)
  257. {
  258. db_query("update users SET dnhits = dnhits + 1 WHERE id='$userid'");
  259. }
  260. function user_sortby_uphits($x,$y)
  261. {
  262. return $y['uphits'] - $x['uphits'];
  263. }
  264. function user_sortby_dnhits($x,$y)
  265. {
  266. return $y['dnhits'] - $x['dnhits'];
  267. }
  268. ?>