MOD Avancement sur le passage à JSON
[euphorik.git] / modules / erl / euphorik_requests.erl
1 % coding: utf-8
2 % Ce module est fait pour répondre à des requêtes 'AJAX'.
3 % Il est définit comme 'appmods' pour l'url "request" dans yaws.
4 % Par exemple http://www.euphorik.ch/request abouti sur la fonction out() de ce module.
5 % @author G.Burri
6
7 -module(euphorik_requests).
8 -export([
9 tester/0,
10 out/1
11 ]).
12
13 -include_lib("xmerl/include/xmerl.hrl").
14 -include_lib("yaws/include/yaws_api.hrl").
15
16 % Test du module
17 tester() ->
18
19 %~ {XML2, _} = xmerl_scan:string(
20 %~ "<action name=\"login\">"
21 %~ " <cookie>5DZQ2HCRO7JIX3QCSWRNL</cookie>"
22 %~ "</action>"),
23 %~ io:format("Login : ~p~n", [euphorik_protocole:login(XML2)]).
24
25 XML =
26 "<action name=\"refreshMessages\"><cookie>3FSDCH0FD4ML8WEPN2B5T</cookie>"
27 "<nombreMessage>10</nombreMessage>"
28 "</action>",
29 io:format("Messages de la premières page : ~p~n", [traiter_donnees(XML)]).
30
31 %~ traiter_xml("<action name=\"message\">"
32 %~ "<cookie>4UDUSY6Z2IZNTQO484S8X</cookie>"
33 %~ "<pseudo>Pifou</pseudo>"
34 %~ "<contenu>test &amp; plop</contenu>"
35 %~ "</action>").
36
37
38 % il faut catcher toutes les exceptions possibles
39 out(A) ->
40 %inet:setopts(A#arg.clisock, inet:getopts(A#arg.clisock, [active])),
41 {value, {_, Contenu}} = lists:keysearch("action", 1, yaws_api:parse_post(A)),
42 Ret = traiter_donnees(Contenu),
43 {content, "text/xml", Ret}.
44
45
46 traiter_donnees(Contenu) ->
47 case xmerl_scan:string(Contenu) of
48 {XML, _} ->
49 case XML of
50 #xmlElement{name = json, content = [#xmlText{value = J}|_]} ->
51 case json:decode_string(J) of
52 {ok, {struct, [{action, Action}| Reste]}} ->
53 traiter_action(Action, Reste);
54 _ ->
55 erreur
56 end;
57 _ ->
58 traiter_action(XML#xmlElement.attributes, XML)
59 end;
60 _ -> erreur
61 end.
62
63
64 traiter_action("authentification", JSON) ->
65 euphorik_protocole:login(JSON);
66 % un client s'enregistre (pseudo + password)
67 traiter_action([#xmlAttribute{value="register"}], XML) ->
68 euphorik_protocole:nouveau_user_login(XML);
69 % authentification d'un client
70 traiter_action([#xmlAttribute{value="login"}], XML) ->
71 euphorik_protocole:login(XML);
72 % modification du profile
73 traiter_action([#xmlAttribute{value="profile"}], XML) ->
74 euphorik_protocole:profile(XML);
75 % un utilisateur demande les messages
76 traiter_action([#xmlAttribute{value="refreshMessages"}], XML) ->
77 euphorik_protocole:refreshMessage(XML);
78 % un utilisateur envoie un message
79 traiter_action([#xmlAttribute{value="message"}], XML) ->
80 euphorik_protocole:message(XML).
81
82
83