MOD cleanage du code
[euphorik.git] / modules / erl / euphorik_protocole.erl
index c2cb984..1f5faf3 100755 (executable)
@@ -5,7 +5,7 @@
 
 -module(euphorik_protocole).
 -export([
-   register/1,
+   register/2,
    login/1,
    logout/1,
    profile/1,
 
 
 % 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("<nick>", generer_cookie()),
-   json_reponse_login_ok(User).
+register([], IP) ->   
+   Can_register = euphorik_bd:can_register(IP),
+   if Can_register ->
+         User = euphorik_bd:nouveau_user("<nick>", generer_cookie()),
+         json_reponse_login_ok(User);
+      true ->
+         erreur_register_flood()
+   end.
+   
+erreur_register_flood() ->
+   erreur("Trop de register (flood)").
    
 \r
 % 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,15 +115,20 @@ 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,
    {value, {_, Message_count}} = lists:keysearch(message_count, 1, Data),
    Main_page = case lists:keysearch(main_page, 1, Data) of {value, {_, P}} -> P; _ -> 1 end,
    {value, {_, {array, Conversations_json}}} = lists:keysearch(conversations, 1, Data),
-   Conversations = lists:map(fun({struct, [{root, Racine}, {page, Page}]}) -> {Racine, Page} end, Conversations_json),
-   User = case euphorik_minichat:user_by_cookie(Cookie) of\r
+   Conversations = lists:map(
+      fun({struct, [{root, Racine}, {page, Page} | Reste]}) ->
+         Last_mess_conv  = case Reste of [{last_message_id, L}] -> L; _ -> 0 end,
+         {Racine, Page, Last_mess_conv}
+      end,
+      Conversations_json
+   ),
+   User = case euphorik_bd:user_by_cookie(Cookie) of\r
       {ok, U} -> U;\r
       _ -> inconnu\r
    end,\r
@@ -126,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, [
@@ -148,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
@@ -181,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()
@@ -230,9 +247,7 @@ format_date(Date) ->
       end ++\r
       io_lib:format("~2.10.0B:~2.10.0B:~2.10.0B", [Heure, Minute, Seconde])
    ).
-
-
-%%%%%%%%% <Réponses JSON> %%%%%%%%%
+   
 
 json_reponse_ok() ->
    {struct, [{reply, "ok"}]}.
@@ -268,6 +283,3 @@ json_reponse_login_ok(User) ->
          }
       ]
    }.
-   
-   
-%%%%%%%%% </réponses JSON> %%%%%%%%%