login.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. if (Auth::check()) {
  3. redirectTo('/');
  4. }
  5. function handleLoginPost() {
  6. if (!crsf_check()) {
  7. return 'expired';
  8. }
  9. if (!isset($_POST['username'])) {
  10. return "failed";
  11. }
  12. if (!isset($_POST['password'])) {
  13. return "failed";
  14. }
  15. $username = $_POST['username'];
  16. $password = $_POST['password'];
  17. if (!validateUsername($username)) {
  18. return "failed";
  19. }
  20. if (!validatePassword($password)) {
  21. return "failed";
  22. }
  23. $user = queryUser($username);
  24. if (!$user || !checkPassword($user, $password)) {
  25. return "failed";
  26. }
  27. if ($user['usergroup'] == 'B') {
  28. return "banned";
  29. }
  30. Auth::login($user['username']);
  31. return "ok";
  32. }
  33. if (isset($_POST['login'])) {
  34. echo handleLoginPost();
  35. die();
  36. }
  37. ?>
  38. <?php
  39. $REQUIRE_LIB['md5'] = '';
  40. ?>
  41. <?php echoUOJPageHeader(UOJLocale::get('login')) ?>
  42. <h2 class="page-header"><?= UOJLocale::get('login') ?></h2>
  43. <form id="form-login" class="form-horizontal" method="post">
  44. <div id="div-username" class="form-group">
  45. <label for="input-username" class="col-sm-2 control-label"><?= UOJLocale::get('username') ?></label>
  46. <div class="col-sm-3">
  47. <input type="text" class="form-control" id="input-username" name="username" placeholder="<?= UOJLocale::get('enter your username') ?>" maxlength="20" />
  48. <span class="help-block" id="help-username"></span>
  49. </div>
  50. </div>
  51. <div id="div-password" class="form-group">
  52. <label for="input-password" class="col-sm-2 control-label"><?= UOJLocale::get('password') ?></label>
  53. <div class="col-sm-3">
  54. <input type="password" class="form-control" id="input-password" name="password" placeholder="<?= UOJLocale::get('enter your password') ?>" maxlength="20" />
  55. <span class="help-block" id="help-password"></span>
  56. </div>
  57. </div>
  58. <div class="form-group">
  59. <div class="col-sm-offset-2 col-sm-3">
  60. <button type="submit" id="button-submit" class="btn btn-secondary"><?= UOJLocale::get('submit') ?></button>
  61. </div>
  62. </div>
  63. </form>
  64. <script type="text/javascript">
  65. function validateLoginPost() {
  66. var ok = true;
  67. ok &= getFormErrorAndShowHelp('username', validateUsername);
  68. ok &= getFormErrorAndShowHelp('password', validatePassword);
  69. return ok;
  70. }
  71. function submitLoginPost() {
  72. if (!validateLoginPost()) {
  73. return false;
  74. }
  75. $.post('/login', {
  76. _token : "<?= crsf_token() ?>",
  77. login : '',
  78. username : $('#input-username').val(),
  79. password : md5($('#input-password').val(), "<?= getPasswordClientSalt() ?>")
  80. }, function(msg) {
  81. if (msg == 'ok') {
  82. var prevUrl = document.referrer;
  83. if (prevUrl == '' || /.*\/login.*/.test(prevUrl) || /.*\/logout.*/.test(prevUrl) || /.*\/register.*/.test(prevUrl) || /.*\/reset-password.*/.test(prevUrl)) {
  84. prevUrl = '/';
  85. };
  86. window.location.href = prevUrl;
  87. } else if (msg == 'banned') {
  88. $('#div-username').addClass('has-error');
  89. $('#help-username').html('该账号尚未激活或已被封禁。请依照<a href="https://oj.ryp.org.cn/blog/ryp/post/93">方法</a>进行激活');
  90. } else if (msg == 'expired') {
  91. $('#div-username').addClass('has-error');
  92. $('#help-username').html('页面会话已过期。');
  93. } else {
  94. $('#div-username').addClass('has-error');
  95. $('#help-username').html('用户名或密码错误。');
  96. $('#div-password').addClass('has-error');
  97. $('#help-password').html('用户名或密码错误。<a href="/forgot-password">忘记密码?</a>');
  98. }
  99. });
  100. return true;
  101. }
  102. $(document).ready(function() {
  103. $('#form-login').submit(function(e) {
  104. e.preventDefault();
  105. submitLoginPost();
  106. });
  107. });
  108. </script>
  109. <?php echoUOJPageFooter() ?>