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