forgot_pw.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. requirePHPLib('form');
  3. $forgot_form = new UOJForm('forgot');
  4. $forgot_form->addInput('username', 'text', '用户名', '',
  5. function($username, &$vdata) {
  6. if (!validateUsername($username)) {
  7. return '用户名不合法';
  8. }
  9. $vdata['user'] = queryUser($username);
  10. if (!$vdata['user']) {
  11. return '该用户不存在';
  12. }
  13. return '';
  14. },
  15. null
  16. );
  17. $forgot_form->handle = function(&$vdata) {
  18. $user = $vdata['user'];
  19. $password = $user["password"];
  20. $oj_name = UOJConfig::$data['profile']['oj-name'];
  21. $oj_name_short = UOJConfig::$data['profile']['oj-name-short'];
  22. $sufs = base64url_encode($user['username'] . "." . md5($user['username'] . "+" . $password));
  23. $url = HTML::url("/reset-password", array('params' => array('p' => $sufs)));
  24. $html = <<<EOD
  25. <base target="_blank" />
  26. <p>{$user['username']}您好,</p>
  27. <p>您刚刚启用了{$oj_name_short}密码找回功能,请进入下面的链接重设您的密码:</p>
  28. <p><a href="$url">$url</a></p>
  29. <p>{$oj_name}</p>
  30. <style type="text/css">
  31. body{font-size:14px;font-family:arial,verdana,sans-serif;line-height:1.666;padding:0;margin:0;overflow:auto;white-space:normal;word-wrap:break-word;min-height:100px}
  32. pre {white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}
  33. </style>
  34. EOD;
  35. $mailer = UOJMail::noreply();
  36. $mailer->addAddress($user['email'], $user['username']);
  37. $mailer->Subject = $oj_name_short."密码找回";
  38. $mailer->msgHTML($html);
  39. if (!$mailer->send()) {
  40. error_log($mailer->ErrorInfo);
  41. becomeMsgPage('<div class="text-center"><h2>邮件发送失败,请重试 <span class="glyphicon glyphicon-remove"></span></h2></div>');
  42. } else {
  43. becomeMsgPage('<div class="text-center"><h2>邮件发送成功 <span class="glyphicon glyphicon-ok"></span></h2></div>');
  44. }
  45. };
  46. $forgot_form->submit_button_config['align'] = 'offset';
  47. $forgot_form->runAtServer();
  48. ?>
  49. <?php echoUOJPageHeader('找回密码') ?>
  50. <h2 class="page-header">找回密码</h2>
  51. <h4>请输入需要找回密码的用户名:</h4>
  52. <?php $forgot_form->printHTML(); ?>
  53. <?php echoUOJPageFooter() ?>