X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_protocole.erl;h=9536aaeb00dc3bd60e2d1463be751b31565c3419;hp=08624ae45e710d97e0224ccb9d51218eb0a8d7cb;hb=28cbabecbfc2e05861779a19e5a75bddbc0ad416;hpb=934ab32cd6fac44f6b3ebedef69ce1ccd0b8701b diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index 08624ae..9536aae 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -16,6 +16,8 @@ put_troll/1, mod_troll/1, del_troll/1, + unban_ip/1, + list_banned_ips/1, erreur/1 ]). -include_lib("xmerl/include/xmerl.hrl"). @@ -312,21 +314,6 @@ put_message( _ -> erreur("Utilisateur inconnu") end. - - -% Formatage de minutes. -% par exemple : "1min", "45min", "1h23min", "1jour 2h34min" -format_minutes(Min) -> - Jours = Min div (60 * 24), - Heures = Min rem (60 * 24) div 60, - Minutes = Min rem (60), - if Jours =/= 0 -> integer_to_list(Jours) ++ "Jour" ++ if Jours > 1 -> "s"; true -> "" end ++ " "; true -> "" end ++ - if Heures =/= 0 -> integer_to_list(Heures) ++ "h"; true -> "" end ++ - if Minutes == 0 -> - ""; - true -> - lists:flatten(io_lib:format(if Jours =:= 0, Heures =:= 0 -> "~w"; true -> "~2.2.0w" end, [Minutes])) ++ "min" - end. % bannissement d'un utilisateur (son ip est bannie) @@ -469,6 +456,61 @@ del_troll( erreur("Seul les ekMaster peuvent proposer des trolls") end. + +unban_ip( + [ + {cookie, Cookie}, + {ip, IP} + ] +) -> + case euphorik_bd:user_by_cookie(Cookie) of + {ok, #user{ek_master = true}} -> + euphorik_bd:deban(unserialize_ip(IP)), + json_reponse_ok; + _ -> + erreur("Seul les ekMaster peuvent connaitre la liste des ips bannies") + end. + + +list_banned_ips( + [ + {cookie, Cookie} + ] +) -> + case euphorik_bd:user_by_cookie(Cookie) of + {ok, #user{ek_master = true}} -> + { + struct, + [ + {reply, "list_banned_ips"}, + {list, {array, lists:map( + fun({IP, T, Users}) -> + {struct, + [ + {ip, serialize_ip(IP)}, + {remaining_time, format_minutes(T)}, + {users, {array, lists:map( + fun({Pseudo, Login}) -> + {struct, + [ + {nick, Pseudo}, + {login, Login} + ] + } + end, + Users + )}} + ] + } + end, + euphorik_bd:list_ban() + )}} + ] + }; + _ -> + erreur("Seul les ekMaster peuvent connaitre la liste des ips bannies") + end. + % Construit une erreur erreur(Message) -> @@ -479,6 +521,32 @@ erreur(Message) -> ] }. + +serialize_ip(IP) -> + lists:flatten(io_lib:format("~w.~w.~w.~w", tuple_to_list(IP))). + + +unserialize_ip(IP) -> + case io_lib:fread("~d.~d.~d.~d", IP) of + {ok, [A, B, C, D], []} -> {A, B, C, D}; + _ -> erreur + end. + + +% Formatage de minutes. +% par exemple : "1min", "45min", "1h23min", "1jour 2h34min" +format_minutes(Min) -> + Jours = Min div (60 * 24), + Heures = Min rem (60 * 24) div 60, + Minutes = Min rem (60), + if Jours =/= 0 -> integer_to_list(Jours) ++ " Jour" ++ if Jours > 1 -> "s"; true -> "" end ++ " "; true -> "" end ++ + if Heures =/= 0 -> integer_to_list(Heures) ++ " heure" ++ if Heures > 1 -> "s"; true -> "" end; true -> "" end ++ + if Minutes == 0 -> + ""; + true -> + integer_to_list(Minutes) ++ " minute" ++ if Minutes > 1 -> "s"; true -> "" end; true -> "" end + end. + % Formatage d'une heure % local_time() -> string