update_pseudo_user/2,
print_users/0,
print_users/1,
+ print_user/1,
user_by_cookie/1,
user_by_id/1,
user_by_login/1,
possede_message/2,
% ip :
- ip_table/0,
+ list_ban/0,
ban/2,
deban/1,
est_banni/1,
% utiles :
resultat_transaction/1\r
]).
-
-import(qlc, [e/1, e/2, q/1, cursor/1]).\r
-\r
-include("../include/euphorik_bd.hrl").
-include("../include/euphorik_defines.hrl").\r
-include_lib("stdlib/include/qlc.hrl").\r
Users = qlc:next_answers(C, N),
lists:foreach(
fun(U) ->
- #user{id = Id, pseudo = Pseudo, login = Login, ek_master = Ek_master, date_derniere_connexion = Date} = U,
- {{Annee, Mois, Jour}, {Heure, Min, _}} = calendar:now_to_local_time(Date),
- io:format(
- "~4w : ~10.10..s~10.10..s ~2w.~2.2.0w.~w - ~2wh~2.2.0w~n",
- [
- Id,
- if Ek_master -> "*"; true -> "" end ++ Pseudo,
- "(" ++ Login ++ ")",
- Jour, Mois, Annee, Heure, Min
- ]
- )
+ print_user(U)
end,
Users
),
qlc:delete_cursor(C)
end)).
-
+
% Affiche tous les users.
print_users() ->
print_users(all_remaining).
+
+print_user(User) when is_record(User, user) ->
+ #user{id = Id, pseudo = Pseudo, login = Login, ek_master = Ek_master, date_derniere_connexion = Date} = User,
+ {{Annee, Mois, Jour}, {Heure, Min, _}} = calendar:now_to_local_time(Date),
+ io:format(
+ "~4w : ~10.10..s~10.10..s ~2w.~2.2.0w.~w - ~2wh~2.2.0w~n",
+ [
+ Id,
+ if Ek_master -> "*"; true -> "" end ++ Pseudo,
+ "(" ++ Login ++ ")",
+ Jour, Mois, Annee, Heure, Min
+ ]
+ );
+% Affichage d'un user en fonction de son login
+print_user(Login) when is_list(Login) ->
+ case user_by_login(Login) of
+ {ok, User} ->
+ print_user(User);
+ _ ->
+ {erreur, "Login pas trouvé : " ++ Login}
+ end;
+% Affichage d'un user en fonction de son id
+print_user(Id) when is_integer(Id) ->
+ case user_by_id(Id) of
+ {ok, User} ->
+ print_user(User);
+ _ ->
+ {erreur, "Id pas trouvé : " ++ integer_to_list(Id)}
+ end.
+
% Est-ce qu'un utilisateur existe en fonction de son cookie ?
% Renvoie {ok, User} ou erreur
_ -> false
end.
-
-ip_table() ->
+
+% renvoie la liste des ip bannies
+% liste de {ip, temps_restant(en minutes), Users} ou Users est une liste de {pseudo, login}
+% TODO : déterminer la complexité de cette fonction. (Il n'y a pas d'index sur #user.last_ip)
+list_ban() ->
resultat_transaction(mnesia:transaction(
fun() ->
- e(q([IP || IP <- mnesia:table(ip_table)]))
+ Now = now(),
+ e(q([
+ {
+ IP#ip_table.ip,
+ delta_date_minute(date_plus_minutes(IP#ip_table.ban, IP#ip_table.ban_duration), Now),
+ e(q([{U#user.pseudo, U#user.login} || U <- mnesia:table(user), U#user.last_ip =:= IP#ip_table.ip]))
+ } ||
+ IP <- qlc:keysort(2, mnesia:table(ip_table)),
+ if IP#ip_table.ban =:= undefined -> false; true -> date_plus_minutes(IP#ip_table.ban, IP#ip_table.ban_duration) > Now end
+ ]))
end
)).
if Echeance < Now -> % l'échéance est passée
false;
true ->
- {true, trunc(delta_date_ms(Echeance, Now) / 1000 / 60)}
+ {true, delta_date_minute(Echeance, Now)}
end;
_ ->
false
delta_date_ms(D1, D2) ->
1000000000 * abs(element(1, D1) - element(1, D2)) + 1000 * abs(element(2, D1) - element(2, D2)) + trunc(abs(element(3, D1) - element(3, D2)) / 1000).
+% Retourne la différence entre deux timestamp (erlang:now) en minutes
+delta_date_minute(D1, D2) ->
+ trunc(delta_date_ms(D1, D2) / 1000 / 60).
+
% Bizarre, cette fonction n'existe pas dans la stdlib.
% Pas utilisé mais bon ca me fait de la peine de l'enlever.