mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-12-27 21:51:51 +00:00
120 lines
3.0 KiB
PHP
120 lines
3.0 KiB
PHP
<?php
|
|
if (!isset($_GET['p'])) {
|
|
become404Page();
|
|
}
|
|
|
|
list($username, $check_code) = explode('.', base64url_decode($_GET['p']));
|
|
$user = UOJUser::query($username);
|
|
|
|
if (!$user) become404Page();
|
|
if (!isset($check_code) || strlen($check_code) != 32) become404Page();
|
|
|
|
$extra = UOJUser::getExtra($user);
|
|
|
|
if ($check_code !== $extra['reset_password_check_code']) {
|
|
become404Page();
|
|
}
|
|
|
|
if (UOJTime::str2time($extra['reset_password_time'])->add(new DateInterval('P3D')) < UOJTime::$time_now) {
|
|
becomeMsgPage('链接已过期');
|
|
}
|
|
|
|
function resetPassword() {
|
|
global $user;
|
|
|
|
if (!isset($_POST['newPW']) || !validatePassword($_POST['newPW'])) {
|
|
return '操作失败,无效密码';
|
|
}
|
|
|
|
$newPW = $_POST['newPW'];
|
|
$newPW = getPasswordToStore($newPW, $user['username']);
|
|
|
|
DB::update([
|
|
"update user_info",
|
|
"set", [
|
|
"password" => $newPW,
|
|
"extra" => DB::json_remove('extra', '$.reset_password_check_code', '$.reset_password_time'),
|
|
],
|
|
"where", [
|
|
"username" => $user['username'],
|
|
],
|
|
]);
|
|
|
|
return 'ok';
|
|
}
|
|
if (isset($_POST['reset'])) {
|
|
die(resetPassword());
|
|
}
|
|
?>
|
|
<?php
|
|
$REQUIRE_LIB['dialog'] = '';
|
|
$REQUIRE_LIB['md5'] = '';
|
|
?>
|
|
<?php echoUOJPageHeader('更改密码') ?>
|
|
<h2 class="page-header">更改密码</h2>
|
|
<form id="form-reset" class="form-horizontal">
|
|
<div id="div-password" class="form-group">
|
|
<label for="input-password" class="col-sm-2 control-label">新密码</label>
|
|
<div class="col-sm-3">
|
|
<input type="password" class="form-control" id="input-password" name="password" placeholder="输入新密码" maxlength="20" />
|
|
<input type="password" class="form-control top-buffer-sm" id="input-confirm_password" placeholder="再次输入新密码" maxlength="20" />
|
|
<span class="help-block" id="help-password"></span>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<div class="col-sm-offset-2 col-sm-3">
|
|
<button type="submit" id="button-submit" class="btn btn-secondary">提交</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
<script type="text/javascript">
|
|
function validateResetPwPost() {
|
|
var ok = true;
|
|
ok &= getFormErrorAndShowHelp('password', validateSettingPassword);
|
|
return ok;
|
|
}
|
|
$(document).ready(function() {
|
|
$('#form-reset').submit(function(e) {
|
|
if (!validateResetPwPost()) {
|
|
return false;
|
|
}
|
|
$.post(<?= json_encode($_SERVER['REQUEST_URI']) ?>, {
|
|
reset: '',
|
|
newPW: md5($('#input-password').val(), "<?= getPasswordClientSalt() ?>")
|
|
}, function(res) {
|
|
if (res == 'ok') {
|
|
BootstrapDialog.show({
|
|
title: '提示',
|
|
message: '密码更改成功',
|
|
type: BootstrapDialog.TYPE_SUCCESS,
|
|
buttons: [{
|
|
label: '好的',
|
|
action: function(dialog) {
|
|
dialog.close();
|
|
}
|
|
}],
|
|
onhidden: function(dialog) {
|
|
window.location.href = '/login';
|
|
}
|
|
});
|
|
} else {
|
|
BootstrapDialog.show({
|
|
title: '提示',
|
|
message: res,
|
|
type: BootstrapDialog.TYPE_DANGER,
|
|
buttons: [{
|
|
label: '好的',
|
|
action: function(dialog) {
|
|
dialog.close();
|
|
}
|
|
}]
|
|
});
|
|
}
|
|
});
|
|
return false;
|
|
});
|
|
});
|
|
</script>
|
|
<?php echoUOJPageFooter() ?>
|