Project

General

Profile

Protocole » History » Version 5

Greg Burri, 10/17/2008 10:12 AM

1 1 Greg Burri
h1. Protocole
2
3
h2. Introduction
4
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
h2. Principes
11
12
h3. Enregistrement:
13
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
17
h3. Authentification:
18
19
* L'authentification (login) se fait soit par un couple <login, mot de passe> soit à l'aide d'un cookie.
20
* Permet de récupérer les données d'un profile
21
22
23
h3. Rafraichissement:
24
25
* Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un function de JQuery)
26
* Le serveur maintient la connexion bloquée si le client est à jour.
27
* Dès qu'un nouveau message arrive, le serveur débloque la connexion et envoie le ou les messages manquants.
28
 
29
30 2 Greg Burri
h2. Messages
31 1 Greg Burri
32
<pre>
33
c : client
34
s : server
35
</pre>
36
Les messages client vers serveur sont envoyés par HTTP-POST.
37
38
A toutes les requêtes le serveur peut répondre une erreur :
39
<pre>
40
<error>
41 2 Greg Burri
   { 
42
      "reply" : "error",
43
      "no" : 12
44
      "error_message" : "blabla"
45
   }
46 1 Greg Burri
</pre>
47
   
48
Message ok générique :
49 2 Greg Burri
<pre>
50 1 Greg Burri
<ok>
51
   {
52
      "reply" : "ok"
53
   }
54 2 Greg Burri
</pre>
55 1 Greg Burri
56 2 Greg Burri
Entête des messages clients :
57 1 Greg Burri
Si la version du protocole n'est pas similaire du coté serveur la requête est refusée
58 2 Greg Burri
<pre>
59 1 Greg Burri
<client_header>
60
   {
61
      "action" : <action>,
62
      "version" : 3
63
   }
64 2 Greg Burri
</pre>
65 1 Greg Burri
66
67 2 Greg Burri
h3. Enregistrement et authentification
68
69 1 Greg Burri
Permet de créer un nouvel utilisateur.
70
"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.
71
Le mot de passe est hashé en md5.
72
73 2 Greg Burri
*c -> s*
74
<pre>
75 1 Greg Burri
   { 
76
      "header" : {action : "register", version : 3},
77
      "login" : "paul",
78
      "password" : "IJKJDHHSAD9081238",
79
      "profile" : { .. } // voir <profile>
80
   }
81 2 Greg Burri
</pre>
82 1 Greg Burri
ou
83 2 Greg Burri
<pre>
84 1 Greg Burri
   {
85
      "header" : {action : "authentification", version : 3}
86
      "cookie" : "LKJDLAKSJBFLKASN"
87
   }
88 2 Greg Burri
</pre>
89 1 Greg Burri
ou
90 2 Greg Burri
<pre>
91 1 Greg Burri
   {
92
      "header" : {action : "authentification", version : 3},
93
      "login" : "paul",
94
      "password" : "IJKJDHHSAD9081238"
95
   }
96 2 Greg Burri
</pre>
97 1 Greg Burri
   
98 2 Greg Burri
*s -> c*
99
<pre>
100 1 Greg Burri
   {
101
      "reply" : "register" | "authentification",
102
      "status" : "auth_registered" | "auth_not_registered",
103
      "cookie" : "LKJDLAKSJBFLKASN",
104
      "id" : 193,
105
      "login" : "paul49",
106
      "ek_master" : true | false,
107
      "profile" : <profile>
108
   }
109 2 Greg Burri
</pre>
110 1 Greg Burri
 
111 2 Greg Burri
112
h3. Logout
113
114
*c -> s*
115
<pre>
116 1 Greg Burri
   {
117
      "header" : {action : "logout", version : 3},
118
      "cookie" : "LKJDLAKSJBFLKASN"
119
   }
120 2 Greg Burri
</pre>
121
122 1 Greg Burri
 
123 2 Greg Burri
h3. Profile
124
125
<pre>
126 1 Greg Burri
<profile>
127
   {
128
      "nick" : "Paul",
129
      "email" : "paul@pierre.com",
130
      "css" : "css/3/euphorik.css",
131
      "chat_order" : "chrono" | "reverse",
132
      "nick_format" : "nick" | "login" | "nick_login",
133
      "view_times" : true | false,
134
      "view_tooltips" : true | false,
135
      "conversations" : [{"root" : 3, "minimized" : true},
136
      "ostentatious_master" : "invisible" | "light" | "heavy"
137
   }
138 2 Greg Burri
</pre>
139 1 Greg Burri
140 2 Greg Burri
*c -> s*
141
<pre>
142 1 Greg Burri
   {
143
      "header" : {action : "set_profile", version : 3},
144
      "cookie" : "LKJDLAKSJBFLKASN",
145
      "login" : "paul49",
146
      "password" : "IJKJDHHSAD9081238",
147
      "profile" : <profile>
148
   }
149 2 Greg Burri
</pre>
150 1 Greg Burri
      
151 2 Greg Burri
*s -> c*
152
<pre>
153 1 Greg Burri
   <ok>
154
ou
155
   <error>
156 2 Greg Burri
</pre>
157 1 Greg Burri
158
159 2 Greg Burri
h3. Wait event (page = chat)
160
161 1 Greg Burri
Si "last_message_id" est absent alors le client ne possède pas de message.
162
Si "main_page" est absent alors est vaut 1.
163
"cookie" n'est pas obligatoire.
164
165 2 Greg Burri
<pre>
166 1 Greg Burri
<message>
167
   {
168
      "id" : 54,
169
      "user_id" : 344,
170
      "date" : "Hier 17:26:54",
171 5 Greg Burri
      "last_update" : "Hier 17:26:54",
172 1 Greg Burri
      "system" : true | false,
173
      "owner" : true | false,
174
      "answered" : true | false,
175
      "is_a_reply" : true | false,
176
      "nick" : "Paul",
177
      "login" : "paul_22",
178
      "content" : "Salut",
179
      "root" : 453,
180
      "answer_to" : [
181
         { "id" : 123, "nick" : "Pierre", "login" : "pierre_45" }
182
      ],
183
      "ek_master" : true | false,
184
      "ostentatious_master" : "invisible" | "light" | "heavy",
185
      "last_modification" : "Hier 17:26:54"
186
   }
187 2 Greg Burri
</pre>
188 1 Greg Burri
189 2 Greg Burri
*c -> s*
190
<pre>
191 1 Greg Burri
   {
192
      "header" : {action : "wait_event", version : 3},
193
      "page" : "chat"
194
      "cookie" : "LKJDLAKSJBFLKASN",
195
      "message_count" : 10,
196
      "last_message_id" : 163,
197
      "main_page" : 1,
198
      "troll_id" : 45,
199
      "conversations" : [
200
         {
201
            "root" : 123,
202
            "page" : 1,
203
            "last_message_id" : 4 (pas obligatoire)
204
         }
205
      ]
206
   }
207 2 Greg Burri
</pre>
208 1 Greg Burri
 
209 2 Greg Burri
*s -> c*
210 1 Greg Burri
La première conversation est la principale (main).
211
L'ordre des conversation est le même que celui des données de l'utilisateur.
212
Le format de la date n'est pas formel.
213
first correpond au premier message de la conversation, vaut 'null' pour la conversation principale ainsi que pour les conversations vides.
214 2 Greg Burri
<pre>
215 1 Greg Burri
   {
216
      "reply" : "new_message",
217
      "conversations" : [
218
         {
219
            "last_page" : true | false,
220
            "first" : <message> | null,
221
            "messages" : [ <message>, .. ]
222
         }
223
      ]
224
   }
225 2 Greg Burri
</pre>
226 1 Greg Burri
ou
227 2 Greg Burri
<pre>
228 1 Greg Burri
   {
229
      "reply" : "message_updated",
230 5 Greg Burri
      <message>
231 1 Greg Burri
   }
232 2 Greg Burri
</pre>
233 1 Greg Burri
ou
234 2 Greg Burri
<pre>
235 1 Greg Burri
   {
236
      "reply" : "new_troll",
237
      "troll_id" : 123,
238
      "message_id" : 12,
239
      "content" : "Linux sera desktop ready en 2008 ?"
240
   }
241 2 Greg Burri
</pre>
242 1 Greg Burri
ou
243 2 Greg Burri
<pre>
244 1 Greg Burri
   <error>
245 2 Greg Burri
</pre>
246 1 Greg Burri
247
248 2 Greg Burri
h3. Wait event (page = admin)
249
250
*c -> s*
251
<pre>
252 1 Greg Burri
   {
253
      "header" : {action : "wait_event", version : 3},
254
      "page" : "admin",
255
      "last_troll" : 5
256
   }
257 2 Greg Burri
</pre>
258 1 Greg Burri
   
259 2 Greg Burri
*s -> c*
260
<pre>
261 1 Greg Burri
   {
262
      "reply" : "troll_modified",
263
      "troll_id" : 3,
264
      "content" : "plop"
265
   }
266 2 Greg Burri
</pre>
267 1 Greg Burri
ou
268 2 Greg Burri
*s -> c*
269
<pre>
270 1 Greg Burri
   {
271
      "reply" : "troll_added",
272
      "trolls" :
273
         [
274
            {
275
               "troll_id" : 5,
276
               "content" : "plop",
277
               "author" : "<Pseudo>"
278
               "author_id" : 2
279
            }
280
         ]
281
   }
282 2 Greg Burri
</pre>
283 1 Greg Burri
ou
284 2 Greg Burri
*s -> c*
285
<pre>
286 1 Greg Burri
   {
287
      "reply" : "troll_deleted",
288
      "troll_id" : 2
289
   }
290 2 Greg Burri
</pre>
291 1 Greg Burri
ou
292
indique de mettre à jour la liste d'ips
293 2 Greg Burri
*s -> c*
294
<pre>
295 1 Greg Burri
   {
296
      "reply" : "banned_ips_refresh"
297
   }
298 2 Greg Burri
</pre>
299 1 Greg Burri
300
301 2 Greg Burri
h3. Envoie d'un troll
302
303
*c -> s*
304
<pre>
305 1 Greg Burri
   {
306
      "header" : {action : "put_troll", version : 3},
307
      "cookie" : "LKJDLAKSJBFLKASN",
308
      "content" : "Un bon troll velu !"
309
   }
310 2 Greg Burri
</pre>
311
312
*s -> c*
313
<pre>
314 1 Greg Burri
   <ok>
315 2 Greg Burri
</pre>
316 1 Greg Burri
ou
317 2 Greg Burri
<pre>
318 1 Greg Burri
   <error>
319 2 Greg Burri
</pre>
320 1 Greg Burri
   
321
   
322 2 Greg Burri
h3. Modification d'un troll
323
324
*c -> s*
325
<pre>
326 1 Greg Burri
   {
327
      "header" : {action : "mod_troll", version : 3},
328
      "cookie" : "LKJDLAKSJBFLKASN",
329
      "troll_id" : 3,
330
      "content" : "Un bon troll velu 2 !"
331
   }
332 2 Greg Burri
</pre>
333
334
*s -> c*
335
<pre>
336 1 Greg Burri
   <ok>
337 2 Greg Burri
</pre>
338 1 Greg Burri
ou
339 2 Greg Burri
<pre>
340 1 Greg Burri
   <error>
341 2 Greg Burri
</pre>
342 1 Greg Burri
   
343
   
344 2 Greg Burri
h3. Suppression d'un troll
345
346
*c -> s*
347
<pre>
348 1 Greg Burri
   {
349
      "header" : {action : "del_troll", version : 3},
350
      "cookie" : "LKJDLAKSJBFLKASN",
351
      "troll_id" : 3
352
   }
353 2 Greg Burri
</pre>
354 1 Greg Burri
 
355 2 Greg Burri
*s -> c*
356
<pre>
357 1 Greg Burri
   <ok>
358 2 Greg Burri
</pre>
359 1 Greg Burri
ou
360 2 Greg Burri
<pre>
361 1 Greg Burri
   <error>
362 2 Greg Burri
</pre>
363 1 Greg Burri
   
364
365 2 Greg Burri
h3. Envoie message
366
367 1 Greg Burri
Le client envoie un message, le message peut répondre à un certain nombre d'autres messages.
368
"answer_to" n'est pas obligatoire.
369
370 2 Greg Burri
*c -> s*
371
<pre>
372 1 Greg Burri
   {
373
      "header" : {action : "put_message", version : 3},
374
      "cookie" : "LKJDLAKSJBFLKASN",
375
      "nick" : "Paul",
376
      "content" : "Bonjour",
377
      "answer_to" : [ 345, 532, ... ]
378
   }
379 2 Greg Burri
</pre>
380 1 Greg Burri
 
381 2 Greg Burri
*s -> c*
382
<pre>
383 1 Greg Burri
   <ok>
384 2 Greg Burri
</pre>
385 1 Greg Burri
ou
386 2 Greg Burri
<pre>
387 1 Greg Burri
   <error>
388 2 Greg Burri
</pre>
389 1 Greg Burri
390
391 2 Greg Burri
h3. Slapage
392
393
*c -> s*
394
<pre>
395 1 Greg Burri
   {
396
      "header" : {action : "slap", version : 3},
397
      "cookie" :  "LKJDLAKSJBFLKASN",
398
      "user_id" : 67,
399
      "reason" : "blablabla"
400
   }
401 2 Greg Burri
</pre>
402 1 Greg Burri
   
403 2 Greg Burri
404
*s -> c*
405
<pre>
406 1 Greg Burri
   <ok>
407 2 Greg Burri
</pre>
408 1 Greg Burri
ou
409 2 Greg Burri
<pre>
410 1 Greg Burri
   <error>
411 2 Greg Burri
</pre>
412 1 Greg Burri
   
413
414 2 Greg Burri
h3. Bannissement
415
416
*c -> s*
417
<pre>
418 1 Greg Burri
   {
419
      "header" : {action : "ban", version : 3},
420
      "cookie" : "LKJDLAKSJBFLKASN",
421
      "duration" : 15, // en minute
422
      "user_id" : 67,
423
      "reason" : "blablabla"
424
   }
425 2 Greg Burri
</pre>
426 1 Greg Burri
   
427 2 Greg Burri
428
*s -> c*
429
<pre>
430 1 Greg Burri
   <ok>
431 2 Greg Burri
</pre>
432 1 Greg Burri
ou
433 2 Greg Burri
<pre>
434 1 Greg Burri
   <error>
435 2 Greg Burri
</pre>
436 1 Greg Burri
   
437
   
438 2 Greg Burri
h3. Liste des ip bannis
439
440
*c -> s*
441
<pre>
442 1 Greg Burri
   {
443
      "header" : {action : "list_banned_ips", version : 3},
444
      "cookie" : "LKJDLAKSJBFLKASN"
445
   }
446 2 Greg Burri
</pre>
447 1 Greg Burri
448 2 Greg Burri
*s -> c*
449
<pre>
450 1 Greg Burri
   {
451
      "reply" : "list_banned_ips",
452
      "list" : [
453
         {
454
            ip : "192.168.1.2", 
455
            remaining_time : "1h23"
456
            users : [
457
               {
458
                  nick : "Pierre" , 
459
                  login : "pierre" 
460
               }
461
            ]
462
         }
463
      ]
464
   }
465 2 Greg Burri
</pre>
466 1 Greg Burri
467 2 Greg Burri
h3. Débannissement
468
469
*c -> s*
470
<pre>
471 1 Greg Burri
   {
472
      "header" : {action : "unban", version : 3},
473
      "cookie" : "LKJDLAKSJBFLKASN"
474
      "ip" : "192.168.1.2"
475
   }
476 2 Greg Burri
</pre>
477
478
*s -> c*
479
<pre>
480 1 Greg Burri
   <ok>
481 2 Greg Burri
</pre>
482 1 Greg Burri
ou
483 2 Greg Burri
<pre>
484 1 Greg Burri
   <error>
485 2 Greg Burri
</pre>
486 1 Greg Burri
487
 
488 2 Greg Burri
h3. Ajout d'une correction d'un messages
489
490
_(non implémenté, améliorer pour la modification complète d'un message)_
491 1 Greg Burri
Le client envoie un correctif sous la forme de texte supplémentaire à appondre au dernier messages.
492
Le message est appondu avec un " +++ " devant, par exemple :
493 4 Greg Burri
<pre>
494
Gnome c'est mieux que KDE +++ Euh non ok, c'est faux
495
</pre>
496 1 Greg Burri
497 3 Greg Burri
*c -> s*
498
<pre>
499 1 Greg Burri
   {
500
      "header" : {action : "correction", version : 3},
501
      "cookie" : "LKJDLAKSJBFLKASN",
502
      "content" : "Euh non ok, c'est faux"
503
   }
504 3 Greg Burri
</pre>   
505
506
*s -> c*
507
<pre>
508 1 Greg Burri
   {
509
      "reply" : "correction",
510
      "status" : "ok" | "error",
511
      "message_error" : "blabla"
512
   } 
513 3 Greg Burri
</pre>