switch.inc.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: switch.inc.php 29558 2012-04-18 10:17:22Z monkey $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. if(!$_G['uid']) {
  12. showmessage('not_loggedin', NULL, array(), array('login' => 1));
  13. }
  14. $myrepeatsusergroups = (array)dunserialize($_G['cache']['plugin']['myrepeats']['usergroups']);
  15. if(!empty($_GET['list'])) {
  16. if(in_array('', $myrepeatsusergroups)) {
  17. $myrepeatsusergroups = array();
  18. }
  19. $userlist = array();
  20. if(!in_array($_G['groupid'], $myrepeatsusergroups)) {
  21. $userlist = get_rrepeats($_G['username']);
  22. $count = count($userlist);
  23. if(!$count) {
  24. unset($_G['setting']['plugins']['spacecp']['myrepeats:memcp']);
  25. }
  26. }
  27. foreach(C::t('#myrepeats#myrepeats')->fetch_all_by_uid($_G['uid']) as $user) {
  28. $userlist[$user['username']] = $user['username'];
  29. }
  30. $list = '<ul>';
  31. foreach($userlist as $user) {
  32. if(!$user) {
  33. continue;
  34. }
  35. $list .= '<li><a href="plugin.php?id=myrepeats:switch&username='.rawurlencode($user).'&formhash='.FORMHASH.'" onclick="showWindow(\'myrepeat\', this.href);return false;">'.$user.'</a></li>';
  36. }
  37. $list .= '<li><a href="home.php?mod=spacecp&ac=plugin&id=myrepeats:memcp">'.lang('plugin/myrepeats', 'memcp').'</a></li>';
  38. include template('common/header_ajax');
  39. echo $list;
  40. include template('common/footer_ajax');
  41. exit;
  42. }
  43. if($_GET['formhash'] != FORMHASH) {
  44. showmessage('undefined_action');
  45. }
  46. $referer = dreferer();
  47. if(in_array('', $myrepeatsusergroups)) {
  48. $myrepeatsusergroups = array();
  49. }
  50. if(!in_array($_G['groupid'], $myrepeatsusergroups)) {
  51. $users = C::t('#myrepeats#myrepeats')->fetch_all_by_username($_G['username']);
  52. if(!$users) {
  53. showmessage('myrepeats:usergroup_disabled');
  54. } else {
  55. $permusers = array();
  56. foreach($users as $user) {
  57. $permusers[] = $user['uid'];
  58. }
  59. $member = C::t('common_member')->fetch_by_username($_GET['username']);
  60. if(!$member || !in_array($member['uid'], $permusers)) {
  61. showmessage('myrepeats:usergroup_disabled');
  62. }
  63. }
  64. }
  65. require_once libfile('function/member');
  66. $_G['myrepeats_loginperm'] = logincheck($_GET['username']);
  67. if(!$_G['myrepeats_loginperm']) {
  68. showmessage('myrepeats:login_strike', '', array('loginperm' => $_G['myrepeats_loginperm']));
  69. }
  70. if(!empty($_GET['authorfirst']) && submitcheck('myrepeatssubmit')) {
  71. $result = userlogin($_GET['username'], $_GET['password'], $_GET['questionid'], $_GET['answer'], 'username', $_G['clientip']);
  72. $_G['myrepeats_ucresult'] = $result['ucresult'];
  73. if($result['status'] > 0) {
  74. $logindata = addslashes(authcode($_GET['password']."\t".$_GET['questionid']."\t".$_GET['answer'], 'ENCODE', $_G['config']['security']['authkey']));
  75. if(C::t('#myrepeats#myrepeats')->count_by_uid_username($_G['uid'], $_GET['username'])) {
  76. C::t('#myrepeats#myrepeats')->update_logindata_by_uid_username($_G['uid'], $_GET['username'], $logindata);
  77. } else {
  78. C::t('#myrepeats#myrepeats')->insert(array(
  79. 'uid' => $_G['uid'],
  80. 'username' => $_GET[username],
  81. 'logindata' => $logindata,
  82. 'comment' => ''
  83. ));
  84. }
  85. } else {
  86. myrepeats_loginfailure($_GET['username'], $_GET['password'], $_GET['questionid'], $_GET['answer']);
  87. }
  88. }
  89. $user = C::t('#myrepeats#myrepeats')->fetch_all_by_uid_username($_G['uid'], $_GET['username']);
  90. $user = current($user);
  91. $olddiscuz_uid = $_G['uid'];
  92. $olddiscuz_user = $_G['username'];
  93. $olddiscuz_userss = $_G['member']['username'];
  94. if(!$user) {
  95. $newuid = C::t('common_member')->fetch_uid_by_username($_GET['username']);
  96. if(C::t('#myrepeats#myrepeats')->count_by_uid_username($newuid, $olddiscuz_userss)) {
  97. $username = htmlspecialchars($_GET['username']);
  98. include template('myrepeats:switch_login');
  99. exit;
  100. }
  101. showmessage('myrepeats:user_nonexistence');
  102. } elseif($user['locked']) {
  103. showmessage('myrepeats:user_locked', '', array('user' => $_GET['username']));
  104. }
  105. list($password, $questionid, $answer) = explode("\t", authcode($user['logindata'], 'DECODE', $_G['config']['security']['authkey']));
  106. $result = userlogin($_GET['username'], $password, $questionid, $answer, 'username', $_G['clientip']);
  107. $_G['myrepeats_ucresult'] = $result['ucresult'];
  108. if($result['status'] > 0) {
  109. setloginstatus($result['member'], 2592000);
  110. C::t('#myrepeats#myrepeats')->update_lastswitch_by_uid_username($olddiscuz_uid, $_GET['username'], TIMESTAMP);
  111. $ucsynlogin = $_G['setting']['allowsynlogin'] ? uc_user_synlogin($_G['uid']) : '';
  112. dsetcookie('mrn', '');
  113. dsetcookie('mrd', '');
  114. $comment = $user['comment'] ? '('.$user['comment'].') ' : '';
  115. showmessage('myrepeats:login_succeed', $referer, array('user' => $_G['member']['username'], 'usergroup' => $_G['group']['grouptitle'], 'comment' => $comment), array('showmsg' => 1, 'showdialog' => 1, 'locationtime' => 3, 'extrajs' => $ucsynlogin));
  116. } elseif($result['status'] == -1) {
  117. clearcookies();
  118. $_G['myrepeats_ucresult']['username'] = addslashes($_G['myrepeats_ucresult']['username']);
  119. $_G['username'] = '';
  120. $_G['uid'] = 0;
  121. $auth = authcode($_G['myrepeats_ucresult']['username']."\t".formhash(), 'ENCODE');
  122. showmessage('myrepeats:login_activation', 'member.php?mod='.$_G['setting']['regname'].'&action=activation&auth='.rawurlencode($auth).'&referer='.rawurlencode($referer), array('user' => $_G['myrepeats_ucresult']['username']), array('showmsg' => 1, 'showdialog' => 1, 'locationtime' => 3));
  123. } else {
  124. myrepeats_loginfailure($_GET['username'], $password, $questionid, $answer);
  125. }
  126. function myrepeats_loginfailure($username, $password, $questionid, $answer) {
  127. global $_G;
  128. $password = preg_replace("/^(.{".round(strlen($password) / 4)."})(.+?)(.{".round(strlen($password) / 6)."})$/s", "\\1***\\3", $password);
  129. $errorlog = dhtmlspecialchars(
  130. TIMESTAMP."\t".
  131. ($_G['myrepeats_ucresult']['username'] ? $_G['myrepeats_ucresult']['username'] : stripslashes($username))."\t".
  132. $password."\t".
  133. "Ques #".intval($questionid)."\t".
  134. $_G['clientip']);
  135. writelog('illegallog', $errorlog);
  136. loginfailed($username);
  137. $fmsg = $_G['myrepeats_ucresult']['uid'] == '-3' ? (empty($questionid) || $answer == '' ? 'login_question_empty' : 'login_question_invalid') : 'login_invalid';
  138. if($_G['myrepeats_loginperm'] > 1) {
  139. showmessage('myrepeats:'.$fmsg, '', array('loginperm' => $_G['myrepeats_loginperm']));
  140. } elseif($_G['myrepeats_loginperm'] == -1) {
  141. showmessage('myrepeats:login_password_invalid');
  142. } else {
  143. showmessage('myrepeats:login_strike');
  144. }
  145. }
  146. function get_rrepeats($username) {
  147. $users = C::t('#myrepeats#myrepeats')->fetch_all_by_username($username);
  148. $uids = array();
  149. foreach($users as $user) {
  150. $uids[] = $user['uid'];
  151. }
  152. $userlist = array();
  153. foreach(C::t('common_member')->fetch_all($uids) as $user) {
  154. $userlist[$user['username']] = $user['username'];
  155. }
  156. return $userlist;
  157. }
  158. ?>