MOD Passage au JSON (tout cassé pour l'instant)
[euphorik.git] / doc / protocole3.txt
1 Euphorik - Protocole v3
2 -----------------------
3
4 A. Introduction
5 ---------------
6 Ce document a pour but de décrire la communication client-serveur du site euphorik.\r
7 Les messages échangés sont basés sur le format JSON.
8 Ce document remplace 'protocole2.txt'.
9 \r
10
11 B. Principes
12 ------------
13 Enregistrement:\r
14  * Permet de créer un compte, un cookie est donné en retour. Ce cookie doit être stocké par le client pour pouvoir s'authentifier par la suite.
15
16 Authentification:\r
17  * L'authentification (login) se fait soit par un couple <login, mot de passe> soit à l'aide d'un cookie.\r
18  * Permet de récupérer les données d'un profile
19
20 Rafraichissement:
21  * Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un function de JQuery)
22  * Le serveur maintient la connexion bloquée si le client est à jour.
23  * Dès qu'un nouveau message arrive, le serveur débloque la connexion et envoie le ou les messages manquants.
24  
25
26 C. Protocole
27 ------------
28 c : client
29 s : server
30 Les messages client vers serveur sont envoyés par HTTP-POST.
31
32 A toutes les requêtes le serveur peut répondre une erreur :
33 <error>
34    {
35       "reply" : "error",
36       "error_message" : "blabla"
37    }
38    
39 Message ok générique :
40 <ok>
41    {
42       "reply" : "ok"
43    }
44
45
46 C.1. Login
47 ----------
48 Le mot de passe est hashé en md5.\r
49
50 c -> s\r
51    { \r
52       "action" : "authentification",\r
53       "login" : "Paul",\r
54       "password" : "IJKJDHHSAD9081238"\r
55    }
56 ou\r
57    {\r
58       "action" : "authentification",\r
59       "cookie" : "LKJDLAKSJBFLKASN"\r
60    }
61 ou\r
62    {\r
63       "action" : "register",\r
64       "login" : "Paul",\r
65       "password" : "IJKJDHHSAD9081238"\r
66    }
67    
68 s -> c\r
69    {\r
70       "reply" : "login",\r
71       "status" : "registration_ok" | "authentification_ok",\r
72       "cookie" : "LKJDLAKSJBFLKASN",\r
73       "id" : 193,\r
74       "pseudo" : "Paul",\r
75       "login" : "paul49",\r
76       "email" : "paul@pierre.com",\r
77       "css" : "css/3/euphorik.css",\r
78       "main_page" : 1,\r
79       "conversations" : [\r
80          {\r
81             "root" : 123,\r
82             "page" : 1\r
83          }\r
84       ]\r
85    }
86  \r
87  
88 C.2. Logout
89 -----------
90 c -> s\r
91    {\r
92       "action" : "logout",\r
93       "cookie" : "LKJDLAKSJBFLKASN"\r
94    }
95  \r
96  
97 C.3. Profile
98 ------------
99
100 c -> s\r
101    {\r
102       "action" : "set_profile",\r
103       "cookie" : "LKJDLAKSJBFLKASN",\r
104       "login" : "paul49",\r
105       "password" : "IJKJDHHSAD9081238",\r
106       "pseudo" : "Paul",\r
107       "email" : "paul@pierre.com",\r
108       "css" : "css/3/euphorik.css",\r
109       "main_page" : 1,\r
110       "conversations" : [\r
111          {\r
112             "root" : 123,\r
113             "page" : 1\r
114          }\r
115       ]\r
116    }\r
117       
118 s -> c
119    <ok>
120 ou
121    <error>
122
123
124 C.4. Wait event
125 ---------------------
126 Si "last_message_id" est absent alors le client ne possède pas de message.
127 Les conversations données sont définies dans le profile.
128
129 c -> s\r
130    {\r
131       "action" : "wait_event",\r
132       "cookie" : "LKJDLAKSJBFLKASN",\r
133       "message_count" : 10,\r
134       "last_message_id" : 163,
135       "main_page" : 1,
136       "conversations" : [
137          {
138             "root" : 123,
139             "page" : 1
140          }
141       ]\r
142    }
143  
144 s -> c\r
145 La première conversation est la principale (main).\r
146 L'ordre des conversation est le même que celui des données de l'utilisateur.\r
147 Le format de la date n'est pas formel.\r
148    {\r
149       "reply" : "new_messages",\r
150       "conversations" : [\r
151          "last_page" : true | false,\r
152          "messages" : [\r
153             "id" : 54,\r
154             "date" : "Hier 17:26:54",\r
155             "system" : true | false,\r
156             "owner" : true | false,\r
157             "answered" : true | false,\r
158             "is_a_reply" : true | false,\r
159             "nick" : "Paul",\r
160             "login" : "paul_22",\r
161             "content" : "Salut",\r
162             "answer_to" : [\r
163                { "id" : 123, "pseudo" : "Pierre", "login" : "pierre_45" }\r
164             ]\r
165          ]\r
166       ]\r
167    }
168 ou\r
169    {\r
170       "reply" : "message_updated",\r
171       "message_id" : 123,\r
172       "contenu" : "Salut +++ poulpe"\r
173    }
174 ou\r
175    {\r
176       "reply" : "error",\r
177       "error_message" : "blabla"\r
178    }
179 \r
180 \r
181 C.5. Envoie troll\r
182 -------------------\r
183 \r
184 c -> s\r
185    {\r
186       "action" : "put_troll",\r
187       "cookie" : "LKJDLAKSJBFLKASN",\r
188       "content" : "Un bon troll velu !"\r
189    }\r
190  \r
191 s -> c\r
192    {\r
193       "reply" : "ok" | "error",\r
194       "error_message" : "blabla"\r
195    }\r
196    
197
198 C.6. Envoie message
199 -------------------
200 Le client envoie un message, le message peut répondre à un certain nombre d'autres messages.
201 "answer_to" n'est pas obligatoire.\r
202
203 c -> s\r
204    {\r
205       "action" : "put_message",\r
206       "cookie" : "LKJDLAKSJBFLKASN",\r
207       "nick" : "Paul",\r
208       "content" : "Bonjour",\r
209       "Troll" : 45,\r
210       "answer_to" : [ 345, 532, ... ]\r
211    }
212  
213 s -> c\r
214    {\r
215       "reply" : "ok" | "error",\r
216       "error_message" : "blabla"\r
217    }
218  \r
219  \r
220 C.7. Ajout d'une correction d'un messages\r
221 ----------------------------------------\r
222 Le client envoie un correctif sous la forme de texte supplémentaire à appondre au dernier messages.\r
223 Le message est appondu avec un " +++ " devant, par exemple :\r
224 > Gnome c'est mieux que KDE +++ Euh non ok, c'est faux\r
225 \r
226 c -> s\r
227    {\r
228       "action" : "correction",\r
229       "cookie" : "LKJDLAKSJBFLKASN",\r
230       "content" : "Euh non ok, c'est faux"\r
231    }\r
232    \r
233 s -> c\r
234    {\r
235       "reply" : "correction",\r
236       "status" : "ok" | "error",\r
237       "message_error" : "blabla"\r
238    }