X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_bd.erl;h=678505ba2422432321b787acfabe8d87fb63fee9;hp=e114b52e16f8c478d20e93670d1fde8d0cfededb;hb=13bf850da2316cde3ad2ff8d5c26fb32928bf7b4;hpb=00f9e2153808b4f03a455958489c786d2ae24489 diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index e114b52..678505b 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -17,6 +17,7 @@ nouveau_user/3, set_profile/9, update_date_derniere_connexion/1, + update_ip/2, update_pseudo_user/2, users/0, user_by_cookie/1, @@ -24,6 +25,7 @@ user_by_login/1, user_by_login_password/2, user_by_mess/1, + toggle_ek_master/1, % messages : nouveau_message/3, @@ -39,6 +41,13 @@ a_repondu_a_message/2, possede_message/2, + % ip : + ip_table/0, + ban/2, + + % versions : + update_version/1, + % utiles : can_register/1, resultat_transaction/1 @@ -172,10 +181,10 @@ set_profile(Cookie, Login, Password, Pseudo, Email, Css, Nick_format, Page_princ % Met à jour la date de la dernière connexion d'un utilisateur à maintenant -update_date_derniere_connexion(UserId) -> +update_date_derniere_connexion(User_id) -> mnesia:transaction( fun() -> - case mnesia:wread({user, UserId}) of + case mnesia:wread({user, User_id}) of [User] -> mnesia:write(User#user{date_derniere_connexion = now()}); _ -> @@ -183,7 +192,21 @@ update_date_derniere_connexion(UserId) -> end end ). - + + +% Met à jour l'ip d'un user +update_ip(User_id, IP) -> + mnesia:transaction( + fun() -> + case mnesia:wread({user, User_id}) of + [User] -> + mnesia:write(User#user{last_ip = IP}); + _ -> + mnesia:abort("update_ip: User inconnu") + end + end + ). + % Met à jour le pseudo du user update_pseudo_user(UserId, Pseudo) -> @@ -244,6 +267,19 @@ user_by_login(Login) -> )). +toggle_ek_master(User_id) -> + resultat_transaction(mnesia:transaction( + fun() -> + Users = qlc:e(qlc:q([E || E <- mnesia:table(user), E#user.id =:= User_id])), + case Users of + [User] -> + mnesia:write(User#user{ek_master = not User#user.ek_master}); + _ -> erreur + end + end + )). + + user_by_login_password(Login, Password) -> resultat_transaction(mnesia:transaction( fun() -> @@ -439,6 +475,37 @@ possede_message(Id_user, Id_mess) -> _ -> false end. + +ip_table() -> + resultat_transaction(mnesia:transaction( + fun() -> + qlc:e(qlc:q([IP || IP <- mnesia:table(ip_table)])) + end + )). + + +% Bannie une ip pour un certain temps (en minute). +ban(IP, Duration) -> + mnesia:transaction( + fun() -> + case mnesia:wread({ip_table, IP}) of + [IP_tuple] -> + mnesia:write(IP_tuple#ip_table{ban = now(), ban_duration = Duration}); + _ -> + mnesia:write(#ip_table{ip = IP, ban = now(), ban_duration = Duration}) + end + end + ). + + +update_version(1) -> + mnesia:transform_table( + ip_table, + fun() -> null end, + record_info(fields, ip_table), + ip_table + ). + % 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).