PageRenderTime 47ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/Models/user_model.php

https://github.com/mattwire/emoncms3
PHP | 290 lines | 225 code | 39 blank | 26 comment | 16 complexity | 322f248a014312b40c2f2cc1fdb55700 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_control($apikey_in)
  13. {
  14. //----------------------------------------------------
  15. // Check for apikey login
  16. //----------------------------------------------------
  17. $apikey_in = db_real_escape_string($apikey_in);
  18. $userid = get_apikey_read_user($apikey_in);
  19. if ($userid != 0)
  20. {
  21. session_regenerate_id();
  22. $session['userid'] = $userid;
  23. $session['read'] = 1;
  24. $session['write'] = 0;
  25. $session['admin'] = 0;
  26. // $session['lang'] = "en";
  27. }
  28. $userid = get_apikey_write_user($apikey_in);
  29. if ($userid != 0)
  30. {
  31. session_regenerate_id();
  32. $session['userid'] = $userid;
  33. $session['read'] = 1;
  34. $session['write'] = 1;
  35. $session['admin'] = 0;
  36. // $session['lang'] = "en";
  37. }
  38. //----------------------------------------------------
  39. return $session;
  40. }
  41. function get_user($userid)
  42. {
  43. $result = db_query("SELECT * FROM users WHERE id=$userid");
  44. if ($result)
  45. {
  46. $row = db_fetch_array($result);
  47. if (!isset($row['email'])) $row['email']="";
  48. $user = array(
  49. 'username' => $row['username'],
  50. 'email' => $row['email'],
  51. 'apikey_read' => $row['apikey_read'],
  52. 'apikey_write' => $row['apikey_write'],
  53. 'lang' => $row['lang'],
  54. 'timeoffset' => $row['timeoffset']
  55. );
  56. }
  57. return $user;
  58. }
  59. function get_apikey_read($userid)
  60. {
  61. $result = db_query("SELECT apikey_read FROM users WHERE id=$userid");
  62. if ($result)
  63. {
  64. $row = db_fetch_array($result);
  65. $apikey = $row['apikey_read'];
  66. }
  67. return $apikey;
  68. }
  69. function get_apikey_write($userid)
  70. {
  71. $result = db_query("SELECT apikey_write FROM users WHERE id=$userid");
  72. if ($result)
  73. {
  74. $row = db_fetch_array($result);
  75. $apikey = $row['apikey_write'];
  76. }
  77. return $apikey;
  78. }
  79. function set_user_username($userid, $username)
  80. {
  81. db_query("UPDATE users SET username = '$username' WHERE id='$userid'");
  82. }
  83. function set_user_email($userid, $email)
  84. {
  85. db_query("UPDATE users SET email = '$email' WHERE id='$userid'");
  86. }
  87. function set_apikey_read($userid, $apikey)
  88. {
  89. db_query("UPDATE users SET apikey_read = '$apikey' WHERE id='$userid'");
  90. }
  91. function set_apikey_write($userid, $apikey)
  92. {
  93. db_query("UPDATE users SET apikey_write = '$apikey' WHERE id='$userid'");
  94. }
  95. function get_apikey_read_user($apikey)
  96. {
  97. $result = db_query("SELECT id FROM users WHERE apikey_read='$apikey'");
  98. $row = db_fetch_array($result);
  99. return $row['id'];
  100. }
  101. function get_apikey_write_user($apikey)
  102. {
  103. $result = db_query("SELECT id FROM users WHERE apikey_write='$apikey'");
  104. $row = db_fetch_array($result);
  105. return $row['id'];
  106. }
  107. function create_user($username, $password)
  108. {
  109. $hash = hash('sha256', $password);
  110. $string = md5(uniqid(mt_rand(), true));
  111. $salt = substr($string, 0, 3);
  112. $hash = hash('sha256', $salt . $hash);
  113. $apikey_write = md5(uniqid(mt_rand(), true));
  114. $apikey_read = md5(uniqid(mt_rand(), true));
  115. db_query("INSERT INTO users ( username, password, salt ,apikey_read, apikey_write ) VALUES ( '$username' , '$hash' , '$salt', '$apikey_read', '$apikey_write' );");
  116. // Make the first user an admin
  117. $userid = db_insert_id();
  118. if ($userid == 1)
  119. {
  120. db_query("UPDATE users SET admin = 1 WHERE id = '$userid'");
  121. }
  122. $user = array();
  123. $user['id'] = $userid;
  124. $user['writeapikey'] = $apikey_write;
  125. $user['readapikey'] = $apikey_read;
  126. return $user;
  127. }
  128. function ckeck_for_user_directory($username)
  129. {
  130. // Get the user id
  131. $id = get_user_id($username);
  132. // Check if the user directory exists and create it
  133. //if (!is_dir("./users/$id"))
  134. // mkdir("./users/$id", 0700);
  135. }
  136. function user_logon($username, $password)
  137. {
  138. $result = db_query("SELECT id,password,admin,salt,lang FROM users WHERE username = '$username'");
  139. $userData = db_fetch_array($result);
  140. $hash = hash('sha256', $userData['salt'] . hash('sha256', $password));
  141. if ((db_num_rows($result) < 1) || ($hash != $userData['password']))
  142. {
  143. $_SESSION['read'] = 0;
  144. $_SESSION['write'] = 0;
  145. $_SESSION['admin'] = 0;
  146. $success = 0;
  147. }
  148. else
  149. {
  150. //this is a security measure
  151. session_regenerate_id();
  152. $_SESSION['userid'] = $userData['id'];
  153. $_SESSION['username'] = $username;
  154. $_SESSION['read'] = 1;
  155. $_SESSION['write'] = 1;
  156. $_SESSION['admin'] = $userData['admin'];
  157. $_SESSION['lang'] = $userData['lang'];
  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 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. );
  216. }
  217. return $userlist;
  218. }
  219. function set_user_lang($userid, $lang)
  220. {
  221. db_query("UPDATE users SET lang = '$lang' WHERE id='$userid'");
  222. }
  223. function get_user_lang($userid)
  224. {
  225. $result = db_query("SELECT lang FROM users WHERE id = '$userid';");
  226. $row = db_fetch_array($result);
  227. return $row['lang'];
  228. }
  229. function set_user_timeoffset($userid,$timeoffset)
  230. {
  231. db_query("UPDATE users SET timeoffset = '$timeoffset' WHERE id='$userid'");
  232. }
  233. function get_user_timeoffset($userid)
  234. {
  235. $result = db_query("SELECT timeoffset FROM users WHERE id = '$userid';");
  236. $row = db_fetch_array($result);
  237. return $row['timeoffset'];
  238. }
  239. function get_user_settingsarray($userid)
  240. {
  241. $result = db_query("SELECT settingsarray FROM users WHERE id = '$userid';");
  242. $row = db_fetch_array($result);
  243. return json_decode($row['settingsarray']);
  244. }
  245. function set_user_settingsarray($userid, $settingsarray)
  246. {
  247. $settingsarray = json_encode($settingsarray);
  248. db_query("UPDATE users SET settingsarray = '$settingsarray' WHERE id='$userid'");
  249. }
  250. ?>