From 4708cea3e56946707cd391b3a5442c48b2045254 Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Mon, 28 Jul 2008 08:41:03 +0000 Subject: [PATCH 1/1] =?utf8?q?DEL=20suppression=20de=20la=20decription=20d?= =?utf8?q?u=20protocole=20(pass=C3=A9=20dans=20le=20wiki)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- doc/protocole3.txt | 392 ------------------------------ modules/erl/euphorik_requests.erl | 15 +- tools/tools.rb | 31 +-- 3 files changed, 20 insertions(+), 418 deletions(-) delete mode 100644 doc/protocole3.txt diff --git a/doc/protocole3.txt b/doc/protocole3.txt deleted file mode 100644 index 2eb81a6..0000000 --- a/doc/protocole3.txt +++ /dev/null @@ -1,392 +0,0 @@ -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 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 : - - { - "reply" : "error", - "error_message" : "blabla" - } - -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 - } - - -=== 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 - } -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" : - } - - -=== Logout === -c -> s - { - "header" : {action : "logout", version : 3}, - "cookie" : "LKJDLAKSJBFLKASN" - } - - -=== 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" : - } - -s -> c - -ou - - - -=== 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, - "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" : | null, - "messages" : [ , .. ] - } - ] - } -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 - - - -=== 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" : "" - "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 - -ou - - - -=== 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 - -ou - - - -=== Suppression d'un troll === -c -> s - { - "header" : {action : "del_troll", version : 3}, - "cookie" : "LKJDLAKSJBFLKASN", - "troll_id" : 3 - } - -s -> c - -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. - -c -> s - { - "header" : {action : "put_message", version : 3}, - "cookie" : "LKJDLAKSJBFLKASN", - "nick" : "Paul", - "content" : "Bonjour", - "answer_to" : [ 345, 532, ... ] - } - -s -> c - -ou - - - -=== Slapage === -c -> s - { - "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 - { - "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" - } diff --git a/modules/erl/euphorik_requests.erl b/modules/erl/euphorik_requests.erl index f497382..8c46b7b 100755 --- a/modules/erl/euphorik_requests.erl +++ b/modules/erl/euphorik_requests.erl @@ -18,19 +18,18 @@ % % Ce module est fait pour répondre à des requêtes 'AJAX'. % Il est définit comme 'appmods' pour l'url "request" dans yaws. -% Par exemple http://www.euphorik.ch/request abouti sur la fonction out() de ce module. +% Par exemple http://www.euphorik.ch/request abouti sur la fonction out/1 de ce module. % @author G.Burri -module(euphorik_requests). -export([out/1, traiter_donnees/2]). --include_lib("xmerl/include/xmerl.hrl"). -include_lib("yaws/include/yaws_api.hrl"). -include("../include/euphorik_defines.hrl"). +% Point d'entrée pour les requêtes AJAX sur http://www.euphorik.ch/request. out(A) -> - %io:format("~p~n", [A]), % utilisé parfois pendant le debug IP = case inet:peername(A#arg.clisock) of {ok, {Adresse, _Port}} -> Adresse; _ -> inconnue @@ -40,7 +39,6 @@ out(A) -> inet:setopts(A#arg.clisock, [{active, true}, {keepalive, true}]), {value, {_, Contenu}} = lists:keysearch("action", 1, yaws_api:parse_post(A)), Ret = traiter_donnees(Contenu, IP), - %io:format("~p~n", [Ret]), {content, "application/json", Ret}. @@ -61,7 +59,7 @@ traiter_donnees(Contenu, IP) -> % authentification d'un client traiter_action("authentification", JSON, IP) -> euphorik_protocole:login(JSON, IP); -% un client s'enregistre (pseudo + password) +% un client s'enregistre : (pseudo + password) ou de manière anonyme traiter_action("register", JSON, IP) -> euphorik_protocole:register(JSON, IP); % modification du profile @@ -73,18 +71,25 @@ traiter_action("wait_event", JSON, _) -> % un utilisateur envoie un message traiter_action("put_message", JSON, _) -> euphorik_protocole:put_message(JSON); +% un ekMaster bannie un utilisateur (ip) traiter_action("ban", JSON, _) -> euphorik_protocole:ban(JSON); +% un ekMaster slap un utilisateur traiter_action("slap", JSON, _) -> euphorik_protocole:slap(JSON); +% un ekMaster envoie un nouveau troll traiter_action("put_troll", JSON, _) -> euphorik_protocole:put_troll(JSON); +% un ekMaster modifie un troll traiter_action("mod_troll", JSON, _) -> euphorik_protocole:mod_troll(JSON); +% un ekMaster supprime un troll traiter_action("del_troll", JSON, _) -> euphorik_protocole:del_troll(JSON); +% un ekMaster demande la liste des ips bannies traiter_action("list_banned_ips", JSON, _) -> euphorik_protocole:list_banned_ips(JSON); +% un ekMaster débannie une ip traiter_action("unban", JSON, _) -> euphorik_protocole:unban_ip(JSON). \ No newline at end of file diff --git a/tools/tools.rb b/tools/tools.rb index 644c825..75d3602 100644 --- a/tools/tools.rb +++ b/tools/tools.rb @@ -19,20 +19,16 @@ along with Euphorik. If not, see . =end #TODO : -# - mettre à jour les numéros de versions en appelant le script "cope_num_version.rb" -# - création de unit tests (voir eunit) et validation avant la mise en prod - -# Utilisation : -# tools.rb -# commandes : -# +# - mettre à jour les numéros de versions (créer une classe) +# - création de unit tests (voir eunit) et validation avant la mise en prod +# - faire une classe qui vérifie tous les js avec jslint class MiseEnProd @@rep_remote = '/var/www/euphorik' @@host = 'euphorik.ch' @@opt_rsync = '' - def initialize + def initialize end def creer_remote_rep(rep) @@ -60,19 +56,12 @@ class MiseEnProd end # css, images, html, etc.. - def copier_partie_statique - copier_fichier_html("index.yaws") - - ####print `rsync #{$opt_rsync} index.yaws #{$host}:#{$rep_remote}` - #print `rsync #{$opt_rsync} favicon.ico #{$host}:#{$rep_remote}` - #print `rsync #{$opt_rsync} -r css #{$host}:#{$rep_remote}` - #print `rsync #{$opt_rsync} -r pages #{$host}:#{$rep_remote}` - #print `rsync #{$opt_rsync} -r --exclude 'autres' img #{$host}:#{$rep_remote}` - end - - # Copie un fichier html, enlève les balises qui ont comme attribut : prod="delete" - def copier_fichier_htm(fichier) - + def copier_partie_statique + print `rsync #{$opt_rsync} index.yaws #{$host}:#{$rep_remote}` + print `rsync #{$opt_rsync} favicon.ico #{$host}:#{$rep_remote}` + print `rsync #{$opt_rsync} -r css #{$host}:#{$rep_remote}` + print `rsync #{$opt_rsync} -r pages #{$host}:#{$rep_remote}` + print `rsync #{$opt_rsync} -r --exclude 'autres' img #{$host}:#{$rep_remote}` end # contrôle des fichiers js à l'aide de jslint -- 2.45.2