X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=doc%2Fprotocole3.txt;h=0af2cce9142ff6ee52f5d3a63eda04058b309e50;hp=fdb68df11f4cb4ae038def96a7e32dd31f03819b;hb=eaeff7851380cf9a416fd609fd9e90297f8f5918;hpb=b5878679d51e91e8a86dd042251c91290bf8caf2 diff --git a/doc/protocole3.txt b/doc/protocole3.txt index fdb68df..0af2cce 100644 --- a/doc/protocole3.txt +++ b/doc/protocole3.txt @@ -1,119 +1,128 @@ -Euphorik - Protocole v3 +Euphorik - Protocole v3 ----------------------- -A. Introduction ---------------- -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. +== Introduction == +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'. - -B. Principes ------------- -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: - * L'authentification (login) se fait soit par un couple soit à l'aide d'un cookie. - * Permet de récupérer les données d'un profile +== Principes == +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: + * L'authentification (login) se fait soit par un couple 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. -C. Protocole ------------- +== 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 : { "reply" : "error", "error_message" : "blabla" } -Message ok générique : +Message ok générique : { "reply" : "ok" + } + +Entete des messages clients : +Si la version du protocole n'est pas similaire du coté serveur la requête est refusée + + { + "action" : , + "version" : 3 } -C.1. Login ----------- -Le mot de passe est hashé en md5. +=== 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 - { - "action" : "authentification", - "login" : "Paul", - "password" : "IJKJDHHSAD9081238" +c -> s + { + "header" : {action : "authentification", version : 3}, + "login" : "paul", + "password" : "IJKJDHHSAD9081238" } -ou - { - "action" : "authentification", - "cookie" : "LKJDLAKSJBFLKASN" +ou + { + "header" : {action : "authentification", version : 3} + "cookie" : "LKJDLAKSJBFLKASN" } -ou +ou { - "action" : "register", - "login" : "Paul", - "password" : "IJKJDHHSAD9081238" + "header" : {action : "authentification", version : 3}, + "login" : "paul", + "password" : "IJKJDHHSAD9081238" } -s -> c - { - "reply" : "login", - "status" : "registration_ok" | "authentification_ok", - "cookie" : "LKJDLAKSJBFLKASN", - "id" : 193, - "pseudo" : "Paul", - "login" : "paul49", - "email" : "paul@pierre.com", - "css" : "css/3/euphorik.css", - "main_page" : 1, - "conversations" : [ - { - "root" : 123, - "page" : 1 - } - ] +s -> c + { + "reply" : "register" | "authentification", + "status" : "auth_not_registered", + "cookie" : "LKJDLAKSJBFLKASN", + "id" : 193, + "css" : "css/1/euphorik.css", + "main_page" : 1 + } +ou + { + "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", + "view_times" : true | false, + "view_tooltips" : true | false, + // "main_page" : 1, + "conversations" : [3, 8], + "ek_master" : true | false } - -C.2. Logout ------------ -c -> s + +=== Logout === +c -> s { - "action" : "logout", - "cookie" : "LKJDLAKSJBFLKASN" + "header" : {action : "logout", version : 3}, + "cookie" : "LKJDLAKSJBFLKASN" } - -C.3. Profile ------------- - -c -> s - { - "action" : "set_profile", - "cookie" : "LKJDLAKSJBFLKASN", - "login" : "paul49", - "password" : "IJKJDHHSAD9081238", - "pseudo" : "Paul", - "email" : "paul@pierre.com", - "css" : "css/3/euphorik.css", - "main_page" : 1, - "conversations" : [ - { - "root" : 123, - "page" : 1 - } - ] - } + +=== Profile === +c -> s + { + "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", + "view_times" : true | false, + "view_tooltips" : true | false, + "main_page" : 1, + "conversations" : [3, 8] + } s -> c @@ -121,121 +130,268 @@ ou -C.4. Wait event ---------------------- -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. +=== Wait event (page = chat) === +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. + + + { + "id" : 54, + "user_id" : 344, + "date" : "Hier 17:26:54", + "system" : true | false, + "owner" : true | false, + "answered" : true | false, + "is_a_reply" : true | false, + "nick" : "Paul", + "login" : "paul_22", + "content" : "Salut", + "root" : 453, + "answer_to" : [ + { "id" : 123, "nick" : "Pierre", "login" : "pierre_45" } + ] + "ek_master" : true | false + } -c -> s +c -> s { - "action" : "wait_event", - "cookie" : "LKJDLAKSJBFLKASN", - "message_count" : 10, + "header" : {action : "wait_event", version : 3}, + "page" : "chat" + "cookie" : "LKJDLAKSJBFLKASN", + "message_count" : 10, "last_message_id" : 163, "main_page" : 1, + "troll_id" : 45, "conversations" : [ { "root" : 123, - "page" : 1 + "page" : 1, + "last_message_id" : 4 (pas obligatoire) } - ] + ] } -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_messages", - "conversations" : [ - { +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, - "messages" : [ - "id" : 54, - "date" : "Hier 17:26:54", - "system" : true | false, - "owner" : true | false, - "answered" : true | false, - "is_a_reply" : true | false, - "nick" : "Paul", - "login" : "paul_22", - "content" : "Salut", - "answer_to" : [ - { "id" : 123, "pseudo" : "Pierre", "login" : "pierre_45" } - ] - ] - } - ... - ] + "first" : , + "messages" : [ , .. ] + } + ] } -ou +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 + + + +=== Wait event (page = admin) === +c -> s { - "reply" : "message_updated", - "message_id" : 123, - "contenu" : "Salut +++ poulpe" + "header" : {action : "wait_event", version : 3}, + "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" : "" + "author_id" : 2 + } + ] + } +ou +s -> c + { + "reply" : "troll_deleted", + "troll_id" : 2 + } +ou +indique de mettre à jour la liste d'ips +s -> c + { + "reply" : "banned_ips_refresh" } -ou + + +=== Envoie d'un troll === +c -> s { - "reply" : "error", - "error_message" : "blabla" + "header" : {action : "put_troll", version : 3}, + "cookie" : "LKJDLAKSJBFLKASN", + "content" : "Un bon troll velu !" } - - -C.5. Envoie troll -------------------- - -c -> s + +s -> c + +ou + + + +=== Modification d'un troll === +c -> s { - "action" : "put_troll", - "cookie" : "LKJDLAKSJBFLKASN", - "content" : "Un bon troll velu !" - } - -s -> c + "header" : {action : "mod_troll", version : 3}, + "cookie" : "LKJDLAKSJBFLKASN", + "troll_id" : 3, + "content" : "Un bon troll velu 2 !" + } + +s -> c + +ou + + + +=== Suppression d'un troll === +c -> s { - "reply" : "ok" | "error", - "error_message" : "blabla" - } + "header" : {action : "del_troll", version : 3}, + "cookie" : "LKJDLAKSJBFLKASN", + "troll_id" : 3 + } + +s -> c + +ou + -C.6. Envoie message -------------------- -Le client envoie un message, le message peut répondre à un certain nombre d'autres messages. -"answer_to" n'est pas obligatoire. +=== Envoie message === +Le client envoie un message, le message peut répondre à un certain nombre d'autres messages. +"answer_to" n'est pas obligatoire. -c -> s +c -> s { - "action" : "put_message", - "cookie" : "LKJDLAKSJBFLKASN", - "nick" : "Paul", - "content" : "Bonjour", - "Troll" : 45, - "answer_to" : [ 345, 532, ... ] + "header" : {action : "put_message", version : 3}, + "cookie" : "LKJDLAKSJBFLKASN", + "nick" : "Paul", + "content" : "Bonjour", + "answer_to" : [ 345, 532, ... ] } -s -> c - { - "reply" : "ok" | "error", - "error_message" : "blabla" - } - - -C.7. 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 +s -> c + +ou + + + +=== Slapage === +c -> s { - "action" : "correction", - "cookie" : "LKJDLAKSJBFLKASN", - "content" : "Euh non ok, c'est faux" - } - -s -> c + "header" : {action : "slap", version : 3}, + "cookie" : "LKJDLAKSJBFLKASN", + "user_id" : 67, + "reason" : "blablabla" + } + +s -> c + +ou + + + +=== Bannissement === +c -> s + { + "header" : {action : "ban", version : 3}, + "cookie" : "LKJDLAKSJBFLKASN", + "duration" : 15, // en minute + "user_id" : 67, + "reason" : "blablabla" + } + +s -> c + +ou + + + +=== Liste des ip bannis === +c -> s + { + "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 { - "reply" : "correction", - "status" : "ok" | "error", - "message_error" : "blabla" + "header" : {action : "unban", version : 3}, + "cookie" : "LKJDLAKSJBFLKASN" + "ip" : "192.168.1.2" + } + +s -> c + +ou + + + +=== 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 + { + "header" : {action : "correction", version : 3}, + "cookie" : "LKJDLAKSJBFLKASN", + "content" : "Euh non ok, c'est faux" + } + +s -> c + { + "reply" : "correction", + "status" : "ok" | "error", + "message_error" : "blabla" }