MOD modification de la BD en vue de la version 1.1 (attention, tout est cassé, rien...
[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" : [3, 8],
90       "ek_master" : true | false\r
91    }
92  \r
93  
94 === Logout ===
95 c -> s\r
96    {\r
97       "action" : "logout",\r
98       "cookie" : "LKJDLAKSJBFLKASN"\r
99    }
100  \r
101  
102 === Profile ===
103 c -> s\r
104    {\r
105       "action" : "set_profile",\r
106       "cookie" : "LKJDLAKSJBFLKASN",\r
107       "login" : "paul49",\r
108       "password" : "IJKJDHHSAD9081238",\r
109       "nick" : "Paul",\r
110       "email" : "paul@pierre.com",\r
111       "css" : "css/3/euphorik.css",
112       "nick_format" : "nick" | "login" | "nick_login",
113       "view_times" : true | false,
114       "view_tooltips" : true | false,\r
115       "main_page" : 1,
116       "conversations" : [3, 8]\r
117    }\r
118       
119 s -> c
120    <ok>
121 ou
122    <error>
123
124
125 === Wait event (page = chat) ===
126 Si "last_message_id" est absent alors le client ne possède pas de message.
127 Si "main_page" est absent alors est vaut 1.
128 "cookie" n'est pas obligatoire.
129
130 c -> s\r
131    {\r
132       "action" : "wait_event",
133       "page" : "chat"\r
134       "cookie" : "LKJDLAKSJBFLKASN",\r
135       "message_count" : 10,
136       "last_message_id" : 163,
137       "main_page" : 1,
138       "troll_id" : 45,
139       "conversations" : [
140          {
141             "racine" : 123,
142             "page" : 1,
143             "last_message_id" : 4 (pas obligatoire)
144          }
145       ]\r
146    }
147  
148 s -> c\r
149 La première conversation est la principale (main).\r
150 L'ordre des conversation est le même que celui des données de l'utilisateur.\r
151 Le format de la date n'est pas formel.\r
152    {\r
153       "reply" : "new_message",\r
154       "conversations" : [\r
155          {\r
156             "last_page" : true | false,\r
157             "messages" : [
158                {\r
159                   "id" : 54,
160                   "user_id" : 344,\r
161                   "date" : "Hier 17:26:54",\r
162                   "system" : true | false,\r
163                   "owner" : true | false,\r
164                   "answered" : true | false,\r
165                   "is_a_reply" : true | false,\r
166                   "nick" : "Paul",\r
167                   "login" : "paul_22",\r
168                   "content" : "Salut",\r
169                   "answer_to" : [\r
170                      { "id" : 123, "nick" : "Pierre", "login" : "pierre_45" }\r
171                   ]
172                   "ek_master" : true | false
173                }\r
174             ]\r
175          }
176          ...\r
177       ]\r
178    }
179 ou\r
180    {\r
181       "reply" : "message_updated",\r
182       "message_id" : 123,\r
183       "content" : "Salut +++ poulpe"\r
184    }
185 ou
186    {
187       "reply" : "new_troll",
188       "troll_id" : 123,
189       "message_id" : 12,
190       "content" : "Linux sera desktop ready en 2008 ?"
191    }
192 ou
193    <error>
194
195
196 === Wait event (page = admin) ===
197 c -> s
198    {
199       "action" : "wait_event",
200       "page" : "admin",
201       "last_troll" : 5
202    }
203    
204 s -> c
205    {
206       "reply" : "troll_modified",
207       "troll_id" : 3,
208       "content" : "plop"
209    }
210 ou
211 s -> c
212    {
213       "reply" : "troll_added",
214       "trolls" :
215          [
216             {
217                "troll_id" : 5,
218                "content" : "plop",
219                "author" : "<Pseudo>"
220                "author_id" : 2
221             }
222          ]
223    }
224 ou
225 s -> c
226    {
227       "reply" : "troll_deleted",
228       "troll_id" : 2
229    }
230 ou
231 indique de mettre à jour la liste d'ips
232 s -> c
233    {
234       "reply" : "banned_ips_refresh"
235    }
236 \r
237 \r
238 === Envoie d'un troll ===\r
239 c -> s\r
240    {\r
241       "action" : "put_troll",\r
242       "cookie" : "LKJDLAKSJBFLKASN",\r
243       "content" : "Un bon troll velu !"\r
244    }
245  
246 s -> c
247    <ok>
248 ou
249    <error>
250    
251    \r
252 === Modification d'un troll ===
253 c -> s
254    {
255       "action" : "mod_troll",
256       "cookie" : "LKJDLAKSJBFLKASN",
257       "troll_id" : 3,
258       "content" : "Un bon troll velu 2 !"
259    }
260  
261 s -> c
262    <ok>
263 ou
264    <error>
265    
266    \r
267 === Suppression d'un troll ===
268 c -> s
269    {
270       "action" : "del_troll",
271       "cookie" : "LKJDLAKSJBFLKASN",
272       "troll_id" : 3
273    }
274  
275 s -> c
276    <ok>
277 ou
278    <error>
279    
280
281 === Envoie message ===
282 Le client envoie un message, le message peut répondre à un certain nombre d'autres messages.
283 "answer_to" n'est pas obligatoire.\r
284
285 c -> s\r
286    {\r
287       "action" : "put_message",\r
288       "cookie" : "LKJDLAKSJBFLKASN",\r
289       "nick" : "Paul",\r
290       "content" : "Bonjour",\r
291       "answer_to" : [ 345, 532, ... ]\r
292    }
293  
294 s -> c
295    <ok>
296 ou
297    <error>
298
299
300 === Slapage ===
301 c -> s
302    {
303       "action" : "slap",
304       "cookie" :  "LKJDLAKSJBFLKASN",
305       "user_id" : 67,
306       "reason" : "blablabla"
307    }
308    
309 s -> c
310    <ok>
311 ou
312    <error>
313    
314
315 === Bannissement ===
316 c -> s
317    {
318       "action" : "ban",
319       "cookie" : "LKJDLAKSJBFLKASN",
320       "duration" : 15, // en minute
321       "user_id" : 67,
322       "reason" : "blablabla"
323    }
324    
325 s -> c
326    <ok>
327 ou
328    <error>
329    
330    
331 === Liste des ip bannis ===
332 c -> s
333    {
334       "action" : "list_banned_ips",
335       "cookie" : "LKJDLAKSJBFLKASN"
336    }
337
338 s -> c 
339    {
340       "reply" : "list_banned_ips",
341       "list" : [
342          {
343             ip : "192.168.1.2", 
344             remaining_time : "1h23"
345             users : [
346                {
347                   nick : "Pierre" , 
348                   login : "pierre" 
349                }
350             ]
351          }
352       ]
353    }
354    
355
356 === Débannissement ===
357 c -> s
358    {
359       "action" : "unban",
360       "cookie" : "LKJDLAKSJBFLKASN"
361       "ip" : "192.168.1.2"
362    }
363    
364 s -> c
365    <ok>
366 ou
367    <error>
368 \r
369  \r
370 === Ajout d'une correction d'un messages ===\r
371 Le client envoie un correctif sous la forme de texte supplémentaire à appondre au dernier messages.\r
372 Le message est appondu avec un " +++ " devant, par exemple :\r
373 > Gnome c'est mieux que KDE +++ Euh non ok, c'est faux\r
374 \r
375 c -> s\r
376    {\r
377       "action" : "correction",\r
378       "cookie" : "LKJDLAKSJBFLKASN",\r
379       "content" : "Euh non ok, c'est faux"\r
380    }\r
381    \r
382 s -> c\r
383    {\r
384       "reply" : "correction",\r
385       "status" : "ok" | "error",\r
386       "message_error" : "blabla"\r
387    }