diff --git a/src/helpers/APILimitsHelper.ts b/src/helpers/APILimitsHelper.ts index b3887a8..ad579c0 100644 --- a/src/helpers/APILimitsHelper.ts +++ b/src/helpers/APILimitsHelper.ts @@ -8,6 +8,7 @@ */ import { time } from "../utils/DateUtils"; +import { removeWhere } from "../utils/ArrayUtils"; // Different supported actions export enum Action { @@ -18,7 +19,7 @@ export enum Action { /** * The duration entries will be kept in the table */ -const MAX_TIME = 20;//3600; // 1 hour +const MAX_TIME = 3600; // 1 hour /** * Information about a specific IP & action @@ -44,6 +45,10 @@ export class APILimitHelper { * @param action Target action */ private static FindEntry(ip: string, action: Action) : CountInfo { + + // Remove old entries + removeWhere(list, (entry) => entry.time + MAX_TIME < time()); + return list.find((f) => f.ip == ip && f.action == action); } @@ -77,7 +82,7 @@ export class APILimitHelper { */ public static async Count(ip: string, action: Action) : Promise { const entry = this.FindEntry(ip, action); - console.log(entry) + return entry == undefined ? 0 : entry.count; } } diff --git a/src/utils/ArrayUtils.ts b/src/utils/ArrayUtils.ts index b734e8c..f667c95 100644 --- a/src/utils/ArrayUtils.ts +++ b/src/utils/ArrayUtils.ts @@ -21,4 +21,20 @@ export function findKey(object: Object, value: any): string { } return null; -} \ No newline at end of file +} + +/** + * Remove all the entries of an array that meets a certain condition + * + * @param array Input array + * @param callback Callback function to call on each element + * of the array + */ +export function removeWhere(array: Array, callback: (el: T) => boolean) { + var i = array.length; + while (i--) { + if (callback(array[i])) { + array.splice(i, 1); + } + } +}; \ No newline at end of file