PageRenderTime 51ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/include/includes/func/user.php

https://github.com/IlchCMS/Ilch-1.1
PHP | 374 lines | 302 code | 39 blank | 33 comment | 70 complexity | 5179377e09edf20f555dab3700af779e MD5 | raw file
  1. <?php
  2. # hier werden alle user spezifischen funktionen
  3. # definert...
  4. function user_identification () {
  5. user_auth();
  6. user_login_check();
  7. user_update_database();
  8. user_check_url_rewrite();
  9. }
  10. function user_auth () {
  11. debug ('user - auth gestartet'. session_id());
  12. $cn = session_und_cookie_name();
  13. if (!user_key_in_db()
  14. OR !isset($_SESSION['authid'])
  15. OR (isset($_SESSION['authsess']) AND $_SESSION['authsess'] != $cn)) {
  16. debug ('user - nicht in db oder nicht authid');
  17. user_set_guest_vars();
  18. user_set_user_online ();
  19. # wenn cn cookie vorhanden
  20. # dann checken ob er sich damit einloggen darf
  21. if (isset($_COOKIE[$cn])) {
  22. user_auto_login_check();
  23. }
  24. # gruppen, und modulzugehoerigkeit setzten
  25. user_set_grps_and_modules();
  26. }
  27. }
  28. function user_check_url_rewrite() {
  29. global $allgAr;
  30. if ( !loggedin() AND $allgAr['show_session_id'] == 0 ) {
  31. # loescht die sessionid von allen urls
  32. # auch urls wie formulare usw. damit
  33. # suchmaschienen bots nicht iritiert sind ;)
  34. # output_reset_rewrite_vars ist eine php funktion
  35. # nicht unnoetig dannach suchen ;) ...
  36. output_reset_rewrite_vars ();
  37. }
  38. }
  39. function user_update_database () {
  40. $dif = date('Y-m-d H:i:s', time() - 7200);
  41. db_query("UPDATE prefix_online SET uptime = now() WHERE sid = '".session_id()."'");
  42. db_query("DELETE FROM prefix_online WHERE uptime < '". $dif."'");
  43. if ( loggedin() ) {
  44. db_query("UPDATE prefix_user SET llogin = '".time()."' WHERE id = '".$_SESSION['authid']."'");
  45. }
  46. }
  47. function user_set_user_online () {
  48. global $allgAr;
  49. if (0 == db_result(db_query("SELECT COUNT(*) FROM prefix_online WHERE sid = '".session_id()."'"),0) ) {
  50. db_query("INSERT INTO prefix_online (sid,uptime,ipa) VALUES ('".session_id()."',now(),'".getip()."')");
  51. }
  52. $_SESSION['authgfx'] = $allgAr['gfx'];
  53. }
  54. function user_key_in_db() {
  55. if ( 1 == db_result(db_query("SELECT COUNT(*) FROM prefix_online WHERE sid = '".session_id()."'"),0) ) {
  56. return ( true );
  57. } else {
  58. return ( false );
  59. }
  60. }
  61. function session_und_cookie_name () {
  62. return (md5(dirname($_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"]).DBPREF));
  63. }
  64. function user_pw_crypt($plainPassword) {
  65. if (version_compare(PHP_VERSION, '5.0') !== -1) {
  66. $pwCrypt = new PwCrypt();
  67. return $pwCrypt->cryptPasswd($plainPassword);
  68. }
  69. return md5($plainPassword);
  70. }
  71. function user_pw_check($plainPassword, &$passwordHash, $userId = false) {
  72. if (version_compare(PHP_VERSION, '5.0') !== -1) {
  73. $pwCrypt = new PwCrypt();
  74. $correct = $pwCrypt->checkPasswd($plainPassword, $passwordHash);
  75. if ($correct && $userId !== false && $pwCrypt->checkHashStrength($passwordHash)) {
  76. $passwordHash = $pwCrypt->cryptPasswd($plainPassword);
  77. if ($passwordHash) {
  78. db_query('UPDATE `prefix_user` SET `pass` = "' . $passwordHash . '" WHERE `id` = ' . $userId);
  79. }
  80. }
  81. return $correct;
  82. }
  83. return md5($plainPassword) === $passwordHash;
  84. }
  85. function user_set_cookie($id, $cryptedPassword) {
  86. $cookieString = $id . '=' . md5(DBUSER . $cryptedPassword);
  87. setcookie($_SESSION['authsess'], $cookieString , strtotime('+1 year'), '/' );
  88. }
  89. function user_cookie_check($cookieHash, $cryptedPassword) {
  90. return md5(DBUSER . $cryptedPassword) == $cookieHash;
  91. }
  92. function user_login_check () {
  93. if ( isset ($_POST['user_login_sub']) AND isset ($_POST['name']) AND isset ($_POST['pass']) ) {
  94. debug ('posts vorhanden');
  95. $name = escape_nickname($_POST['name']);
  96. if ($name != $_POST['name'] OR strlen($_POST['name']) > 15) {
  97. return false;
  98. }
  99. $erg = db_query("SELECT name,id,recht,pass,llogin FROM prefix_user WHERE name = BINARY '".$name."'");
  100. if ( db_num_rows($erg) == 1 ) {
  101. debug ('user gefunden');
  102. $row = db_fetch_assoc($erg);
  103. if (user_pw_check($_POST['pass'], $row['pass'], $row['id']) ) {
  104. debug ('passwort stimmt ... '.$row['name']);
  105. $_SESSION['authname'] = $row['name'];
  106. $_SESSION['authid'] = $row['id'];
  107. $_SESSION['authright'] = $row['recht'];
  108. $_SESSION['lastlogin'] = $row['llogin'];
  109. $_SESSION['authsess'] = session_und_cookie_name();
  110. db_query("UPDATE prefix_online SET uid = ".$_SESSION['authid']." WHERE sid = '".session_id()."'");
  111. user_set_cookie($row['id'], $row['pass']);
  112. user_set_grps_and_modules();
  113. return (true);
  114. }
  115. }
  116. global $menu;
  117. $menu->set_url (0, 'user');
  118. $menu->set_url (1, 'login');
  119. }
  120. return ( false );
  121. }
  122. function user_auto_login_check () {
  123. $cn = session_und_cookie_name();
  124. $dat = explode('=',$_COOKIE[$cn]);
  125. $id = $pw = 0;
  126. if (isset($dat[0])) { $id = escape($dat[0], 'integer'); }
  127. if (isset($dat[1])) { $pw = $dat[1]; }
  128. debug (' pw ' . $pw );
  129. debug (' id ' . $id );
  130. $erg = db_query("SELECT name,id,recht,pass,llogin FROM prefix_user WHERE id = ".$id);
  131. if (db_num_rows($erg) == 1) {
  132. debug ('benutzer gefunden');
  133. $row = db_fetch_assoc($erg);
  134. if (user_cookie_check($pw, $row['pass'])) {
  135. debug ('passwoerter stimmen');
  136. debug ($row['name']);
  137. $_SESSION['authname'] = $row['name'];
  138. $_SESSION['authid'] = $row['id'];
  139. $_SESSION['authright'] = $row['recht'];
  140. $_SESSION['lastlogin'] = $row['llogin'];
  141. $_SESSION['authsess'] = $cn;
  142. db_query("UPDATE prefix_online SET uid = ".$_SESSION['authid']." WHERE sid = '".session_id()."'");
  143. user_set_cookie($row['id'], $row['pass']);
  144. return (true);
  145. }
  146. }
  147. user_logout ();
  148. return (false);
  149. }
  150. function user_set_guest_vars() {
  151. $_SESSION['authname'] = 'Gast';
  152. $_SESSION['authid'] = 0;
  153. $_SESSION['authright'] = 0;
  154. $_SESSION['lastlogin'] = time();
  155. $_SESSION['authgrp'] = array();
  156. $_SESSION['authmod'] = array();
  157. $_SESSION['authsess'] = session_und_cookie_name();
  158. }
  159. function user_markallasread () {
  160. $_SESSION['lastlogin'] = time();
  161. }
  162. function user_logout () {
  163. #global $allgAr;
  164. #$_SESSION = array();
  165. #$_SESSION['authgfx'] = $allgAr['gfx'];
  166. user_set_guest_vars();
  167. db_query("UPDATE prefix_online SET uid = ".$_SESSION['authid']." WHERE sid = '".session_id()."'");
  168. setcookie(session_und_cookie_name(), "", time()-999999999999, "/" );
  169. #if (isset($_COOKIE[session_name()])) {
  170. # setcookie(session_name(), '', time()-99999999999931104000, '/');
  171. #}
  172. #setcookie(session_und_cookie_name(), "", time()-999999999999, "/" );
  173. #session_destroy();
  174. }
  175. function user_set_grps_and_modules() {
  176. $_SESSION['authgrp'] = array();
  177. $_SESSION['authmod'] = array();
  178. $_SESSION['adminaccess'] = array();
  179. if (loggedin()) {
  180. $erg = db_query('SELECT gid FROM prefix_groupusers WHERE uid = ' . $_SESSION['authid']);
  181. while ($row = db_fetch_assoc($erg)) {
  182. $_SESSION['authgrp'][$row['gid']] = true;
  183. }
  184. $erg = db_query('SELECT DISTINCT m.url, m.gshow '
  185. . 'FROM prefix_modulerights mr '
  186. . 'INNER JOIN prefix_modules m ON m.id = mr.mid '
  187. . 'WHERE mr.uid = ' . $_SESSION['authid']);
  188. while ($row = db_fetch_assoc($erg)) {
  189. $_SESSION['authmod'][$row['url']] = true;
  190. if ($row['gshow']) {
  191. $_SESSION['adminaccess'][$row['url']] = true;
  192. }
  193. }
  194. }
  195. }
  196. function loggedin () {
  197. if ( has_right(-1) ) { return ( true ); } else { return ( false ); }
  198. }
  199. function is_admin () {
  200. if ( has_right(-9) ) { return ( true ); } else { return ( false ); }
  201. }
  202. function is_coadmin () {
  203. if ( has_right(-8) ) { return ( true ); } else { return ( false ); }
  204. }
  205. function is_siteadmin ($m = NULL) {
  206. if ( has_right(-7) ) { return ( true ); }
  207. if ( !is_null($m) AND has_right(NULL, $m)) { return (true); }
  208. return ( false );
  209. }
  210. # diese funktion liefert immer true wenn es ein admin ist.
  211. # wenn kein kein admin wird geprueft ob der user
  212. # entweder ein angegebenes recht oder in einer angegebene
  213. # gruppe ist. oder ob er fals angegben das modulrecht hat.
  214. # wenn eines von diesen 3 kriterien stimmt wird true ansonsten
  215. # wenn keins uebereinstimmt false zurueck gegeben.
  216. function has_right ($recht,$modul = '') {
  217. if ( !is_array($recht) AND !is_null($recht) ) {
  218. $recht = array ( $recht );
  219. }
  220. if ( $_SESSION['authright'] == -9 ) {
  221. return ( true );
  222. }
  223. if ( !is_null($recht) ) {
  224. foreach ( $recht as $v ) {
  225. if ( ($v <= 0 AND $v >= $_SESSION['authright'] ) OR (isset($_SESSION['authgrp'][$v]) AND $_SESSION['authgrp'][$v] === true) ) {
  226. return (true);
  227. }
  228. }
  229. }
  230. if ( !empty($modul) AND isset($_SESSION['authmod'][$modul]) AND $_SESSION['authmod'][$modul] === true ) {
  231. return ( true );
  232. }
  233. return (false);
  234. }
  235. ### admin
  236. # wenn der 2. parameter weggelassen wird oder auf true gesetzt wird
  237. # dann wird ein login formular angezeigt, wenn der user kein admin ist.
  238. # wird der parameter auf false gesetzt wird das login formular nicht angezeigt.
  239. # erste parameter ist das menu objekt...
  240. function user_has_admin_right($menu, $sl = true) {
  241. if ($_SESSION['authright'] <= -8) { # co leader...
  242. return true;
  243. } else {
  244. $uri_to_check1 = $menu->get(0);
  245. $uri_to_check2 = $menu->get(1);
  246. if (count($_SESSION['adminaccess']) < 1 OR !loggedin()) {
  247. if ($sl === true) {
  248. if (!loggedin()) {
  249. $tpl = new tpl('user/login.htm');
  250. $tpl->set_out('WDLINK', 'admin.php', 0);
  251. } else {
  252. echo '<strong>Keine Berechtigung!</strong> <a href="index.php">Startseite</a>';
  253. }
  254. }
  255. return false;
  256. } elseif ((isset($_SESSION['adminaccess'][$uri_to_check1]) AND $_SESSION['adminaccess'][$uri_to_check1] == true)
  257. || (isset($_SESSION['adminaccess'][$uri_to_check1 . '-' . $uri_to_check2]) AND $_SESSION['adminaccess'][$uri_to_check1 . '-' . $uri_to_check2] == true)
  258. ) {
  259. return true;
  260. } elseif (count($_SESSION['adminaccess']) > 0 AND loggedin()) {
  261. if ($sl === true) {
  262. foreach ($_SESSION['adminaccess'] as $k => $v) {
  263. $x = $k;
  264. break;
  265. }
  266. $x = explode('-', $x);
  267. $menu->set_url(0, $x[0]);
  268. if (isset($x[1])) {
  269. $menu->set_url(1, $x[1]);
  270. }
  271. }
  272. return true;
  273. }
  274. }
  275. return false;
  276. }
  277. function user_regist ($name, $mail, $pass) {
  278. global $allgAr, $lang;
  279. $erg = db_query("SELECT id FROM prefix_user WHERE name = BINARY '".$name."'");
  280. if (db_num_rows($erg) > 0) {
  281. return (false);
  282. }
  283. if ( $allgAr['forum_regist_user_pass'] == 0 ) {
  284. $new_pass = genkey(8);
  285. } else {
  286. $new_pass = $pass;
  287. }
  288. $passwordHash = user_pw_crypt($new_pass);
  289. $confirmlinktext = '';
  290. # confirm insert in confirm tb not confirm insert in user tb
  291. if ( $allgAr['forum_regist_confirm_link'] == 1 ) {
  292. # confirm link + text ... bit of shit put it in languages file
  293. $page = $_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];
  294. $id = md5 (uniqid (rand()));
  295. $confirmlinktext = "\n".$lang['registconfirm']."\n\n".sprintf($lang['registconfirmlink'], $page, $id );
  296. db_query("INSERT INTO prefix_usercheck (`check`,name,email,pass,datime,ak)
  297. VALUES ('".$id."','".$name."','".$mail."','".$passwordHash."',NOW(),1)");
  298. } else {
  299. db_query("INSERT INTO prefix_user (name,pass,recht,regist,llogin,email,status,opt_mail,opt_pm)
  300. VALUES('".$name."','".$passwordHash."',-1,'".time()."','".time()."','".$mail."',1,1,1)");
  301. $userid = db_last_id();
  302. }
  303. $regmail = sprintf($lang['registemail'],$name, $confirmlinktext, $name, $new_pass);
  304. icmail($mail,'Anmeldung',$regmail); # email an user
  305. return (true);
  306. }
  307. function user_remove($uid){
  308. $row = @db_fetch_object(db_query("SELECT recht,avatar FROM prefix_user WHERE id = ".$uid));
  309. if ( $uid <> 1 AND ($_SESSION['authid'] == $uid OR $_SESSION['authid'] == 1 OR (is_coadmin() AND $_SESSION['authright'] < $row->recht))) {
  310. db_query("DELETE FROM prefix_user WHERE id = ".$uid);
  311. db_query("DELETE FROM prefix_userfields WHERE uid = ".$uid);
  312. db_query("DELETE FROM prefix_groupusers WHERE uid = ".$uid);
  313. db_query("DELETE FROM prefix_modulerights WHERE uid = ".$uid);
  314. db_query("DELETE FROM prefix_pm WHERE eid = ".$uid);
  315. db_query("DELETE FROM prefix_online WHERE uid = ".$uid);
  316. //Usergallery entfernen
  317. $sql = db_query("SELECT id,endung FROM prefix_usergallery WHERE uid = ".$uid);
  318. while( $r = db_fetch_object($sql) ){
  319. @unlink("include/images/usergallery/img_$r->id.$r->endung");
  320. @unlink("include/images/usergallery/img_thumb_$r->id.$r->endung");
  321. }
  322. db_query("DELETE FROM prefix_usergallery WHERE uid = ".$uid);
  323. //Avatar
  324. @unlink($row->avatar);
  325. }
  326. }
  327. function sendpm ($sid,$eid,$ti,$te,$status = 0) {
  328. if (is_array($eid)) {
  329. db_query("INSERT INTO `prefix_pm` (`sid`,`eid`,`time`,`titel`,`txt`,`status`) ".
  330. "SELECT ".$sid.",`prefix_user`.`id`,'".time()."','".$ti."','".$te."',".$status." FROM `prefix_user` WHERE `prefix_user`.`id` IN (" . implode(',', $eid) . ")");
  331. } else {
  332. db_query("INSERT INTO `prefix_pm` (`sid`,`eid`,`time`,`titel`,`txt`,`status`) VALUES (".$sid.",".$eid.",'".time()."','".$ti."','".$te."',".$status.")");
  333. }
  334. }
  335. ?>