X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_minichat.erl;h=35a9d9714c058e82177b5bb9b0e226aa5f7a382d;hp=6f229aca5c093690c718e265690ca28d1b4cc36a;hb=d9d05b6a2a13c2da190dd68d4409381d093679b2;hpb=bab95a234628a5c3efe969b85a81a054591f219c diff --git a/modules/erl/euphorik_minichat.erl b/modules/erl/euphorik_minichat.erl index 6f229ac..35a9d97 100755 --- a/modules/erl/euphorik_minichat.erl +++ b/modules/erl/euphorik_minichat.erl @@ -35,10 +35,12 @@ nouveau_message/3, reset/0, % reservé : + can_register/1, resultat_transaction/1 ]). --include("../include/euphorik_bd.hrl"). +-include("../include/euphorik_bd.hrl"). +-include("../include/euphorik_defines.hrl"). -include_lib("stdlib/include/qlc.hrl"). % Un message est considéré comme du spam s'il est posté 1 seconde ou moins après le dernier posté @@ -424,8 +426,35 @@ repond_a(M_id) -> E#reponse_minichat.repondant =:= M_id, M#minichat.id =:= E#reponse_minichat.cible])) end - )). - + )). + + +% Si deux enregistrements consequtifs de la même IP sont fait en moins d'une seconde alors +% ip_table.nb_try_register est incrémenté de 1 sinon il est décrémenté de 1 (jusqu'a 0). +% Si ip_table.nb_try_register vaut 5 alors l'ip ne peux plus s'enregistrer pour une heure. +can_register(IP) -> + resultat_transaction(mnesia:transaction( + fun() -> + case qlc:e(qlc:q([I || I <- mnesia:table(ip_table), I#ip_table.ip =:= IP])) of + [] -> + mnesia:write(#ip_table{ip = IP, date_last_try_register = now()}), + true; + [T] -> + Delta = delta_date_ms(T#ip_table.date_last_try_register, now()), + if T#ip_table.nb_try_register =:= ?NB_MAX_FLOOD_REGISTER, Delta < ?TEMPS_BAN_FLOOD_REGISTER -> + false; + true -> + mnesia:write(#ip_table{ + ip = IP, + date_last_try_register = now(), + nb_try_register = T#ip_table.nb_try_register + if Delta < ?TEMPS_FLOOD_REGISTER -> 1; T#ip_table.nb_try_register > 0 -> -1; true -> 0 end + }), + true + end + end + end + )). + % Renvoie le résultat d'une transaction (en décomposant le tuple fournit) resultat_transaction({_, T}) ->