chore: Rate limiter audit (#3965)
* chore: Rate limiter audit api/users * Make requests required * api/collections * Remove checkRateLimit on FileOperation (now done at route level through rate limiter) * auth rate limit * Add metric logging when rate limit exceeded * Refactor to shared configs * test
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
import { subHours } from "date-fns";
|
||||
import { Op, WhereOptions } from "sequelize";
|
||||
import {
|
||||
ForeignKey,
|
||||
@@ -8,9 +7,7 @@ import {
|
||||
BelongsTo,
|
||||
Table,
|
||||
DataType,
|
||||
AfterValidate,
|
||||
} from "sequelize-typescript";
|
||||
import { RateLimitExceededError } from "@server/errors";
|
||||
import { deleteFromS3, getFileByKey } from "@server/utils/s3";
|
||||
import Collection from "./Collection";
|
||||
import Team from "./Team";
|
||||
@@ -53,15 +50,13 @@ export enum FileOperationState {
|
||||
@Table({ tableName: "file_operations", modelName: "file_operation" })
|
||||
@Fix
|
||||
class FileOperation extends IdModel {
|
||||
@Column(DataType.ENUM("import", "export"))
|
||||
@Column(DataType.ENUM(...Object.values(FileOperationType)))
|
||||
type: FileOperationType;
|
||||
|
||||
@Column(DataType.STRING)
|
||||
format: FileOperationFormat;
|
||||
|
||||
@Column(
|
||||
DataType.ENUM("creating", "uploading", "complete", "error", "expired")
|
||||
)
|
||||
@Column(DataType.ENUM(...Object.values(FileOperationState)))
|
||||
state: FileOperationState;
|
||||
|
||||
@Column
|
||||
@@ -93,21 +88,6 @@ class FileOperation extends IdModel {
|
||||
await deleteFromS3(model.key);
|
||||
}
|
||||
|
||||
@AfterValidate
|
||||
static async checkRateLimit(model: FileOperation) {
|
||||
const count = await this.countExportsAfterDateTime(
|
||||
model.teamId,
|
||||
subHours(new Date(), 12),
|
||||
{
|
||||
type: model.type,
|
||||
}
|
||||
);
|
||||
|
||||
if (count >= 12) {
|
||||
throw RateLimitExceededError();
|
||||
}
|
||||
}
|
||||
|
||||
// associations
|
||||
|
||||
@BelongsTo(() => User, "userId")
|
||||
|
||||
Reference in New Issue
Block a user