mirror of
https://gitlab.com/comunic/comunicapiv2
synced 2024-11-22 13:29:22 +00:00
Automatically clean up old entries
This commit is contained in:
parent
7a1a26e919
commit
ea99796edf
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user