MOD évite de faire plein de "register" à la suite et ainsi de saturer la bd de plein...
[euphorik.git] / modules / erl / euphorik_minichat.erl
index 6f229ac..35a9d97 100755 (executable)
    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é
@@ -424,8 +426,35 @@ repond_a(M_id) ->
             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}) ->