MOD mise à jour du protocole : ajout d'un numéro de version pour chaque message,...
[euphorik.git] / doc / protocole3.txt
index 8c383c7..0af2cce 100644 (file)
@@ -1,64 +1,72 @@
-Euphorik - Protocole v3
+Euphorik - Protocole v3
 -----------------------
 
 == 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 a pour but de décrire la communication client-serveur du site euphorik.
+Les messages échangés sont basés sur le format JSON.
 Ce document remplace 'protocole2.txt'.
-\r
+
 
 == 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.
+Enregistrement:
+ * 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.
 
-Authentification:\r
- * L'authentification (login) se fait soit par un couple <login, mot de passe> soit à l'aide d'un cookie.\r
- * Permet de récupérer les données d'un profile
+Authentification:
+ * L'authentification (login) se fait soit par un couple <login, mot de passe> soit à l'aide d'un cookie.
+ * Permet de récupérer les données d'un profile
 
 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 et envoie le ou les messages manquants.
+ * 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 et envoie le ou les messages manquants.
  
 
 == Protocole ==
 c : client
 s : server
-Les messages client vers serveur sont envoyés 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 :
+A toutes les requêtes le serveur peut répondre une erreur :
 <error>
    {
       "reply" : "error",
       "error_message" : "blabla"
    }
    
-Message ok générique :
+Message ok générique :
 <ok>
    {
       "reply" : "ok"
+   }\r
+\r
+Entete des messages clients :\r
+Si la version du protocole n'est pas similaire du coté serveur la requête est refusée\r
+<client_header>\r
+   {\r
+      "action" : <action>,\r
+      "version" : 3\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.
+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
    { 
-      "action" : "authentification",
+      "header" : {action : "authentification", version : 3},
       "login" : "paul",
       "password" : "IJKJDHHSAD9081238"
    }
 ou
    {
-      "action" : "authentification",
+      "header" : {action : "authentification", version : 3}
       "cookie" : "LKJDLAKSJBFLKASN"
    }
 ou
-   {
-      "action" : "register",
+   {\r
+      "header" : {action : "authentification", version : 3},
       "login" : "paul",
       "password" : "IJKJDHHSAD9081238"
    }
@@ -72,55 +80,49 @@ s -> c
       "css" : "css/1/euphorik.css",
       "main_page" : 1
    }
-ou\r
+ou
    {
-      "reply" : "register" | "authentification",\r
-      "status" : "auth_registered",\r
-      "cookie" : "LKJDLAKSJBFLKASN",\r
-      "id" : 193,\r
-      "nick" : "Paul",\r
-      "login" : "paul49",\r
-      "email" : "paul@pierre.com",\r
+      "reply" : "register" | "authentification",
+      "status" : "auth_registered",
+      "cookie" : "LKJDLAKSJBFLKASN",
+      "id" : 193,
+      "nick" : "Paul",
+      "login" : "paul49",
+      "email" : "paul@pierre.com",
       "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
+      "nick_format" : "nick" | "login" | "nick_login",
+      "view_times" : true | false,
+      "view_tooltips" : true | false,
+      // "main_page" : 1,
+      "conversations" : [3, 8],
+      "ek_master" : true | false
    }
\r
  
 === Logout ===
-c -> s\r
+c -> s
    {\r
-      "action" : "logout",\r
-      "cookie" : "LKJDLAKSJBFLKASN"\r
+      "header" : {action : "logout", version : 3},
+      "cookie" : "LKJDLAKSJBFLKASN"
    }
\r
  
 === Profile ===
-c -> s\r
+c -> s
    {\r
-      "action" : "set_profile",\r
-      "cookie" : "LKJDLAKSJBFLKASN",\r
-      "login" : "paul49",\r
-      "password" : "IJKJDHHSAD9081238",\r
-      "nick" : "Paul",\r
-      "email" : "paul@pierre.com",\r
+      "header" : {action : "set_profile", version : 3},
+      "cookie" : "LKJDLAKSJBFLKASN",
+      "login" : "paul49",
+      "password" : "IJKJDHHSAD9081238",
+      "nick" : "Paul",
+      "email" : "paul@pierre.com",
       "css" : "css/3/euphorik.css",
-      "nick_format" : "nick" | "login" | "nick_login",\r
+      "nick_format" : "nick" | "login" | "nick_login",
+      "view_times" : true | false,
+      "view_tooltips" : true | false,
       "main_page" : 1,
-      "conversations" : [
-         {
-            "root" : 123,
-            "page" : 1
-         }
-      ]\r
-   }\r
+      "conversations" : [3, 8]
+   }
       
 s -> c
    <ok>
@@ -129,69 +131,72 @@ ou
 
 
 === Wait event (page = chat) ===
-Si "last_message_id" est absent alors le client ne possède pas de message.
+Si "last_message_id" est absent alors le client ne possède pas de message.
 Si "main_page" est absent alors est vaut 1.
 "cookie" n'est pas obligatoire.
+\r
+<message>\r
+   {\r
+      "id" : 54,\r
+      "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
+      "root" : 453,\r
+      "answer_to" : [\r
+         { "id" : 123, "nick" : "Pierre", "login" : "pierre_45" }\r
+      ]\r
+      "ek_master" : true | false\r
+   }\r
 
-c -> s\r
+c -> s
    {\r
-      "action" : "wait_event",
-      "page" : "chat"\r
-      "cookie" : "LKJDLAKSJBFLKASN",\r
+      "header" : {action : "wait_event", version : 3},
+      "page" : "chat"
+      "cookie" : "LKJDLAKSJBFLKASN",
       "message_count" : 10,
       "last_message_id" : 163,
       "main_page" : 1,
       "troll_id" : 45,
       "conversations" : [
          {
-            "racine" : 123,
+            "root" : 123,
             "page" : 1,
             "last_message_id" : 4 (pas obligatoire)
          }
-      ]\r
+      ]
    }
  
-s -> c\r
-La première conversation est la principale (main).\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
-      "conversations" : [\r
-         {\r
+s -> c
+La première conversation est la principale (main).
+L'ordre des conversation est le même que celui des données de l'utilisateur.
+Le format de la date n'est pas formel.
+   {
+      "reply" : "new_message",
+      "conversations" : [
+         {
             "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
+            "first" : <message>,
+            "messages" : [ <message>, .. ]
          }
-         ...\r
-      ]\r
+      ]
    }
-ou\r
-   {\r
-      "reply" : "message_updated",\r
-      "message_id" : 123,\r
-      "content" : "Salut +++ poulpe"\r
+ou
+   {
+      "reply" : "message_updated",
+      "message_id" : 123,
+      "content" : "Salut +++ poulpe"
    }
 ou
    {
       "reply" : "new_troll",
       "troll_id" : 123,
+      "message_id" : 12,
       "content" : "Linux sera desktop ready en 2008 ?"
    }
 ou
@@ -200,8 +205,8 @@ ou
 
 === Wait event (page = admin) ===
 c -> s
-   {
-      "action" : "wait_event",
+   {\r
+      "header" : {action : "wait_event", version : 3},
       "page" : "admin",
       "last_troll" : 5
    }
@@ -232,14 +237,20 @@ s -> c
       "reply" : "troll_deleted",
       "troll_id" : 2
    }
-\r
-\r
-=== Envoie d'un troll ===\r
-c -> s\r
+ou
+indique de mettre à jour la liste d'ips
+s -> c
+   {
+      "reply" : "banned_ips_refresh"
+   }
+
+
+=== Envoie d'un troll ===
+c -> s
    {\r
-      "action" : "put_troll",\r
-      "cookie" : "LKJDLAKSJBFLKASN",\r
-      "content" : "Un bon troll velu !"\r
+      "header" : {action : "put_troll", version : 3},
+      "cookie" : "LKJDLAKSJBFLKASN",
+      "content" : "Un bon troll velu !"
    }
  
 s -> c
@@ -247,11 +258,11 @@ s -> c
 ou
    <error>
    
-   \r
+   
 === Modification d'un troll ===
 c -> s
-   {
-      "action" : "mod_troll",
+   {\r
+      "header" : {action : "mod_troll", version : 3},
       "cookie" : "LKJDLAKSJBFLKASN",
       "troll_id" : 3,
       "content" : "Un bon troll velu 2 !"
@@ -262,11 +273,11 @@ s -> c
 ou
    <error>
    
-   \r
+   
 === Suppression d'un troll ===
 c -> s
-   {
-      "action" : "del_troll",
+   {\r
+      "header" : {action : "del_troll", version : 3},
       "cookie" : "LKJDLAKSJBFLKASN",
       "troll_id" : 3
    }
@@ -278,16 +289,16 @@ ou
    
 
 === 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
+Le client envoie un message, le message peut répondre à un certain nombre d'autres messages.
+"answer_to" n'est pas obligatoire.
 
-c -> s\r
+c -> s
    {\r
-      "action" : "put_message",\r
-      "cookie" : "LKJDLAKSJBFLKASN",\r
-      "nick" : "Paul",\r
-      "content" : "Bonjour",\r
-      "answer_to" : [ 345, 532, ... ]\r
+      "header" : {action : "put_message", version : 3},
+      "cookie" : "LKJDLAKSJBFLKASN",
+      "nick" : "Paul",
+      "content" : "Bonjour",
+      "answer_to" : [ 345, 532, ... ]
    }
  
 s -> c
@@ -298,8 +309,8 @@ ou
 
 === Slapage ===
 c -> s
-   {
-      "action" : "slap",
+   {\r
+      "header" : {action : "slap", version : 3},
       "cookie" :  "LKJDLAKSJBFLKASN",
       "user_id" : 67,
       "reason" : "blablabla"
@@ -313,8 +324,8 @@ ou
 
 === Bannissement ===
 c -> s
-   {
-      "action" : "ban",
+   {\r
+      "header" : {action : "ban", version : 3},
       "cookie" : "LKJDLAKSJBFLKASN",
       "duration" : 15, // en minute
       "user_id" : 67,
@@ -324,23 +335,63 @@ c -> s
 s -> c
    <ok>
 ou
-   <error>\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
-\r
-c -> s\r
+   <error>
+   
+   
+=== Liste des ip bannis ===
+c -> s
    {\r
-      "action" : "correction",\r
-      "cookie" : "LKJDLAKSJBFLKASN",\r
-      "content" : "Euh non ok, c'est faux"\r
-   }\r
-   \r
-s -> c\r
+      "header" : {action : "list_banned_ips", version : 3},
+      "cookie" : "LKJDLAKSJBFLKASN"
+   }
+
+s -> c 
+   {
+      "reply" : "list_banned_ips",
+      "list" : [
+         {
+            ip : "192.168.1.2", 
+            remaining_time : "1h23"
+            users : [
+               {
+                  nick : "Pierre" , 
+                  login : "pierre" 
+               }
+            ]
+         }
+      ]
+   }
+   
+
+=== Débannissement ===
+c -> s
    {\r
-      "reply" : "correction",\r
-      "status" : "ok" | "error",\r
-      "message_error" : "blabla"\r
+      "header" : {action : "unban", version : 3},
+      "cookie" : "LKJDLAKSJBFLKASN"
+      "ip" : "192.168.1.2"
+   }
+   
+s -> c
+   <ok>
+ou
+   <error>
+
+=== Ajout d'une correction d'un messages ===
+Le client envoie un correctif sous la forme de texte supplémentaire à appondre au dernier messages.
+Le message est appondu avec un " +++ " devant, par exemple :
+> Gnome c'est mieux que KDE +++ Euh non ok, c'est faux
+
+c -> s
+   {\r
+      "header" : {action : "correction", version : 3},
+      "cookie" : "LKJDLAKSJBFLKASN",
+      "content" : "Euh non ok, c'est faux"
+   }
+   
+s -> c
+   {
+      "reply" : "correction",
+      "status" : "ok" | "error",
+      "message_error" : "blabla"
    }