X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_protocole.erl;h=194961ed631acc0da5ed3c7436ae92e4e1c81a4c;hp=1f5faf31dc641d8876e4b0c65a93da28e976c40c;hb=13bf850da2316cde3ad2ff8d5c26fb32928bf7b4;hpb=00f9e2153808b4f03a455958489c786d2ae24489 diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index 1f5faf3..194961e 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -6,11 +6,12 @@ -module(euphorik_protocole). -export([ register/2, - login/1, + login/2, logout/1, profile/1, wait_event/1, put_message/1, + ban/1, erreur/1 ]). @@ -28,6 +29,7 @@ register([{login, Login}, {password, Password}], IP) -> erreur("Login déjà existant"); _ -> User = euphorik_bd:nouveau_user(Login, Password, generer_cookie()), + euphorik_bd:update_ip(User#user.id, IP), json_reponse_login_ok(User) end; true -> @@ -38,6 +40,7 @@ register([], IP) -> Can_register = euphorik_bd:can_register(IP), if Can_register -> User = euphorik_bd:nouveau_user("", generer_cookie()), + euphorik_bd:update_ip(User#user.id, IP), json_reponse_login_ok(User); true -> erreur_register_flood() @@ -48,16 +51,17 @@ erreur_register_flood() -> % Un utilisateur se logge (avec un couple {login, mot de passe}) -login([{login, Login}, {password, Password}]) -> - loginUser(euphorik_bd:user_by_login_password(Login, Password)); +login([{login, Login}, {password, Password}], IP) -> + loginUser(euphorik_bd:user_by_login_password(Login, Password), IP); % Un utilisateur se logge (avec un cookie) -login([{cookie, Cookie}]) -> - loginUser(euphorik_bd:user_by_cookie(Cookie)). +login([{cookie, Cookie}], IP) -> + loginUser(euphorik_bd:user_by_cookie(Cookie), IP). -loginUser({ok, User}) -> +loginUser({ok, User}, IP) -> + euphorik_bd:update_ip(User#user.id, IP), euphorik_bd:update_date_derniere_connexion(User#user.id), json_reponse_login_ok(User); -loginUser(_) -> +loginUser(_, _) -> % ajoute un délais d'attente (TODO : un autre moyen plus élégant ?) receive after 1000 -> erreur("Erreur login") @@ -153,25 +157,26 @@ wait_event(Data) -> {ok, U2} = euphorik_bd:user_by_id(Mess#minichat.auteur_id), U2 end, - {struct, [ - {id, Mess#minichat.id}, - {date, format_date(Mess#minichat.date)}, - {system, Mess#minichat.auteur_id =:= 0}, - {owner, Est_proprietaire}, - {answered, A_repondu_a_message}, - {is_a_reply, Est_une_reponse_a_user}, - {nick, Mess#minichat.pseudo}, - {login, if User_mess =:= inconnu -> Mess#minichat.pseudo; true -> User_mess#user.login end}, - {content, Mess#minichat.contenu}, - {answer_to, {array, lists:map( - fun(Id_mess) -> - {ok, M} = euphorik_bd:message_by_id(Id_mess), - {ok, User_reponse} = euphorik_bd:user_by_mess(M#minichat.id), - {struct, [{id, M#minichat.id}, {nick, M#minichat.pseudo}, {login, User_reponse#user.login}]} - end, - Repond_a - )}} - ]} + {struct, [ + {id, Mess#minichat.id}, + {date, format_date(Mess#minichat.date)}, + {system, Mess#minichat.auteur_id =:= 0}, + {owner, Est_proprietaire}, + {answered, A_repondu_a_message}, + {is_a_reply, Est_une_reponse_a_user}, + {nick, Mess#minichat.pseudo}, + {login, if User_mess =:= inconnu -> Mess#minichat.pseudo; true -> User_mess#user.login end}, + {content, Mess#minichat.contenu}, + {answer_to, {array, lists:map( + fun(Id_mess) -> + {ok, M} = euphorik_bd:message_by_id(Id_mess), + {ok, User_reponse} = euphorik_bd:user_by_mess(M#minichat.id), + {struct, [{id, M#minichat.id}, {nick, M#minichat.pseudo}, {login, User_reponse#user.login}]} + end, + Repond_a + )}}, + {ek_master, User_mess#user.ek_master} + ]} end, Conv ) @@ -217,6 +222,27 @@ put_message( end. +% bannissement d'un utilisateur (son ip est bannie) +ban( + [ + {cookie, Cookie}, + {duration, Duration}, + {user_id, User_id} + ]) -> + % controle que l'utilisateur est un admin + case euphorik_bd:user_by_cookie(Cookie) of + {ok, User = #user{ek_master = true}} -> + case euphorik_bd:user_by_id(User_id) of + {ok, User} -> + euphorik_bd:ban(User#user.last_ip, Duration); + _ -> + erreur("Utilisateur à bannir inconnu") + end; + _ -> + erreur("Utilisateur inconnu ou non ek master") + end. + + % Construit une erreur erreur(Message) -> { @@ -280,6 +306,7 @@ json_reponse_login_ok(User) -> User#user.conversations ) } - } + }, + {ek_master, User#user.ek_master} ] }.