-Euphorik - Protocole v3
------------------------
-
-== 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'.
-
-
-== 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 <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.
-
-
-== Protocole ==
-c : client
-s : server
-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"
- }
-
-Entete des messages clients :
-Si la version du protocole n'est pas similaire du coté serveur la requête est refusée
-<client_header>
- {
- "action" : <action>,
- "version" : 3
- }
-
-
-=== 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
- {
- "header" : {action : "register", version : 3},
- "login" : "paul",
- "password" : "IJKJDHHSAD9081238",
- "profile" : { .. } // voir <profile>
- }
-ou
- {
- "header" : {action : "authentification", version : 3}
- "cookie" : "LKJDLAKSJBFLKASN"
- }
-ou
- {
- "header" : {action : "authentification", version : 3},
- "login" : "paul",
- "password" : "IJKJDHHSAD9081238"
- }
-
-s -> c
- {
- "reply" : "register" | "authentification",
- "status" : "auth_registered" | "auth_not_registered",
- "cookie" : "LKJDLAKSJBFLKASN",
- "id" : 193,
- "login" : "paul49",
- "ek_master" : true | false,
- "profile" : <profile>
- }
-
-
-=== Logout ===
-c -> s
- {
- "header" : {action : "logout", version : 3},
- "cookie" : "LKJDLAKSJBFLKASN"
- }
-
-
-=== Profile ===
-<profile>
- {
- "nick" : "Paul",
- "email" : "paul@pierre.com",
- "css" : "css/3/euphorik.css",
- "chat_order" : "chrono" | "reverse",
- "nick_format" : "nick" | "login" | "nick_login",
- "view_times" : true | false,
- "view_tooltips" : true | false,
- "conversations" : [{"root" : 3, "minimized" : true},
- "ostentatious_master" : "invisible" | "light" | "heavy"
- }
-
-c -> s
- {
- "header" : {action : "set_profile", version : 3},
- "cookie" : "LKJDLAKSJBFLKASN",
- "login" : "paul49",
- "password" : "IJKJDHHSAD9081238",
- "profile" : <profile>
- }
-
-s -> c
- <ok>
-ou
- <error>
-
-
-=== 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.
-
-<message>
- {
- "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,
- "ostentatious_master" : "invisible" | "light" | "heavy",
- "last_modification" : "Hier 17:26:54"
- }
-
-c -> s
- {
- "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,
- "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.
-first correpond au premier message de la conversation, vaut 'null' pour la conversation principale ainsi que pour les conversations vides.
- {
- "reply" : "new_message",
- "conversations" : [
- {
- "last_page" : true | false,
- "first" : <message> | null,
- "messages" : [ <message>, .. ]
- }
- ]
- }
-ou
- {
- "reply" : "message_updated",
- "message_id" : 123,
- "content" : "Salut poulpe",
- "last_modification" : "Hier 17:26:54"
- }
-ou
- {
- "reply" : "new_troll",
- "troll_id" : 123,
- "message_id" : 12,
- "content" : "Linux sera desktop ready en 2008 ?"
- }
-ou
- <error>
-
-
-=== Wait event (page = admin) ===
-c -> s
- {
- "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" : "<Pseudo>"
- "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"
- }
-
-
-=== Envoie d'un troll ===
-c -> s
- {
- "header" : {action : "put_troll", version : 3},
- "cookie" : "LKJDLAKSJBFLKASN",
- "content" : "Un bon troll velu !"
- }
-
-s -> c
- <ok>
-ou
- <error>
-
-
-=== Modification d'un troll ===
-c -> s
- {
- "header" : {action : "mod_troll", version : 3},
- "cookie" : "LKJDLAKSJBFLKASN",
- "troll_id" : 3,
- "content" : "Un bon troll velu 2 !"
- }
-
-s -> c
- <ok>
-ou
- <error>
-
-
-=== Suppression d'un troll ===
-c -> s
- {
- "header" : {action : "del_troll", version : 3},
- "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.
-
-c -> s
- {
- "header" : {action : "put_message", version : 3},
- "cookie" : "LKJDLAKSJBFLKASN",
- "nick" : "Paul",
- "content" : "Bonjour",
- "answer_to" : [ 345, 532, ... ]
- }
-
-s -> c
- <ok>
-ou
- <error>
-
-
-=== Slapage ===
-c -> s
- {
- "header" : {action : "slap", version : 3},
- "cookie" : "LKJDLAKSJBFLKASN",
- "user_id" : 67,
- "reason" : "blablabla"
- }
-
-s -> c
- <ok>
-ou
- <error>
-
-
-=== Bannissement ===
-c -> s
- {
- "header" : {action : "ban", version : 3},
- "cookie" : "LKJDLAKSJBFLKASN",
- "duration" : 15, // en minute
- "user_id" : 67,
- "reason" : "blablabla"
- }
-
-s -> c
- <ok>
-ou
- <error>
-
-
-=== 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
- {
- "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
- {
- "header" : {action : "correction", version : 3},
- "cookie" : "LKJDLAKSJBFLKASN",
- "content" : "Euh non ok, c'est faux"
- }
-
-s -> c
- {
- "reply" : "correction",
- "status" : "ok" | "error",
- "message_error" : "blabla"
- }