ADD Planification des futures release (dans le todo)
[euphorik.git] / doc / protocole3.txt
1 Euphorik - Protocole v3
2 -----------------------
3
4 A. Introduction
5 ---------------\r
6
7 Ce document a pour but de décrire la communication client-serveur du site euphorik.\r
8 Les messages échangés sont basés sur le format JSON.
9 Ce document remplace 'protocole2.txt'.
10 \r
11
12 B. Principe
13 -----------
14
15 Enregistrement:\r
16  * 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.
17
18 Authentification:\r
19  * L'authentification (login) se fait soit par un couple <login, mot de passe> soit à l'aide d'un cookie.\r
20  * Permet de récupérer les données d'un profile
21
22 Rafraichissement:
23  * Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un function de JQuery)
24  * Le serveur maintient la connexion bloquée si le client est à jour.
25  * Dès qu'un nouveau message arrive, le serveur débloque la connexion est envoie le ou les messages manquants.
26  
27
28 C. Protocole
29 ------------
30 c : client
31 s : server
32 Les messages client vers serveur sont envoyé par HTTP-POST
33
34
35 C.1. Login
36 ----------
37 Le mot de passe est hashé en md5.\r
38
39 c -> s\r
40    { \r
41       "action" : "authentification",\r
42       "login" : "Paul",\r
43       "password" : "IJKJDHHSAD9081238"\r
44    }
45 ou\r
46    {\r
47       "action" : "authentification",\r
48       "cookie" : "LKJDLAKSJBFLKASN"\r
49    }
50 ou\r
51    {\r
52       "action" : "register",\r
53       "login" : "Paul",\r
54       "password" : "IJKJDHHSAD9081238"\r
55    }
56    
57 s -> c\r
58    {\r
59       "reply" : "login",\r
60       "status" : "registration_ok" | "authentification_ok" | "error",\r
61       "cookie" : "LKJDLAKSJBFLKASN",\r
62       "id" : 193,\r
63       "pseudo" : "Paul",\r
64       "login" : "paul49",\r
65       "email" : "paul@pierre.com",\r
66       "css" : "css/3/euphorik.css",\r
67       "main_page" : 1,\r
68       "conversations" : [\r
69          {\r
70             "racine" : 123,\r
71             "page" : 1\r
72          }\r
73       ],\r
74       "error_message" : "blabla"\r
75    }
76  \r
77  
78 C.2. Logout
79 -----------
80 c -> s\r
81    {\r
82       "action" : "logout",\r
83       "cookie" : "LKJDLAKSJBFLKASN"\r
84    }
85  \r
86  
87 C.3. Profile
88 ------------
89 Modification du profile, seul "cookie" est obligatoire.
90
91 c -> s\r
92    {\r
93       "action" : "set_profile",\r
94       "cookie" : "LKJDLAKSJBFLKASN",\r
95       "login" : "paul49",\r
96       "password" : "IJKJDHHSAD9081238",\r
97       "pseudo" : "Paul",\r
98       "email" : "paul@pierre.com",\r
99       "css" : "css/3/euphorik.css",\r
100       "mainPage" : "1",\r
101       "conversations" : [\r
102          {\r
103             "racine" : "4F",\r
104             "page" : 1\r
105          }\r
106       ],\r
107    }      \r
108       
109 s -> c\r
110    {\r
111       "reply" : "ok" | "error",\r
112       "error_message" : "blabla"\r
113    }
114
115
116 C.4. Wait event
117 ---------------------
118 Si "last_message_id" est absent alors le client ne possède pas de message.
119 Les conversations données sont définies dans le profile.
120
121 c -> s\r
122    {\r
123       "action" : "wait_event",\r
124       "cookie" : "LKJDLAKSJBFLKASN",\r
125       "message_count" : 10,\r
126       "last_message_id" : 163\r
127    }
128  
129 s -> c\r
130 La première conversation est la principale (main).\r
131 L'ordre des conversation est le même que celui des données de l'utilisateur.\r
132 Le format de la date n'est pas formel.\r
133    {\r
134       "reply" : "new_messages",\r
135       "conversations" : [\r
136          "last_page" : true | false,\r
137          "messages" : [\r
138             "id" : 54,\r
139             "date" : "Hier 17:26:54",\r
140             "system" : true | false,\r
141             "owner" : true | false,\r
142             "answered" : true | false,\r
143             "is_a_reply" : true | false,\r
144             "nick" : "Paul",\r
145             "login" : "paul_22",\r
146             "content" : "Salut",\r
147             "answer_to" : [\r
148                { "id" : 123, "pseudo" : "Pierre", "login" : "pierre_45" }\r
149             ]\r
150          ]\r
151       ]\r
152    }
153 ou\r
154    {\r
155       "reply" : "message_updated",\r
156       "message_id" : 123,\r
157       "contenu" : "Salut +++ poulpe"\r
158    }
159 ou\r
160    {\r
161       "reply" : "error",\r
162       "error_message" : "blabla"\r
163    }
164
165
166 C.5. Envoie message
167 -------------------
168 Le client envoie un message, le message peut répondre à un certain nombre d'autres messages.
169 "answer_to" n'est pas obligatoire.\r
170
171 c -> s\r
172    {\r
173       "action" : "put_message",\r
174       "cookie" : "LKJDLAKSJBFLKASN",\r
175       "nick" : "Paul",\r
176       "content" : "Bonjour",\r
177       "answer_to" : [ 345, 532, ... ]\r
178    }
179  
180 s -> c\r
181    {\r
182       "reply" : "ok" | "error",\r
183       "error_message" : "blabla"\r
184    }
185  \r
186  \r
187 C.6 Ajout d'une correction d'un messages\r
188 ----------------------------------------\r
189 Le client envoie un correctif sous la forme de texte supplémentaire à appondre au dernier messages.\r
190 Le message est appondu avec un " +++ " devant, par exemple :\r
191 > Gnome c'est mieux que KDE +++ Euh non ok, c'est faux\r
192 \r
193 c -> s\r
194    {\r
195       "action" : "correction",\r
196       "cookie" : "LKJDLAKSJBFLKASN",\r
197       "content" : "Euh non ok, c'est faux"\r
198    }\r
199    \r
200 s -> c\r
201    {\r
202       "reply" : "correction",\r
203       "status" : "ok" | "error",\r
204       "message_error" : "blabla"\r
205    }