Euphorik - Protocole v3
-----------------------
-A. Introduction
----------------\r
-
+== Introduction ==
Ce document a pour but de décrire la communication client-serveur du site euphorik.\r
Les messages échangés sont basés sur le format JSON.
Ce document remplace 'protocole2.txt'.
\r
-B. Principe
------------
-
+== Principes ==
Enregistrement:\r
* 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.
Rafraichissement:
* Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un function de JQuery)
* Le serveur maintient la connexion bloquée si le client est à jour.
- * Dès qu'un nouveau message arrive, le serveur débloque la connexion est envoie le ou les messages manquants.
+ * Dès qu'un nouveau message arrive, le serveur débloque la connexion et envoie le ou les messages manquants.
-C. Protocole
-------------
+== Protocole ==
c : client
s : server
-Les messages client vers serveur sont envoyé par HTTP-POST
+Les messages client vers serveur sont envoyés par HTTP-POST.
+
+A toutes les requêtes le serveur peut répondre une erreur :
+<error>
+ {
+ "reply" : "error",
+ "error_message" : "blabla"
+ }
+
+Message ok générique :
+<ok>
+ {
+ "reply" : "ok"
+ }
-C.1. Login
-----------
-Le mot de passe est hashé en md5.\r
+=== Enregistrement et authentification ===
+Permet de créer un nouvel utilisateur.
+"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.
+Le mot de passe est hashé en md5.
-c -> s\r
- { \r
- "action" : "authentification",\r
- "login" : "Paul",\r
- "password" : "IJKJDHHSAD9081238"\r
+c -> s
+ {
+ "action" : "authentification",
+ "login" : "paul",
+ "password" : "IJKJDHHSAD9081238"
}
-ou\r
- {\r
- "action" : "authentification",\r
- "cookie" : "LKJDLAKSJBFLKASN"\r
+ou
+ {
+ "action" : "authentification",
+ "cookie" : "LKJDLAKSJBFLKASN"
}
-ou\r
- {\r
- "action" : "register",\r
- "login" : "Paul",\r
- "password" : "IJKJDHHSAD9081238"\r
+ou
+ {
+ "action" : "register",
+ "login" : "paul",
+ "password" : "IJKJDHHSAD9081238"
}
-s -> c\r
- {\r
- "reply" : "login",\r
- "status" : "registration_ok" | "authentification_ok" | "error",\r
+s -> c
+ {
+ "reply" : "register" | "authentification",
+ "status" : "auth_not_registered",
+ "cookie" : "LKJDLAKSJBFLKASN",
+ "id" : 193,
+ "css" : "css/1/euphorik.css",
+ "main_page" : 1
+ }
+ou\r
+ {
+ "reply" : "register" | "authentification",\r
+ "status" : "auth_registered",\r
"cookie" : "LKJDLAKSJBFLKASN",\r
"id" : 193,\r
- "pseudo" : "Paul",\r
+ "nick" : "Paul",\r
"login" : "paul49",\r
"email" : "paul@pierre.com",\r
- "css" : "css/3/euphorik.css",\r
- "main_page" : 1,\r
- "conversations" : [\r
- {\r
- "racine" : 123,\r
- "page" : 1\r
- }\r
- ],\r
- "error_message" : "blabla"\r
+ "css" : "css/3/euphorik.css",
+ "nick_format" : "nick" | "login" | "nick_login",\r
+ "main_page" : 1,
+ "conversations" : [
+ {
+ "racine" : 123,
+ "page" : 1
+ }
+ ],
+ "ek_master" : true | false\r
}
\r
-C.2. Logout
------------
+=== Logout ===
c -> s\r
{\r
"action" : "logout",\r
}
\r
-C.3. Profile
-------------
-Modification du profile, seul "cookie" est obligatoire.
-
+=== Profile ===
c -> s\r
{\r
"action" : "set_profile",\r
"cookie" : "LKJDLAKSJBFLKASN",\r
"login" : "paul49",\r
"password" : "IJKJDHHSAD9081238",\r
- "pseudo" : "Paul",\r
+ "nick" : "Paul",\r
"email" : "paul@pierre.com",\r
- "css" : "css/3/euphorik.css",\r
- "mainPage" : "1",\r
- "conversations" : [\r
- {\r
- "racine" : "4F",\r
- "page" : 1\r
- }\r
- ],\r
- } \r
+ "css" : "css/3/euphorik.css",
+ "nick_format" : "nick" | "login" | "nick_login",\r
+ "main_page" : 1,
+ "conversations" : [
+ {
+ "root" : 123,
+ "page" : 1
+ }
+ ]\r
+ }\r
-s -> c\r
- {\r
- "reply" : "ok" | "error",\r
- "error_message" : "blabla"\r
- }
+s -> c
+ <ok>
+ou
+ <error>
-C.4. Wait event
----------------------
+=== Wait event (page = chat) ===
Si "last_message_id" est absent alors le client ne possède pas de message.
-Les conversations données sont définies dans le profile.
+Si "main_page" est absent alors est vaut 1.
+"cookie" n'est pas obligatoire.
c -> s\r
{\r
- "action" : "wait_event",\r
+ "action" : "wait_event",
+ "page" : "chat"\r
"cookie" : "LKJDLAKSJBFLKASN",\r
- "message_count" : 10,\r
- "last_message_id" : 163\r
+ "message_count" : 10,
+ "last_message_id" : 163,
+ "main_page" : 1,
+ "troll_id" : 45,
+ "conversations" : [
+ {
+ "racine" : 123,
+ "page" : 1,
+ "last_message_id" : 4 (pas obligatoire)
+ }
+ ]\r
}
s -> c\r
L'ordre des conversation est le même que celui des données de l'utilisateur.\r
Le format de la date n'est pas formel.\r
{\r
- "reply" : "new_messages",\r
+ "reply" : "new_message",\r
"conversations" : [\r
- "last_page" : true | false,\r
- "messages" : [\r
- "id" : 54,\r
- "date" : "Hier 17:26:54",\r
- "system" : true | false,\r
- "owner" : true | false,\r
- "answered" : true | false,\r
- "is_a_reply" : true | false,\r
- "nick" : "Paul",\r
- "login" : "paul_22",\r
- "content" : "Salut",\r
- "answer_to" : [\r
- { "id" : 123, "pseudo" : "Pierre", "login" : "pierre_45" }\r
+ {\r
+ "last_page" : true | false,\r
+ "messages" : [
+ {\r
+ "id" : 54,
+ "user_id" : 344,\r
+ "date" : "Hier 17:26:54",\r
+ "system" : true | false,\r
+ "owner" : true | false,\r
+ "answered" : true | false,\r
+ "is_a_reply" : true | false,\r
+ "nick" : "Paul",\r
+ "login" : "paul_22",\r
+ "content" : "Salut",\r
+ "answer_to" : [\r
+ { "id" : 123, "nick" : "Pierre", "login" : "pierre_45" }\r
+ ]
+ "ek_master" : true | false
+ }\r
]\r
- ]\r
+ }
+ ...\r
]\r
}
ou\r
{\r
"reply" : "message_updated",\r
"message_id" : 123,\r
- "contenu" : "Salut +++ poulpe"\r
+ "content" : "Salut +++ poulpe"\r
}
-ou\r
- {\r
- "reply" : "error",\r
- "error_message" : "blabla"\r
+ou
+ {
+ "reply" : "new_troll",
+ "troll_id" : 123,
+ "content" : "Linux sera desktop ready en 2008 ?"
}
+ou
+ <error>
-C.5. Envoie message
--------------------
+=== Wait event (page = admin) ===
+c -> s
+ {
+ "action" : "wait_event",
+ "page" : "admin",
+ "last_troll" : 5
+ }
+
+s -> c
+ {
+ "reply" : "troll_modified",
+ "troll_id" : 3,
+ "content" : "plop"
+ }
+ou
+s -> c
+ {
+ "reply" : "troll_added",
+ "trolls" :
+ [
+ {
+ "troll_id" : 5,
+ "content" : "plop",
+ "author" : "<Pseudo>"
+ "author_id" : 2
+ }
+ ]
+ }
+ou
+s -> c
+ {
+ "reply" : "troll_deleted",
+ "troll_id" : 2
+ }
+\r
+\r
+=== Envoie d'un troll ===\r
+c -> s\r
+ {\r
+ "action" : "put_troll",\r
+ "cookie" : "LKJDLAKSJBFLKASN",\r
+ "content" : "Un bon troll velu !"\r
+ }
+
+s -> c
+ <ok>
+ou
+ <error>
+
+ \r
+=== Modification d'un troll ===
+c -> s
+ {
+ "action" : "mod_troll",
+ "cookie" : "LKJDLAKSJBFLKASN",
+ "troll_id" : 3,
+ "content" : "Un bon troll velu 2 !"
+ }
+
+s -> c
+ <ok>
+ou
+ <error>
+
+ \r
+=== Suppression d'un troll ===
+c -> s
+ {
+ "action" : "del_troll",
+ "cookie" : "LKJDLAKSJBFLKASN",
+ "troll_id" : 3
+ }
+
+s -> c
+ <ok>
+ou
+ <error>
+
+
+=== Envoie message ===
Le client envoie un message, le message peut répondre à un certain nombre d'autres messages.
"answer_to" n'est pas obligatoire.\r
"answer_to" : [ 345, 532, ... ]\r
}
-s -> c\r
- {\r
- "reply" : "ok" | "error",\r
- "error_message" : "blabla"\r
+s -> c
+ <ok>
+ou
+ <error>
+
+
+=== Slapage ===
+c -> s
+ {
+ "action" : "slap",
+ "cookie" : "LKJDLAKSJBFLKASN",
+ "user_id" : 67,
+ "reason" : "blablabla"
}
+
+s -> c
+ <ok>
+ou
+ <error>
+
+
+=== Bannissement ===
+c -> s
+ {
+ "action" : "ban",
+ "cookie" : "LKJDLAKSJBFLKASN",
+ "duration" : 15, // en minute
+ "user_id" : 67,
+ "reason" : "blablabla"
+ }
+
+s -> c
+ <ok>
+ou
+ <error>\r
\r
- \r
-C.6 Ajout d'une correction d'un messages\r
-----------------------------------------\r
+=== Ajout d'une correction d'un messages ===\r
Le client envoie un correctif sous la forme de texte supplémentaire à appondre au dernier messages.\r
Le message est appondu avec un " +++ " devant, par exemple :\r
> Gnome c'est mieux que KDE +++ Euh non ok, c'est faux\r