nouveau_message/3,
reset/0,
% reservé :
+ can_register/1,
resultat_transaction/1\r
]).\r
\r
--include("../include/euphorik_bd.hrl").\r
+-include("../include/euphorik_bd.hrl").
+-include("../include/euphorik_defines.hrl").\r
-include_lib("stdlib/include/qlc.hrl").\r
% Un message est considéré comme du spam s'il est posté 1 seconde ou moins après le dernier posté
E#reponse_minichat.repondant =:= M_id,
M#minichat.id =:= E#reponse_minichat.cible]))
end
- )).\r
- \r
+ )).
+
+
+% 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.\r
+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)\r
resultat_transaction({_, T}) ->