X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_protocole.erl;fp=modules%2Ferl%2Feuphorik_protocole.erl;h=c3dfbbe0406a0c1c56233d9a738ec8f64f91d58c;hp=d8bfa89d447646d45a790cb452e46e242a872d57;hb=11fe8f6d268a9b1c0a773294cc7d70ffdb6afb30;hpb=956dc2acd6aee480b5daa4def16346f9bab80056 diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index d8bfa89..c3dfbbe 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -43,14 +43,14 @@ % Une utilisateur s'enregistre avec un tuple {Login, Password}. -register([{login, Login}, {password, Password}], IP) -> +register([{login, Login}, {password, Password}, {profile_infos, Profile_infos}], 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()), + User = euphorik_bd:nouveau_user(Login, Password, generer_cookie(), user_from_json(Profile_infos)), euphorik_bd:update_ip(User#user.id, IP), json_reponse_login_ok(User) end; @@ -58,10 +58,10 @@ register([{login, Login}, {password, Password}], IP) -> erreur_register_flood() end; % Enregistrement sans {Login, Password} -register([], IP) -> +register([{profile_infos, Profile_infos}], IP) -> Can_register = euphorik_bd:can_register(IP), if Can_register -> - User = euphorik_bd:nouveau_user("", generer_cookie()), + User = euphorik_bd:nouveau_user("", generer_cookie(), user_from_json(Profile_infos)), euphorik_bd:update_ip(User#user.id, IP), json_reponse_login_ok(User); true -> @@ -115,16 +115,44 @@ profile( {cookie, Cookie}, {login, Login}, {password, Password}, - {nick, Pseudo}, - {email, Email}, - {css, Css}, - {chat_order, Chat_order_str}, - {nick_format, Nick_format_str}, - {view_times, View_times}, - {view_tooltips, View_tooltips}, - {conversations, {array, Conversations_json}}, - {ostentatious_master, Ostentatious_master} + {profile_infos, Profile_infos} ] +) -> + case user_from_json(Profile_infos) of + {erreur, E} -> E; + UserInfos -> + User = UserInfos#user { + cookie = Cookie, + login = Login, + password = Password + }, + % TODO : pas très beau, mieux vaut construire un #user + case euphorik_bd:set_profile(User) of + ok -> + json_reponse_ok(); + login_deja_pris -> + erreur("Login déjà pris"); + _ -> + erreur("Impossible de mettre à jour le profile") + end + end. + + +% Construit un #user à partir des données JSON +user_from_json( + {struct, + [ + {nick, Pseudo}, + {email, Email}, + {css, Css}, + {chat_order, Chat_order_str}, + {nick_format, Nick_format_str}, + {view_times, View_times}, + {view_tooltips, View_tooltips}, + {conversations, {array, Conversations_json}}, + {ostentatious_master, Ostentatious_master_str} + ] + } ) -> % décomposition de la strucure JSON Conversations = lists:foldr( @@ -140,26 +168,35 @@ profile( [], Conversations_json ), - % TODO : pas très beau, mieux vaut construire un #user - case euphorik_bd:set_profile( - Cookie, - Login, - Password, - Pseudo, - Email, - Css, - list_to_atom(Chat_order_str), - list_to_atom(Nick_format_str), - View_times, - View_tooltips, - Conversations, - list_to_atom(Ostentatious_master)) of - ok -> - json_reponse_ok(); - login_deja_pris -> - erreur("Login déjà pris"); - _ -> - erreur("Impossible de mettre à jour le profile") + % vérification des données JSON + Chat_order = list_to_atom(Chat_order_str), + Chat_order_valide = lists:any(fun(E) -> E =:= Chat_order end, [reverse, chrono]), + if not Chat_order_valide -> + {erreur, Chat_order_str ++ " n'est pas une valeur acceptée pour 'chat_order'"}; + true -> + Nick_format = list_to_atom(Nick_format_str), + Nick_format_valide = lists:any(fun(E) -> E =:= Nick_format end, [nick, login, nick_login]), + if not Nick_format_valide -> + {erreur, Nick_format_str ++ " n'est pas une valeur acceptée pour 'nick_format'"}; + true -> + Ostentatious_master = list_to_atom(Ostentatious_master_str), + Ostentatious_master_valide = lists:any(fun(E) -> E =:= Ostentatious_master end, [invisible, light, heavy]), + if not Ostentatious_master_valide -> + {erreur, Ostentatious_master_str ++ " n'est pas une valeur acceptée pour 'ostentatious_master'"}; + true -> + #user{ + pseudo = Pseudo, + email = Email, + css = Css, + chat_order = Chat_order, + nick_format = Nick_format, + view_times = View_times, + view_tooltips = View_tooltips, + conversations = Conversations, + ostentatious_master = Ostentatious_master + } + end + end end.