X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_protocole.erl;h=1f5faf31dc641d8876e4b0c65a93da28e976c40c;hb=d46b9cc6453803962960373f4adff4e3b89b5b4d;hp=7519ba8f866cc08dc1566f1f8b488a686921bc8e;hpb=5f49b7e6af9be3e2415136013370af4ac99d59da;p=euphorik.git diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index 7519ba8..1f5faf3 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -5,7 +5,7 @@ -module(euphorik_protocole). -export([ - register/1, + register/2, login/1, logout/1, profile/1, @@ -20,29 +20,42 @@ % Une utilisateur s'enregistre avec un tuple {Login, Password}. -register([{login, Login}, {password, Password}]) -> - case euphorik_minichat:user_by_login(Login) of - {ok, _} -> - erreur("Login déjà existant"); - _ -> - User = euphorik_minichat:nouveau_user(Login, Password, generer_cookie()), - json_reponse_login_ok(User) +register([{login, Login}, {password, Password}], IP) -> + Can_register = euphorik_bd:can_register(IP), + if Can_register -> + case euphorik_bd:user_by_login(Login) of + {ok, _} -> + erreur("Login déjà existant"); + _ -> + User = euphorik_bd:nouveau_user(Login, Password, generer_cookie()), + json_reponse_login_ok(User) + end; + true -> + erreur_register_flood() end; % Enregistrement sans {Login, Password} -register([]) -> - User = euphorik_minichat:nouveau_user("", generer_cookie()), - json_reponse_login_ok(User). +register([], IP) -> + Can_register = euphorik_bd:can_register(IP), + if Can_register -> + User = euphorik_bd:nouveau_user("", generer_cookie()), + json_reponse_login_ok(User); + true -> + erreur_register_flood() + end. + +erreur_register_flood() -> + erreur("Trop de register (flood)"). % Un utilisateur se logge (avec un couple {login, mot de passe}) login([{login, Login}, {password, Password}]) -> - loginUser(euphorik_minichat:user_by_login_password(Login, Password)); + loginUser(euphorik_bd:user_by_login_password(Login, Password)); % Un utilisateur se logge (avec un cookie) login([{cookie, Cookie}]) -> - loginUser(euphorik_minichat:user_by_cookie(Cookie)). + loginUser(euphorik_bd:user_by_cookie(Cookie)). loginUser({ok, User}) -> - euphorik_minichat:update_date_derniere_connexion(User#user.id), + euphorik_bd:update_date_derniere_connexion(User#user.id), json_reponse_login_ok(User); loginUser(_) -> % ajoute un délais d'attente (TODO : un autre moyen plus élégant ?) @@ -80,7 +93,7 @@ profile( % est-ce que les messages auquel on répond existent ? Conversations = lists:foldr( fun({struct, [{root, Root}, {page, Page}]}, Acc) -> - Message_existe = euphorik_minichat:message_existe(Root), + Message_existe = euphorik_bd:message_existe(Root), if Message_existe -> [{Root, Page} | Acc]; true -> @@ -90,7 +103,7 @@ profile( [], Conversations_json ), - case euphorik_minichat:set_profile(Cookie, Login, Password, Pseudo, Email, Css, list_to_atom(Nick_format_str), Main_page, Conversations) of + case euphorik_bd:set_profile(Cookie, Login, Password, Pseudo, Email, Css, list_to_atom(Nick_format_str), Main_page, Conversations) of ok -> json_reponse_ok(); login_deja_pris -> @@ -102,7 +115,6 @@ profile( % Renvoie les messages appropriés. % last_message id et cookie sont facultatifs -% TODO : erreur : {badmatch,false} wait_event(Data) -> Cookie = case lists:keysearch(cookie, 1, Data) of {value, {_, C}} -> C; _ -> inconnu end, Last_message_id = case lists:keysearch(last_message_id, 1, Data) of {value, {_, Id}} -> Id; _ -> 0 end, @@ -116,7 +128,7 @@ wait_event(Data) -> end, Conversations_json ), - User = case euphorik_minichat:user_by_cookie(Cookie) of + User = case euphorik_bd:user_by_cookie(Cookie) of {ok, U} -> U; _ -> inconnu end, @@ -132,14 +144,13 @@ wait_event(Data) -> lists:map( fun({Mess, Repond_a}) -> Est_proprietaire = User =/= inconnu andalso User#user.id =:= Mess#minichat.auteur_id, - A_repondu_a_message = User =/= inconnu andalso euphorik_minichat:a_repondu_a_message(User#user.id, Mess#minichat.id), - Est_une_reponse_a_user = User =/= inconnu andalso euphorik_minichat:est_une_reponse_a_user(User#user.id, Mess#minichat.id), - % io:format("Repond_a : ~p~n", [Repond_a]), + A_repondu_a_message = User =/= inconnu andalso euphorik_bd:a_repondu_a_message(User#user.id, Mess#minichat.id), + Est_une_reponse_a_user = User =/= inconnu andalso euphorik_bd:est_une_reponse_a_user(User#user.id, Mess#minichat.id), User_mess = if Mess#minichat.auteur_id =:= 0 -> inconnu; true -> - {ok, U2} = euphorik_minichat:user_by_id(Mess#minichat.auteur_id), + {ok, U2} = euphorik_bd:user_by_id(Mess#minichat.auteur_id), U2 end, {struct, [ @@ -154,8 +165,8 @@ wait_event(Data) -> {content, Mess#minichat.contenu}, {answer_to, {array, lists:map( fun(Id_mess) -> - {ok, M} = euphorik_minichat:message_by_id(Id_mess), - {ok, User_reponse} = euphorik_minichat:user_by_mess(M#minichat.id), + {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 @@ -187,15 +198,15 @@ put_message( {answer_to, {array, Answer_to}} ] ) -> - case euphorik_minichat:user_by_cookie(Cookie) of + case euphorik_bd:user_by_cookie(Cookie) of {ok, User} -> Strip_content = string:strip(Content), if (Strip_content =:= []) -> erreur("Message vide"); true -> % TODO : non-atomique (update_pseudo+nouveau_message) - euphorik_minichat:update_pseudo_user(User#user.id, Nick), - case euphorik_minichat:nouveau_message(Strip_content, User#user.id, Answer_to) of + euphorik_bd:update_pseudo_user(User#user.id, Nick), + case euphorik_bd:nouveau_message(Strip_content, User#user.id, Answer_to) of erreur -> erreur("Impossible d'ajouter un nouveau message"); _ -> json_reponse_ok() @@ -236,9 +247,7 @@ format_date(Date) -> end ++ io_lib:format("~2.10.0B:~2.10.0B:~2.10.0B", [Heure, Minute, Seconde]) ). - - -%%%%%%%%% %%%%%%%%% + json_reponse_ok() -> {struct, [{reply, "ok"}]}. @@ -274,6 +283,3 @@ json_reponse_login_ok(User) -> } ] }. - - -%%%%%%%%% %%%%%%%%%