ADD possibilité de cacher les infos bulles
[euphorik.git] / doc / protocole3.txt
1 Euphorik - Protocole v3
2 -----------------------
3
4 == Introduction ==
5 Ce document a pour but de décrire la communication client-serveur du site euphorik.\r
6 Les messages échangés sont basés sur le format JSON.
7 Ce document remplace 'protocole2.txt'.
8 \r
9
10 == Principes ==
11 Enregistrement:\r
12  * 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.
13
14 Authentification:\r
15  * L'authentification (login) se fait soit par un couple <login, mot de passe> soit à l'aide d'un cookie.\r
16  * Permet de récupérer les données d'un profile
17
18 Rafraichissement:
19  * Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un function de JQuery)
20  * Le serveur maintient la connexion bloquée si le client est à jour.
21  * Dès qu'un nouveau message arrive, le serveur débloque la connexion et envoie le ou les messages manquants.
22  
23
24 == Protocole ==
25 c : client
26 s : server
27 Les messages client vers serveur sont envoyés par HTTP-POST.
28
29 A toutes les requêtes le serveur peut répondre une erreur :
30 <error>
31    {
32       "reply" : "error",
33       "error_message" : "blabla"
34    }
35    
36 Message ok générique :
37 <ok>
38    {
39       "reply" : "ok"
40    }
41
42
43 === Enregistrement et authentification ===
44 Permet de créer un nouvel utilisateur.
45 "login" et "password" peuvent ne pas être fournis avec un message de type "register", dans ce cas l'utilisateur ne pourra s'authentifier qu'a l'aide de son cookie.
46 Le mot de passe est hashé en md5.
47
48 c -> s
49    { 
50       "action" : "authentification",
51       "login" : "paul",
52       "password" : "IJKJDHHSAD9081238"
53    }
54 ou
55    {
56       "action" : "authentification",
57       "cookie" : "LKJDLAKSJBFLKASN"
58    }
59 ou
60    {
61       "action" : "register",
62       "login" : "paul",
63       "password" : "IJKJDHHSAD9081238"
64    }
65    
66 s -> c
67    {
68       "reply" : "register" | "authentification",
69       "status" : "auth_not_registered",
70       "cookie" : "LKJDLAKSJBFLKASN",
71       "id" : 193,
72       "css" : "css/1/euphorik.css",
73       "main_page" : 1
74    }
75 ou\r
76    {
77       "reply" : "register" | "authentification",\r
78       "status" : "auth_registered",\r
79       "cookie" : "LKJDLAKSJBFLKASN",\r
80       "id" : 193,\r
81       "nick" : "Paul",\r
82       "login" : "paul49",\r
83       "email" : "paul@pierre.com",\r
84       "css" : "css/3/euphorik.css",
85       "nick_format" : "nick" | "login" | "nick_login",
86       "view_times" : true | false,
87       "view_tooltips" : true | false,\r
88       "main_page" : 1,
89       "conversations" : [
90          {
91             "racine" : 123,
92             "page" : 1
93          }
94       ],
95       "ek_master" : true | false\r
96    }
97  \r
98  
99 === Logout ===
100 c -> s\r
101    {\r
102       "action" : "logout",\r
103       "cookie" : "LKJDLAKSJBFLKASN"\r
104    }
105  \r
106  
107 === Profile ===
108 c -> s\r
109    {\r
110       "action" : "set_profile",\r
111       "cookie" : "LKJDLAKSJBFLKASN",\r
112       "login" : "paul49",\r
113       "password" : "IJKJDHHSAD9081238",\r
114       "nick" : "Paul",\r
115       "email" : "paul@pierre.com",\r
116       "css" : "css/3/euphorik.css",
117       "nick_format" : "nick" | "login" | "nick_login",
118       "view_times" : true | false,
119       "view_tooltips" : true | false,\r
120       "main_page" : 1,
121       "conversations" : [
122          {
123             "root" : 123,
124             "page" : 1
125          }
126       ]\r
127    }\r
128       
129 s -> c
130    <ok>
131 ou
132    <error>
133
134
135 === Wait event (page = chat) ===
136 Si "last_message_id" est absent alors le client ne possède pas de message.
137 Si "main_page" est absent alors est vaut 1.
138 "cookie" n'est pas obligatoire.
139
140 c -> s\r
141    {\r
142       "action" : "wait_event",
143       "page" : "chat"\r
144       "cookie" : "LKJDLAKSJBFLKASN",\r
145       "message_count" : 10,
146       "last_message_id" : 163,
147       "main_page" : 1,
148       "troll_id" : 45,
149       "conversations" : [
150          {
151             "racine" : 123,
152             "page" : 1,
153             "last_message_id" : 4 (pas obligatoire)
154          }
155       ]\r
156    }
157  
158 s -> c\r
159 La première conversation est la principale (main).\r
160 L'ordre des conversation est le même que celui des données de l'utilisateur.\r
161 Le format de la date n'est pas formel.\r
162    {\r
163       "reply" : "new_message",\r
164       "conversations" : [\r
165          {\r
166             "last_page" : true | false,\r
167             "messages" : [
168                {\r
169                   "id" : 54,
170                   "user_id" : 344,\r
171                   "date" : "Hier 17:26:54",\r
172                   "system" : true | false,\r
173                   "owner" : true | false,\r
174                   "answered" : true | false,\r
175                   "is_a_reply" : true | false,\r
176                   "nick" : "Paul",\r
177                   "login" : "paul_22",\r
178                   "content" : "Salut",\r
179                   "answer_to" : [\r
180                      { "id" : 123, "nick" : "Pierre", "login" : "pierre_45" }\r
181                   ]
182                   "ek_master" : true | false
183                }\r
184             ]\r
185          }
186          ...\r
187       ]\r
188    }
189 ou\r
190    {\r
191       "reply" : "message_updated",\r
192       "message_id" : 123,\r
193       "content" : "Salut +++ poulpe"\r
194    }
195 ou
196    {
197       "reply" : "new_troll",
198       "troll_id" : 123,
199       "message_id" : 12,
200       "content" : "Linux sera desktop ready en 2008 ?"
201    }
202 ou
203    <error>
204
205
206 === Wait event (page = admin) ===
207 c -> s
208    {
209       "action" : "wait_event",
210       "page" : "admin",
211       "last_troll" : 5
212    }
213    
214 s -> c
215    {
216       "reply" : "troll_modified",
217       "troll_id" : 3,
218       "content" : "plop"
219    }
220 ou
221 s -> c
222    {
223       "reply" : "troll_added",
224       "trolls" :
225          [
226             {
227                "troll_id" : 5,
228                "content" : "plop",
229                "author" : "<Pseudo>"
230                "author_id" : 2
231             }
232          ]
233    }
234 ou
235 s -> c
236    {
237       "reply" : "troll_deleted",
238       "troll_id" : 2
239    }
240 ou
241 indique de mettre à jour la liste d'ips
242 s -> c
243    {
244       "reply" : "banned_ips_refresh"
245    }
246 \r
247 \r
248 === Envoie d'un troll ===\r
249 c -> s\r
250    {\r
251       "action" : "put_troll",\r
252       "cookie" : "LKJDLAKSJBFLKASN",\r
253       "content" : "Un bon troll velu !"\r
254    }
255  
256 s -> c
257    <ok>
258 ou
259    <error>
260    
261    \r
262 === Modification d'un troll ===
263 c -> s
264    {
265       "action" : "mod_troll",
266       "cookie" : "LKJDLAKSJBFLKASN",
267       "troll_id" : 3,
268       "content" : "Un bon troll velu 2 !"
269    }
270  
271 s -> c
272    <ok>
273 ou
274    <error>
275    
276    \r
277 === Suppression d'un troll ===
278 c -> s
279    {
280       "action" : "del_troll",
281       "cookie" : "LKJDLAKSJBFLKASN",
282       "troll_id" : 3
283    }
284  
285 s -> c
286    <ok>
287 ou
288    <error>
289    
290
291 === Envoie message ===
292 Le client envoie un message, le message peut répondre à un certain nombre d'autres messages.
293 "answer_to" n'est pas obligatoire.\r
294
295 c -> s\r
296    {\r
297       "action" : "put_message",\r
298       "cookie" : "LKJDLAKSJBFLKASN",\r
299       "nick" : "Paul",\r
300       "content" : "Bonjour",\r
301       "answer_to" : [ 345, 532, ... ]\r
302    }
303  
304 s -> c
305    <ok>
306 ou
307    <error>
308
309
310 === Slapage ===
311 c -> s
312    {
313       "action" : "slap",
314       "cookie" :  "LKJDLAKSJBFLKASN",
315       "user_id" : 67,
316       "reason" : "blablabla"
317    }
318    
319 s -> c
320    <ok>
321 ou
322    <error>
323    
324
325 === Bannissement ===
326 c -> s
327    {
328       "action" : "ban",
329       "cookie" : "LKJDLAKSJBFLKASN",
330       "duration" : 15, // en minute
331       "user_id" : 67,
332       "reason" : "blablabla"
333    }
334    
335 s -> c
336    <ok>
337 ou
338    <error>
339    
340    
341 === Liste des ip bannis ===
342 c -> s
343    {
344       "action" : "list_banned_ips",
345       "cookie" : "LKJDLAKSJBFLKASN"
346    }
347
348 s -> c 
349    {
350       "reply" : "list_banned_ips",
351       "list" : [
352          {
353             ip : "192.168.1.2", 
354             remaining_time : "1h23"
355             users : [
356                {
357                   nick : "Pierre" , 
358                   login : "pierre" 
359                }
360             ]
361          }
362       ]
363    }
364    
365
366 === Débannissement ===
367 c -> s
368    {
369       "action" : "unban",
370       "cookie" : "LKJDLAKSJBFLKASN"
371       "ip" : "192.168.1.2"
372    }
373    
374 s -> c
375    <ok>
376 ou
377    <error>
378 \r
379  \r
380 === Ajout d'une correction d'un messages ===\r
381 Le client envoie un correctif sous la forme de texte supplémentaire à appondre au dernier messages.\r
382 Le message est appondu avec un " +++ " devant, par exemple :\r
383 > Gnome c'est mieux que KDE +++ Euh non ok, c'est faux\r
384 \r
385 c -> s\r
386    {\r
387       "action" : "correction",\r
388       "cookie" : "LKJDLAKSJBFLKASN",\r
389       "content" : "Euh non ok, c'est faux"\r
390    }\r
391    \r
392 s -> c\r
393    {\r
394       "reply" : "correction",\r
395       "status" : "ok" | "error",\r
396       "message_error" : "blabla"\r
397    }