PageRenderTime 43ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/e/class/qmemberfun.php

https://github.com/westeast/xwdede
PHP | 282 lines | 251 code | 11 blank | 20 comment | 28 complexity | 3c1c950ef3f6ca98979749c07381f177 MD5 | raw file
  1. <?php
  2. //加密
  3. function QMReturnCheckPass($userid,$username,$email,$ecms=1){
  4. global $phome_cookieckrnd;
  5. $r['rnd']=make_password(12);
  6. $r['dotime']=time();
  7. $r['checkpass']=md5(md5($r['rnd'].'-'.$userid.'-'.$r['dotime'].'-'.$ecms).$phome_cookieckrnd);
  8. $r['ecms']=$ecms;
  9. return $r;
  10. }
  11. //验证
  12. function QMReturnCheckThePass($ckuserid,$ckpass,$cktime,$authstr,$ecms=1){
  13. global $empire,$dbtbpre,$phome_cookieckrnd,$public_r;
  14. $f=$ecms==2?'acttime':'getpasstime';
  15. $time=time();
  16. $pr=$empire->fetch1("select ".$f." from {$dbtbpre}enewspublic limit 1");
  17. $ar=explode('||',$authstr);
  18. if($cktime>$time||$time-$cktime>$pr[$f]*3600||$ar[0]!=$cktime)
  19. {
  20. printerror('GPOutTime',$public_r['newsurl'],1);
  21. }
  22. $pass=md5(md5($ar[2].'-'.$ckuserid.'-'.$ar[0].'-'.$ar[1]).$phome_cookieckrnd);
  23. if($pass!=$ckpass)
  24. {
  25. printerror('GPErrorPass',$public_r['newsurl'],1);
  26. }
  27. }
  28. //替换邮件内容变量
  29. function QMRepEmailtext($userid,$username,$email,$pageurl,$title,$text){
  30. global $empire,$dbtbpre,$public_r;
  31. $date=date("Y-m-d");
  32. $r[text]=str_replace('[!--pageurl--]',$pageurl,$text);
  33. $r[text]=str_replace('[!--username--]',$username,$r[text]);
  34. $r[text]=str_replace('[!--email--]',$email,$r[text]);
  35. $r[text]=str_replace('[!--date--]',$date,$r[text]);
  36. $r[text]=str_replace('[!--sitename--]',$public_r[sitename],$r[text]);
  37. $r[text]=str_replace('[!--news.url--]',$public_r[newsurl],$r[text]);
  38. $r[title]=str_replace('[!--pageurl--]',$pageurl,$title);
  39. $r[title]=str_replace('[!--username--]',$username,$r[title]);
  40. $r[title]=str_replace('[!--email--]',$email,$r[title]);
  41. $r[title]=str_replace('[!--date--]',$date,$r[title]);
  42. $r[title]=str_replace('[!--sitename--]',$public_r[sitename],$r[title]);
  43. $r[title]=str_replace('[!--news.url--]',$public_r[newsurl],$r[title]);
  44. return $r;
  45. }
  46. //--------------- 取回密码 --------------
  47. //发送取回密码邮件
  48. function SendGetPasswordEmail($add){
  49. global $empire,$dbtbpre,$public_r,$user_tablename,$user_username,$user_userid,$user_email;
  50. if(!$public_r['opengetpass'])
  51. {
  52. printerror('CloseGetPassword','',1);
  53. }
  54. $username=trim($add[username]);
  55. $email=trim($add[email]);
  56. if(!$username||!$email)
  57. {
  58. printerror("EmptyGetPassword","history.go(-1)",1);
  59. }
  60. //验证码
  61. $key=$add['key'];
  62. $keyvname='checkgetpasskey';
  63. ecmsCheckShowKey($keyvname,$key,1);
  64. $username=RepPostVar($username);
  65. $email=RepPostStr($email);
  66. if(!chemail($email))
  67. {
  68. printerror("EmailFail","history.go(-1)",1);
  69. }
  70. //编码转换
  71. $utfusername=doUtfAndGbk($username,0);
  72. $ur=$empire->fetch1("select ".$user_userid.",".$user_username.",".$user_email." from {$user_tablename} where ".$user_username."='$utfusername' limit 1");
  73. $utfemail=doUtfAndGbk($ur[$user_email],1);
  74. if(!$ur[$user_userid]||$utfemail!=$email)
  75. {
  76. printerror("ErrorGPUsername","history.go(-1)",1);
  77. }
  78. $passr=QMReturnCheckPass($ur[$user_userid],$username,$email,1);
  79. $authstr=$passr['dotime'].'||'.$passr['ecms'].'||'.$passr['rnd'];
  80. $sql=DoUpdateMemberAuthstr($ur[$user_userid],$authstr);
  81. $url=eReturnDomainSiteUrl().'e/member/GetPassword/getpass.php?id='.$ur[$user_userid].'&cc='.$passr[checkpass].'&tt='.$passr['dotime'];
  82. //发送邮件
  83. $pr=$empire->fetch1("select getpasstext,getpasstitle from {$dbtbpre}enewspublic limit 1");
  84. @include(ECMS_PATH.'e/class/SendEmail.inc.php');
  85. $textr=QMRepEmailtext($ur[$user_userid],$username,$email,$url,$pr['getpasstitle'],$pr['getpasstext']);
  86. $sm=EcmsToSendMail($email,$textr['title'],$textr['text']);
  87. ecmsEmptyShowKey($keyvname);//清空验证码
  88. printerror("SendGetPasswordEmailSucess",$public_r['newsurl'],1);
  89. }
  90. //接收验证信息
  91. function CheckGetPassword($add,$ecms=1){
  92. global $empire,$dbtbpre,$public_r,$user_tablename,$user_username,$user_userid,$user_email,$user_checked,$user_group;
  93. $r['id']=(int)$add['id'];
  94. $r['tt']=(int)$add['tt'];
  95. $r['cc']=RepPostVar($add['cc']);
  96. if(!$r[id]||!$r[tt]||!$r[cc])
  97. {
  98. printerror('GPErrorPass',$public_r['newsurl'],1);
  99. }
  100. $ur=$empire->fetch1("select ".$user_userid.",".$user_username.",".$user_checked.",".$user_group." from {$user_tablename} where ".$user_userid."='$r[id]' limit 1");
  101. if(empty($ur[$user_userid]))
  102. {
  103. printerror('GPErrorPass',$public_r['newsurl'],1);
  104. }
  105. $addur=$empire->fetch1("select authstr from {$dbtbpre}enewsmemberadd where userid='$r[id]' limit 1");
  106. if(!$addur['authstr'])
  107. {
  108. printerror('GPErrorPass',$public_r['newsurl'],1);
  109. }
  110. QMReturnCheckThePass($r['id'],$r['cc'],$r['tt'],$addur['authstr'],$ecms);
  111. $r['username']=$ur[$user_username];
  112. $r['checked']=$ur[$user_checked];
  113. $r['groupid']=$ur[$user_group];
  114. return $r;
  115. }
  116. //修改密码
  117. function DoGetPassword($add){
  118. global $empire,$dbtbpre,$public_r,$user_tablename,$user_username,$user_userid,$user_email,$user_password,$user_dopass,$user_salt,$user_saltnum;
  119. if(!$public_r['opengetpass'])
  120. {
  121. printerror('CloseGetPassword','',1);
  122. }
  123. $r=CheckGetPassword($add,1);
  124. $password=RepPostVar($add['newpassword']);
  125. $add['renewpassword']=RepPostVar($add['renewpassword']);
  126. if($password!=$add['renewpassword'])
  127. {
  128. printerror('NotRepassword','',1);
  129. }
  130. //密码
  131. $sa='';
  132. if(empty($user_dopass))//单重md5
  133. {
  134. $password=md5($password);
  135. }
  136. elseif($user_dopass==2)//双重md5
  137. {
  138. $salt=make_password($user_saltnum);
  139. $password=md5(md5($password).$salt);
  140. $sa=",".$user_salt."='$salt'";
  141. }
  142. elseif($user_dopass==3)//16位md5
  143. {
  144. $password=substr(md5($password),8,16);
  145. }
  146. $sql=$empire->query("update {$user_tablename} set ".$user_password."='$password'".$sa." where ".$user_userid."='$r[id]'");
  147. $usql=$empire->query("update {$dbtbpre}enewsmemberadd set authstr='' where userid='$r[id]'");
  148. printerror('GetPasswordSuccess',$public_r['newsurl'],1);
  149. }
  150. //--------------- 帐号激活 --------------
  151. //发送激活帐号邮件
  152. function SendActUserEmail($userid,$username,$email){
  153. global $empire,$dbtbpre,$public_r,$user_tablename,$user_username,$user_userid,$user_email;
  154. $passr=QMReturnCheckPass($userid,$username,$email,2);
  155. $authstr=$passr['dotime'].'||'.$passr['ecms'].'||'.$passr['rnd'];
  156. $sql=DoUpdateMemberAuthstr($userid,$authstr);
  157. $url=eReturnDomainSiteUrl().'e/enews/?enews=DoActUser&id='.$userid.'&cc='.$passr[checkpass].'&tt='.$passr['dotime'];
  158. //发送邮件
  159. $pr=$empire->fetch1("select acttext,acttitle from {$dbtbpre}enewspublic limit 1");
  160. @include(ECMS_PATH.'e/class/SendEmail.inc.php');
  161. $textr=QMRepEmailtext($userid,$username,$email,$url,$pr['acttitle'],$pr['acttext']);
  162. $sm=EcmsToSendMail($email,$textr['title'],$textr['text']);
  163. printerror("SendActUserEmailSucess",$public_r['newsurl'],1);
  164. }
  165. //激活帐号
  166. function DoActUser($add){
  167. global $empire,$dbtbpre,$public_r,$user_tablename,$user_username,$user_userid,$user_checked;
  168. $r=CheckGetPassword($add,2);
  169. if(!$r['checked'])
  170. {
  171. $checked=ReturnGroupChecked($r[groupid]);
  172. if($checked)
  173. {
  174. $sql=$empire->query("update {$user_tablename} set ".$user_checked."=1 where ".$user_userid."='$r[id]'");
  175. }
  176. }
  177. $usql=$empire->query("update {$dbtbpre}enewsmemberadd set authstr='' where userid='$r[id]'");
  178. printerror('ActUserSuccess',$public_r['newsurl'],1);
  179. }
  180. //重新发送帐号激活邮件
  181. function DoRegSend($add){
  182. global $empire,$dbtbpre,$public_r,$user_tablename,$user_username,$user_userid,$user_email,$user_password,$user_dopass,$user_salt,$user_checked;
  183. if($public_r['regacttype']!=1)
  184. {
  185. printerror('CloseRegAct','',1);
  186. }
  187. $username=trim($add[username]);
  188. $password=trim($add[password]);
  189. $email=trim($add[email]);
  190. $newemail=trim($add[newemail]);
  191. if(!$username||!$password||!$email)
  192. {
  193. printerror("EmptyRegAct","history.go(-1)",1);
  194. }
  195. //验证码
  196. $key=$add['key'];
  197. $keyvname='checkregsendkey';
  198. ecmsCheckShowKey($keyvname,$key,1);
  199. $username=RepPostVar($username);
  200. $password=RepPostVar($password);
  201. $username=RepPostStr($username);
  202. $email=RepPostStr($email);
  203. $newemail=RepPostStr($newemail);
  204. if(!chemail($email))
  205. {
  206. printerror("EmailFail","history.go(-1)",1);
  207. }
  208. if($newemail)
  209. {
  210. if(!chemail($newemail))
  211. {
  212. printerror("EmailFail","history.go(-1)",1);
  213. }
  214. $sendemail=$newemail;
  215. }
  216. else
  217. {
  218. $sendemail=$email;
  219. }
  220. //编码转换
  221. $utfusername=doUtfAndGbk($username,0);
  222. $password=doUtfAndGbk($password,0);
  223. //密码
  224. if(empty($user_dopass))//单重md5
  225. {
  226. $password=md5($password);
  227. }
  228. if($user_dopass==3)//16位md5
  229. {
  230. $password=substr(md5($password),8,16);
  231. }
  232. //双重md5
  233. $num=0;
  234. if($user_dopass==2)
  235. {
  236. $ur=$empire->fetch1("select ".$user_userid.",".$user_salt.",".$user_password." from ".$user_tablename." where ".$user_username."='$utfusername' limit 1");
  237. $password=md5(md5($password).$ur[$user_salt]);
  238. $num=0;
  239. if($password==$ur[$user_password])
  240. {$num=1;}
  241. if(empty($ur[$user_userid]))
  242. {$num=0;}
  243. }
  244. else
  245. {
  246. $num=$empire->gettotal("select count(*) as total from ".$user_tablename." where ".$user_username."='$utfusername' and ".$user_password."='".$password."' limit 1");
  247. }
  248. if(!$num)
  249. {
  250. printerror("ErrorRegActUser","history.go(-1)",1);
  251. }
  252. $r=$empire->fetch1("select * from ".$user_tablename." where ".$user_username."='$utfusername' limit 1");
  253. $utfemail=doUtfAndGbk($r[$user_email],1);
  254. if(!$r[$user_userid]||$utfemail!=$email)
  255. {
  256. printerror("ErrorRegActUser","history.go(-1)",1);
  257. }
  258. if($r[$user_checked])
  259. {
  260. printerror("HaveRegActUser",'',1);
  261. }
  262. $addr=$empire->fetch1("select userid,authstr from {$dbtbpre}enewsmemberadd where userid='".$r[$user_userid]."' limit 1");
  263. $ar=explode('||',$addr['authstr']);
  264. if(!$addr['userid']||!$addr['authstr']||$ar[1]!=2)
  265. {
  266. printerror("HaveRegActUser",'',1);
  267. }
  268. ecmsEmptyShowKey($keyvname);//清空验证码
  269. SendActUserEmail($r[$user_userid],$username,$sendemail);
  270. }
  271. ?>