mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-19 17:38:19 +08:00
core: improved RateLimiter
This commit is contained in:
5 files changed
+23
-22
No files matched your search
@@ -481,8 +481,8 @@ export class ProblemSubmitHandler extends ProblemDetailHandler {
|
||||
throw new ProblemNotAllowPretestError('type');
|
||||
}
|
||||
}
|
||||
await this.limitRate('add_record', 60, system.get('limit.submission_user'), true);
|
||||
await this.limitRate('add_record', 60, system.get('limit.submission'), false);
|
||||
await this.limitRate('add_record', 60, system.get('limit.submission_user'), '{{user}}');
|
||||
await this.limitRate('add_record', 60, system.get('limit.submission'));
|
||||
const files: Record<string, string> = {};
|
||||
if (!code) {
|
||||
const file = this.request.files?.file;
|
||||
@@ -554,8 +554,8 @@ export class ProblemHackHandler extends ProblemDetailHandler {
|
||||
@param('autoOrganizeInput', Types.Boolean, true)
|
||||
@param('tid', Types.ObjectId, true)
|
||||
async post(domainId: string, input = '', autoOrganizeInput = false, tid?: ObjectId) {
|
||||
await this.limitRate('add_record', 60, system.get('limit.submission_user'), true);
|
||||
await this.limitRate('add_record', 60, system.get('limit.submission'), false);
|
||||
await this.limitRate('add_record', 60, system.get('limit.submission_user'), '{{user}}');
|
||||
await this.limitRate('add_record', 60, system.get('limit.submission'));
|
||||
const id = `${this.user._id}/${nanoid()}`;
|
||||
if (this.request.files?.file?.size > 0) {
|
||||
const file = this.request.files.file;
|
||||
|
||||
@@ -58,8 +58,8 @@ class UserLoginHandler extends Handler {
|
||||
}
|
||||
}
|
||||
await Promise.all([
|
||||
this.limitRate('user_login', 60, 30, false),
|
||||
this.limitRate(`user_login_${uname}`, 60, 5, false),
|
||||
this.limitRate('user_login', 60, 30),
|
||||
this.limitRate('user_login_id', 60, 5, uname),
|
||||
oplog.log(this, 'user.login', { redirect }),
|
||||
]);
|
||||
if (udoc.tfa || udoc.authn) {
|
||||
@@ -99,7 +99,7 @@ class UserSudoHandler extends Handler {
|
||||
async post(domainId: string, password = '', tfa = '', authnChallenge = '') {
|
||||
if (!this.session.sudoArgs?.method) throw new ForbiddenError();
|
||||
await Promise.all([
|
||||
this.limitRate('user_sudo', 60, 5, true),
|
||||
this.limitRate('user_sudo', 60, 5, '{{user}}'),
|
||||
oplog.log(this, 'user.sudo', {}),
|
||||
]);
|
||||
if (this.user.authn && authnChallenge) {
|
||||
@@ -206,8 +206,8 @@ export class UserRegisterHandler extends Handler {
|
||||
const mailDomain = mail.split('@')[1];
|
||||
if (await BlackListModel.get(`mail::${mailDomain}`)) throw new BlacklistedError(mailDomain);
|
||||
await Promise.all([
|
||||
this.limitRate(`send_mail_${mail}`, 60, 3, false),
|
||||
this.limitRate('send_mail', 3600, 30, false),
|
||||
this.limitRate('send_mail', 60, 1, mail),
|
||||
this.limitRate('send_mail', 3600, 30),
|
||||
oplog.log(this, 'user.register', {}),
|
||||
]);
|
||||
const t = await token.add(
|
||||
@@ -239,7 +239,7 @@ class UserRegisterWithCodeHandler extends Handler {
|
||||
this.tdoc = await token.get(code, token.TYPE_REGISTRATION);
|
||||
if (!this.tdoc || (!this.tdoc.mail && !this.tdoc.phone)) {
|
||||
// prevent brute forcing tokens
|
||||
await this.limitRate('user_register_with_code', 60, 5, false);
|
||||
await this.limitRate('user_register_with_code', 60, 5);
|
||||
throw new InvalidTokenError(token.TYPE_TEXTS[token.TYPE_REGISTRATION], code);
|
||||
}
|
||||
}
|
||||
@@ -295,8 +295,8 @@ class UserLostPassHandler extends Handler {
|
||||
const udoc = await user.getByEmail('system', mail);
|
||||
if (!udoc) throw new UserNotFoundError(mail);
|
||||
await Promise.all([
|
||||
this.limitRate('send_mail', 3600, 30, false),
|
||||
this.limitRate(`user_lostpass_${mail}`, 60, 3, false),
|
||||
this.limitRate('send_mail', 3600, 30),
|
||||
this.limitRate('send_mail', 60, 1, mail),
|
||||
oplog.log(this, 'user.lostpass', {}),
|
||||
]);
|
||||
const [tid] = await token.add(
|
||||
|
||||
Reference in new issue
Block a user