PageRenderTime 67ms CodeModel.GetById 16ms RepoModel.GetById 3ms app.codeStats 0ms

/modules/account.php

https://bitbucket.org/simancms/simancms
PHP | 264 lines | 239 code | 10 blank | 15 comment | 58 complexity | 319291417b953b6511b09c01a16eebe4 MD5 | raw file
  1. <?php
  2. //------------------------------------------------------------------------------
  3. //| Content Management System SiMan CMS |
  4. //| http://www.simancms.org |
  5. //------------------------------------------------------------------------------
  6. /*
  7. Module Name: Account
  8. Module URI: http://simancms.org/modules/download/
  9. Description: Accounts module. Base CMS module
  10. Version: 1.6.21
  11. Revision: 2021-12-01
  12. Author URI: http://simancms.org/
  13. */
  14. use SM\SM;
  15. use SM\UI\Form;
  16. use SM\UI\UI;
  17. if (!defined("SIMAN_DEFINED"))
  18. exit('Hacking attempt!');
  19. sm_default_action('show');
  20. if (sm_actionpost("postregister") && !sm_empty_settings('allow_register'))
  21. {
  22. sm_template('account');
  23. sm_title($lang['register']);
  24. $login = sm_postvars("p_login");
  25. $password = sm_postvars("p_password");
  26. $password2 = sm_postvars("p_password2");
  27. if (intval(sm_settings('use_email_as_login')) == 1)
  28. $email = $login;
  29. else
  30. $email = sm_postvars("p_email");
  31. $question = sm_postvars("p_question");
  32. $answer = sm_postvars("p_answer");
  33. sm_event('postregistercheckdata', array(0));
  34. if (empty($login) || empty($password) || empty($password2) || empty($email) || (intval(sm_settings('account_disable_secret_question')!=1) && (empty($question) || empty($answer))) || !empty($special['postregistercheckdataerror']))
  35. {
  36. $m['message'] = $lang["message_set_all_fields"].(empty($special['postregistercheckdataerror']) ? '' : '. '.$special['postregistercheckdataerror']);
  37. sm_set_action('register');
  38. }
  39. elseif (!is_email($email))
  40. {
  41. $m['message'] = $lang["message_bad_email"];
  42. sm_set_action('register');
  43. }
  44. elseif (sm_strcmp($password, $password2) != 0)
  45. {
  46. $m['message'] = $lang["message_passwords_not_equal"];
  47. sm_set_action('register');
  48. }
  49. elseif (intval(sm_settings('use_protect_code')) == 1 && (sm_strcmp($_sessionvars['protect_code'], sm_postvars('p_protect_code')) != 0 || empty(sm_postvars('p_protect_code'))))
  50. {
  51. $m['message'] = $lang['module_account']['wrong_protect_code'];
  52. sm_set_action('register');
  53. }
  54. elseif (sm_user_exists($login))
  55. {
  56. $m['message'] = $lang["message_this_login_present_try_another"];
  57. sm_set_action('register');
  58. }
  59. elseif (intval(TQuery::ForTable(sm_global_table_prefix().'users')->Add('email', dbescape($email))->GetField('id_user'))>0)
  60. {
  61. $m['message'] = $lang["message_bad_email"];
  62. sm_set_action('register');
  63. }
  64. else
  65. {
  66. if (intval(sm_settings('user_activating_by_admin')) == 1)
  67. $user_status = '0';
  68. else
  69. $user_status = '1';
  70. $id_newuser = sm_add_user($login, $password, $email, $question, $answer, $user_status);
  71. sm_event('successregister', array($id_newuser));
  72. if (!sm_empty_settings('redirect_after_register'))
  73. {
  74. sm_redirect(sm_settings('redirect_after_register'));
  75. }
  76. elseif (SM::isAdministrator())
  77. {
  78. sm_redirect('index.php?m=account&d=usrlist');
  79. }
  80. sm_set_action('successregister');
  81. log_write(LOG_LOGIN, $lang['module_account']['log']['user_registered'].': '.$login.'. '.$lang['email'].': '.$email);
  82. }
  83. }
  84. sm_on_action('successregister', function ()
  85. {
  86. sm_title(sm_lang('register'));
  87. $ui = new UI();
  88. $ui->p(sm_lang('success_registration'));
  89. $ui->a('index.php?m=account&d=show', sm_lang('you_can_enter'));
  90. $ui->Output(true);
  91. });
  92. if (intval(sm_settings('allow_forgot_password')) == 1)
  93. {
  94. if (sm_action('getpasswd'))
  95. {
  96. sm_title($lang['get_password']);
  97. $ui=new UI();
  98. $f=new Form('index.php');
  99. $f->SetMethodGet();
  100. $f->AddHidden('m', sm_current_module());
  101. $f->AddHidden('d', 'getpasswd2');
  102. $f->AddText('login', $lang['login_str'])
  103. ->SetFocus();
  104. $f->SaveButton($lang['get_password']);
  105. $ui->Add($f);
  106. $ui->Output(true);
  107. }
  108. if (sm_action('getpasswd3'))
  109. {
  110. sm_template('account');
  111. sm_title($lang['get_password']);
  112. $usr_name = dbescape(strtolower(sm_getvars("login")));
  113. $usr_answer = dbescape(sm_postvars("p_answ"));
  114. $usr_newpwd = dbescape(sm_password_hash(sm_postvars("p_newpwd"), sm_getvars("login")));
  115. $info = getsql("SELECT id_user FROM ".sm_global_table_prefix()."users WHERE lower(login)='$usr_name' AND answer='$usr_answer' AND answer<>''");
  116. if (!empty($info['id_user']))
  117. {
  118. execsql("UPDATE ".sm_global_table_prefix()."users SET password='$usr_newpwd', random_code='".dbescape(md5($usr_name.microtime(true).rand()))."' WHERE lower(login)='$usr_name' AND answer='$usr_answer' AND answer<>''");
  119. log_write(LOG_LOGIN, $lang['get_password'].' - '.$lang['common']['ok']);
  120. sm_event('onchangepassword', Array('login' => sm_getvars("login"), 'newpassword' => sm_postvars("p_newpwd")));
  121. sm_notify($lang['message_forgot_password_finish']);
  122. sm_redirect('index.php?m=account');
  123. }
  124. else
  125. {
  126. log_write(LOG_LOGIN, $lang['get_password'].' - '.$lang["error"]);
  127. sm_set_action('getpasswd2');
  128. }
  129. }
  130. if (sm_action('getpasswd2'))
  131. {
  132. sm_template('account');
  133. sm_title($lang["get_password"]);
  134. $usr_name = sm_getvars("login");
  135. $sql = "SELECT * FROM ".sm_global_table_prefix()."users WHERE login='".dbescape(strtolower($usr_name))."'";
  136. $result = execsql($sql);
  137. while ($row = database_fetch_object($result))
  138. {
  139. $m['secret_question'] = $row->question;
  140. $m['userdata_login'] = $usr_name;
  141. }
  142. if (empty($m['secret_question']))
  143. sm_set_action('wronglogin');
  144. }
  145. }
  146. if (sm_action('register'))
  147. {
  148. if (!sm_empty_settings('allow_register') || SM::isAdministrator())
  149. {
  150. sm_template('account');
  151. sm_title($lang['register']);
  152. if (intval(sm_settings('use_protect_code')) == 1)
  153. siman_generate_protect_code();
  154. sm_event('onregister', array(''));
  155. sm_page_viewid('account-register');
  156. }
  157. else
  158. {
  159. sm_error_page($lang['error'], $lang['you_cant_register']);
  160. }
  161. }
  162. if (sm_action('login'))
  163. {
  164. sm_template('account');
  165. sm_title($lang['login_caption']);
  166. if (!empty(sm_postvars('login_d')))
  167. {
  168. sm_event('beforelogincheck');
  169. if ($uid=sm_check_user(sm_postvars('login_d'), sm_postvars('passwd_d')))
  170. {
  171. sm_event('beforelogin');
  172. sm_process_login($uid);
  173. sm_notify($lang['message_success_login']);
  174. //$sql="UPDATE ".sm_global_table_prefix()."users SET id_session='".$userinfo['session']."', last_login='".time()."' WHERE id_user='".$userinfo['id']."'";
  175. //$result=execsql($sql);
  176. if (intval(sm_postvars('autologin_d')) == 1 || intval(sm_settings('alwaysautologin')) == 1)
  177. {
  178. setcookie(sm_settings('cookprefix').'simanautologin', md5($session_prefix.$userinfo['info']['random_code'].$userinfo['id']), time() + (intval(sm_settings('autologinlifetime')) > 0 ? intval(sm_settings('autologinlifetime')) : 30758400));
  179. }
  180. log_write(LOG_LOGIN, $lang['module_account']['log']['user_logged']);
  181. if (intval(sm_settings('return_after_login')) == 1 && !empty(sm_postvars('p_goto_url')))
  182. {
  183. sm_redirect(sm_postvars('p_goto_url'));
  184. }
  185. elseif (!sm_empty_settings('redirect_after_login_3') && SM::isAdministrator())
  186. {
  187. sm_redirect(sm_settings('redirect_after_login_3'));
  188. }
  189. elseif (!sm_empty_settings('redirect_after_login_2') && SM::User()->Level() >= 2)
  190. {
  191. sm_redirect(sm_settings('redirect_after_login_2'));
  192. }
  193. elseif (!sm_empty_settings('redirect_after_login_1') && SM::User()->Level() >= 1)
  194. {
  195. sm_redirect(sm_settings('redirect_after_login_1'));
  196. }
  197. else
  198. {
  199. if (!sm_empty_settings('cabinet_module'))
  200. sm_redirect('index.php?m='.sm_settings('cabinet_module'));
  201. else
  202. sm_redirect('index.php?m=account&d=cabinet');
  203. }
  204. }
  205. else
  206. {
  207. sm_set_action('wronglogin');
  208. log_write(LOG_DANGER, $lang['module_account']['log']['user_not_logged'].': '.htmlescape(sm_postvars('login_d')));
  209. sm_setfocus('login_d');
  210. $autoban_time = sm_get_settings('autoban_time', 'general');
  211. sm_tempdata_addint('wronglogin', sm_ip_address(), time(), $autoban_time);
  212. //Autoban checking
  213. if (intval(sm_tempdata_aggregate('wronglogin', sm_ip_address(), SM_AGGREGATE_COUNT)) > intval(sm_get_settings('autoban_attempts', 'general')))
  214. {
  215. sm_ban_ip($autoban_time);
  216. sm_tempdata_remove('wronglogin', sm_ip_address());
  217. sm_access_denied();
  218. }
  219. }
  220. }
  221. else
  222. sm_set_action('show');
  223. }
  224. if (sm_action('show'))
  225. {
  226. if (sm_is_main_block() && SM::isLoggedIn())
  227. sm_set_action('cabinet');
  228. else
  229. {
  230. sm_title($lang['login_caption']);
  231. sm_template('account');
  232. $m['goto_url'] = $_servervars['REQUEST_URI'];
  233. if (sm_is_main_block())
  234. sm_setfocus('login_d');
  235. if (!empty($userinfo['id']))
  236. {
  237. $m['cabinet_home_url'] = 'index.php?m=account&d=cabinet';
  238. if (!sm_empty_settings('cabinet_module'))
  239. $m['cabinet_home_url'] = 'index.php?m='.sm_settings('cabinet_module');
  240. }
  241. sm_event('onshowloginpage', ['']);
  242. sm_page_viewid('account-show');
  243. }
  244. }
  245. if (SM::isLoggedIn())
  246. include('modules/inc/memberspart/account.php');
  247. else
  248. if (sm_action('logout'))
  249. {
  250. if (!sm_empty_settings('redirect_after_logout'))
  251. sm_redirect(sm_settings('redirect_after_logout'));
  252. else
  253. sm_redirect(sm_homepage());
  254. }