1
0
mirror of https://gitlab.com/comunic/comunicapiv2 synced 2024-11-25 23:09:22 +00:00

Automatically clean up old entries

This commit is contained in:
Pierre HUBERT 2020-03-25 18:01:07 +01:00
parent 7a1a26e919
commit ea99796edf
2 changed files with 24 additions and 3 deletions

View File

@ -8,6 +8,7 @@
*/ */
import { time } from "../utils/DateUtils"; import { time } from "../utils/DateUtils";
import { removeWhere } from "../utils/ArrayUtils";
// Different supported actions // Different supported actions
export enum Action { export enum Action {
@ -18,7 +19,7 @@ export enum Action {
/** /**
* The duration entries will be kept in the table * 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 * Information about a specific IP & action
@ -44,6 +45,10 @@ export class APILimitHelper {
* @param action Target action * @param action Target action
*/ */
private static FindEntry(ip: string, action: Action) : CountInfo { 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); 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<number> { public static async Count(ip: string, action: Action) : Promise<number> {
const entry = this.FindEntry(ip, action); const entry = this.FindEntry(ip, action);
console.log(entry)
return entry == undefined ? 0 : entry.count; return entry == undefined ? 0 : entry.count;
} }
} }

View File

@ -22,3 +22,19 @@ export function findKey(object: Object, value: any): string {
return null; return null;
} }
/**
* 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<T>(array: Array<T>, callback: (el: T) => boolean) {
var i = array.length;
while (i--) {
if (callback(array[i])) {
array.splice(i, 1);
}
}
};