MOD Rectification du protocole (il ne devrait plus trop bouger)
[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 === Login ===
44 Le mot de passe est hashé en md5.\r
45 L'action 'register' permet de créer un nouvel utilisateur.\r
46
47 c -> s\r
48    { \r
49       "action" : "authentification",\r
50       "login" : "Paul",\r
51       "password" : "IJKJDHHSAD9081238"\r
52    }
53 ou\r
54    {\r
55       "action" : "authentification",\r
56       "cookie" : "LKJDLAKSJBFLKASN"\r
57    }
58 ou\r
59    {\r
60       "action" : "register",\r
61       "login" : "Paul",\r
62       "password" : "IJKJDHHSAD9081238"\r
63    }
64    
65 s -> c\r
66    {\r
67       "reply" : "login",\r
68       "status" : "registration_ok" | "authentification_ok",\r
69       "cookie" : "LKJDLAKSJBFLKASN",\r
70       "id" : 193,\r
71       "pseudo" : "Paul",\r
72       "login" : "paul49",\r
73       "email" : "paul@pierre.com",\r
74       "css" : "css/3/euphorik.css",\r
75       "main_page" : 1,
76       "conversations" : [
77          {
78             "racine" : 123,
79             "page" : 1
80          }
81       ]\r
82    }
83  \r
84  
85 === Logout ===
86 c -> s\r
87    {\r
88       "action" : "logout",\r
89       "cookie" : "LKJDLAKSJBFLKASN"\r
90    }
91  \r
92  
93 === Profile ===
94 c -> s\r
95    {\r
96       "action" : "set_profile",\r
97       "cookie" : "LKJDLAKSJBFLKASN",\r
98       "login" : "paul49",\r
99       "password" : "IJKJDHHSAD9081238",\r
100       "pseudo" : "Paul",\r
101       "email" : "paul@pierre.com",\r
102       "css" : "css/3/euphorik.css",\r
103       "main_page" : 1,
104       "conversations" : [
105          {
106             "racine" : 123,
107             "page" : 1
108          }
109       ]\r
110    }\r
111       
112 s -> c
113    <ok>
114 ou
115    <error>
116
117
118 === Wait event ===
119 Si "last_message_id" est absent alors le client ne possède pas de message.
120 Les conversations lié aux trolls sont définies dans le profile.
121
122 c -> s\r
123    {\r
124       "action" : "wait_event",
125       "page" : "chat"\r
126       "cookie" : "LKJDLAKSJBFLKASN",\r
127       "message_count" : 10,
128       "last_message_id" : 163,
129       "conversations" : [
130          {
131             "racine" : 123,
132             "page" : 1
133          }
134       ]\r
135    }
136  
137 s -> c\r
138 La première conversation est la principale (main).\r
139 L'ordre des conversation est le même que celui des données de l'utilisateur.\r
140 Le format de la date n'est pas formel.\r
141    {\r
142       "reply" : "new_messages",\r
143       "conversations" : [\r
144          {\r
145             "last_page" : true | false,\r
146             "messages" : [
147                {\r
148                   "id" : 54,\r
149                   "date" : "Hier 17:26:54",\r
150                   "system" : true | false,\r
151                   "owner" : true | false,\r
152                   "answered" : true | false,\r
153                   "is_a_reply" : true | false,\r
154                   "nick" : "Paul",\r
155                   "login" : "paul_22",\r
156                   "content" : "Salut",\r
157                   "answer_to" : [\r
158                      { "id" : 123, "pseudo" : "Pierre", "login" : "pierre_45" }\r
159                   ]
160                }\r
161             ]\r
162          }
163          ...\r
164       ]\r
165    }
166 ou\r
167    {\r
168       "reply" : "message_updated",\r
169       "message_id" : 123,\r
170       "contenu" : "Salut +++ poulpe"\r
171    }
172 ou\r
173    {\r
174       "reply" : "error",\r
175       "error_message" : "blabla"\r
176    }
177 \r
178 \r
179 === Envoie d'un troll ===
180 TODO\r
181 c -> s\r
182    {\r
183       "action" : "put_troll",\r
184       "cookie" : "LKJDLAKSJBFLKASN",\r
185       "content" : "Un bon troll velu !"\r
186    }\r
187 === Modification d'un troll ===\r
188 TODO\r
189 === Suppression d'un troll ===\r
190 TODO\r
191 === Noter un troll ===\r
192 TODO
193
194 === Envoie message ===
195 Le client envoie un message, le message peut répondre à un certain nombre d'autres messages.
196 "answer_to" n'est pas obligatoire.\r
197
198 c -> s\r
199    {\r
200       "action" : "put_message",\r
201       "cookie" : "LKJDLAKSJBFLKASN",\r
202       "nick" : "Paul",\r
203       "content" : "Bonjour",\r
204       "answer_to" : [ 345, 532, ... ]\r
205    }
206  
207 s -> c\r
208    {\r
209       "reply" : "ok" | "error",\r
210       "error_message" : "blabla"\r
211    }
212  \r
213  \r
214 === Ajout d'une correction d'un messages ===\r
215 Le client envoie un correctif sous la forme de texte supplémentaire à appondre au dernier messages.\r
216 Le message est appondu avec un " +++ " devant, par exemple :\r
217 > Gnome c'est mieux que KDE +++ Euh non ok, c'est faux\r
218 \r
219 c -> s\r
220    {\r
221       "action" : "correction",\r
222       "cookie" : "LKJDLAKSJBFLKASN",\r
223       "content" : "Euh non ok, c'est faux"\r
224    }\r
225    \r
226 s -> c\r
227    {\r
228       "reply" : "correction",\r
229       "status" : "ok" | "error",\r
230       "message_error" : "blabla"\r
231    }