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