Le principal but de YooGoo est d'accueillir ses
utilisateurs sur des canaux. Un canal peut aussi être
appelé Chatroom ou salon. Un salon est un "lieu" (ici,
virtuel) où les utilisateurs discutent entre eux. Chaque
phrase de chaque utilisateur est retransmise à tous les
autres utilisateurs connectés sur le même salon.
Un canal correspond en gros à une liste d'utilisateurs.
Effectivement, toutes les fonctions basiques d'un canal
peuvent se faire sur une liste. Lorsqu'un utilisateur
envoie un message à un canal (MSGCHAN CANAL
MESSAGE), on envoie un message à chaque utilisateur
de la liste. Le message renvoyé a la structure suivante:
msgChan Canal Pseudo_de_l_expéditeur Message
Lorsqu'un utilisateur arrive ou part du canal, un
message informe les autres utilisateurs de l'évènement. Lorsqu'un
utilisateur essaye de joindre un canal qui n'existe pas celui-ci
est automatiquement créé. De même, lorsque le dernier utilisateur
d'un canal s'en va, ce dernier est automatiquement détruit. Ceci
pourra être modifié en changeant l'option
KEEP que nous verrons plus loin.
L'utilisateur aura aussi besoin de savoir qui est connecté
avec lui sur le canal. La fonction GETCONNECTED
renvoie la liste des utilisateurs d'un canal. Pour cette
fonction, nous utilisons la méthodes des RPL_ ...
RPL_END. Un message RPL_GETCONNECTED
est envoyé pour chaque utilisateur. La fin de la liste est
signalée par le message RPL_ENDGETCONNECTEDS.
GETCONNECTEDS renvoie aussi le statut et le grade
des utilisateurs. Nous verrons tout a l'heure la hiérarchie
sur les canaux. Ces information seront utiles au client
pour faire la liste
des connectés.
Par exemple :
<- getconnecteds Epita
-> Rpl_GetConnecteds Epita Danao ONLINE ChanRoot
-> Rpl_GetConnecteds Epita Zapata AWAY User
-> Rpl_GetConnecteds Epita Folken DND User
-> Rpl_GetConnecteds Epita Hargos ONLINE Op
-> Rpl_EndGetConnecteds
-> 0 Inf_Ok
Les fonctions précédentes permettent d'avoir un canal de base.
YooGoo permet une gestion avancée des canaux en ajoutant des
droits à certains utilisateurs. Pour un utilisateur novice, cette
partie administrative est totalement transparente. Son client lui
affiche la liste des canaux, il fait un double click sur l'un
d'entre eux pour le joindre puis, il peut discuter. Il existe
quatre grades sur YooGoo. Tout d'abord l'utilisateur normal sans
droit particulier. Il peut créer un canal (c'est-à-dire joindre un
canal qui n'éxiste pas). A ce moment, il est considèré fondateur
du canal et obtient tous les droits sur le canal. Il peut nommer
une autre personne comme fondateur du canal pour par exemple
l'administrer à deux ou bien avoir un utilisateur avec pouvoir de
secours en cas de problème. Ces utilisateurs sont appelés
ChanRoots. Il est possible sur des gros canaux d'avoir besoin de
sous fifres pour gérer le canal. Mais, il peut être dangereux de
leurs donner tous les droits. Ces utilisateur, avec des droits
moins importants que le ChanRoot, sont des Opérateurs (on dira
"Op" (prononcer Opé) dans la pratique). Chanroot peut décider des
droits des Op. Enfin, tout en haut de l'échelle se trouve Root,
c'est à dire l'administrateur du serveur. Il a le droits de tout
faire, il n'a aucune barrière. Nous parlerons plus longuement de
ses fonctions dans la partie "Fonctions d'administrations".
Signalons enfin, qu'un utilisateur peut être banni d'un canal.
Lorsqu'un utilisateur se joint à un canal, on vérifie tout d'abord
qu'il n'est pas banni, si c'est le cas, sa demande est refusée et
il ne peut joindre le canal.
Pour savoir quel grade a chaque utilisateur sur un canal, nous
utilisons trois listes de pseudonymes (ou NickName, en anglais).
Vu que les pseudo(nymes) sont protégés par mot de passe, on est
sûr de l'identité d'un utilisateur. Il n'est donc pas possible de
devenir ChanRoot sur un canal en usurpant l'identité de celui-ci.
Les fonctions suivantes permettent l'ajout et la suppression dans
les listes des ChanRoot/Op/bannis :
- CHANROOT CANAL PSEUDO (nomme un ChanRoot)
- DECHANROOT CANAL PSEUDO (supprime un utilisateur de la liste des ChanRoot)
- OP CANAL PSEUDO (nomme un Op)
- DEOP CANAL PSEUDO (supprime un utilisateur de la liste des Op)
- BAN CANAL PSEUDO (bannit un utilisateur)
- DEBAN CANAL PSEUDO (supprime un utilisateur de la liste des
Bannis)
Pour gérer les droit des op, nous utilisons donc un entier où
chaque bit correspond à une fonction que les op peuvent utiliser.
Si le bit est à 0, ils n'y ont pas accès, sinon, ils peuvent
utiliser la commande. ChanRoot a accès à la commande CHMOD
CANAL COMMANDE {ONOFF} qui permet aux ops
d'utiliser ou non
Commande
. La fonction CHMOD
utilise un masque de bit pour mettre à jour la variable Droit. Si
ChanRoot décide de mettre toutes les commandes sur OFF, l'OP n'a
alors pas plus de droits d'un utilisateur normal. Si ChanRoot
décide de mettre toutes les commandes sur ON, les OP ont alors
presque autant de pouvoir que lui. Lors de la création du canal,
les Ops ont par défaut tous les droits. Tous les champs sont donc
à 1. Les seules commandes qui ne peuvent jamais devenir accessible
aux OP sont CHANROOT (Nommer un ChanRoot),
DECHANROOT (supprimer un utilisateur de la liste des
ChanRoot), CHMOD (Modifier les droits des Ops) et
CHKEEP et CHPRIV (que nous verrons plus bas).
Ainsi, pour chaque commande d'administration du serveur, on
vérifie que le demandeur
est ChanRoot OU (Op ET A_le_Droit).
Voici un exemple de ce qui peut se passer sur un canal Epita où
Hargos est ChanRoot, Danao est Op et Lamer est un utilisateur
normal:
Hargos -> ChMod Epita Ban OFF
Hargos <- Inf_Ok
**** Si l'op n'a pas le droit de bannir ***
Danao -> ban Epita Lamer
Danao <- Err_Privileges
*** On modifie la variable Droit ***
Hargos -> ChMod Epita Ban On
Hargos <- Inf_Ok
*** Ca marche ***
Danao -> ban Epita Lamer
*** Tout le canal est averti de l'évènement ***
Danao <- ban Danao Epita Lamer
Hargos <- ban Danao Epita Lamer
Lamer <- ban Danao Epita Lamer
Danao <- Inf_Ok
Aux fonctions permettant de gérer la hiérarchie sur le
canal s'ajoute les fonctions permettant de gérer les petits
détails du canal. Tout d'abord, la fonction KICK
CANAL NICK. Quand un utilisateur ne respecte
pas les règles sur un canal, un op peut décider de "kicker"
celui ci, c'est-à-dire, le forcer à partir du canal. Ceci
n'empêchera pas l'utilisateur de revenir tout de suite
après, mais, elle sert d'avertissement au bannissement
(généralement accompagné d'un kick). Un canal possède aussi
des champs pour le nom du canal, son sujet, son mot de
passe et sa catégorie. Ces champs peuvent être
respectivement modifiées par CHCHANNAME,
CHCHANTOPIC, CHCHANPASS et
CHCHANCAT. Le sujet permet de donner un aperçu du
sujet de discussion du canal. Le mot de passe empêche de
joindre le canal si on ne le possède pas. Si la variable
est vide, cela signifie qu'il n'y a pas de mot passe.
Lorsqu'un utilisateur joint un canal protégé par mot de
passe, il doit passer celui-ci en paramètre de la commande
Join. On compare ce mot de passe avec celui du canal. S'ils
sont différents, l'accès est refusé. Enfin, à la catégorie
correspond un nombre qui permet de savoir sur quel sujet
est le canal (A la manière catégories Yahoo : Informatique,
Voyage, Informations, etc...)
Toutes ces informations peuvent être récupérées grâce à la
commande WHAT CANAL. Cette commande renvoie
diverses info sur le canal sous la forme suivante:
RPL_WHAT NOM SUJET DROITS_DES_OP CATEGORIE
NOMBRE_DE_CONNECTES NOMBRE_D'OP
NOMBRE_DE_CHANROOT NOMBRE_DE_BANNIS.
Un utilisateur peut aussi recevoir la liste des ChanRoot/Op/bannis
du canal grâce aux commande GETCHANROOTS,
GETOPS, GETBANS. Ces commandes renvoient une
liste de nom de la même façon que GETCONNECTEDS. C'est à
dire RPL_GETOPS... RPL_ENDGETOPS... etc
Enfin, pour que les utilisateurs puissent parfaitement utiliser
les canaux, il faut une commande permettant de donner la liste de
ceux-ci. GETCHANS effectue cette tâche. Le message
renvoyé est basé sur le même modèle que GETCONNECTED,
GETBANS, etc...
Au début de cette partie, nous avons dit que lorsque le dernier
connecté sur un canal s'en allait, le canal était détruit. La
variable Droits possède un bit supplémentaire permettant
d'empêcher cela lorsque ce bit est à 1. CHKEEP permet de
modifier la valeur de ce bit. CHKEEP n'est utilisable que
pas ChanRoot. Ainsi, lorsque le dernier utilisateur s'en va, le
canal et toute sa configuration sont conservés.
Nous savons qu'il existe deux sortes d'utilisateurs dans YooGoo,
les enregistrés et les non-enregistrés. De plus les diverses
listes utilisées pour l'administration d'un canal sauvegardent les
noms des utilisateurs. Ces raisons font qu'un administrateur de
canal peut désirer qu'il n'y ait que des utilisateurs enregistrés
sur son canal. Pour cela il existe un fanion PRIVÉ.
Celui-ci fonctionne comme le fanion KEEP. Il n'est
utilisable que par le ChanRoot. Une fois activé, seuls les
utilisateurs enregistrés pourront joindre le canal.
Nous avons vu qu'il est possible de protéger l'accès à un
canal par un mot de passe. Ainsi pour permettre à quelqu'un
de rejoindre le canal il faut lui donner le mot de passe.
Mais cette méthode peut être dangereuse, le mot de passe
peut rapidement tomber entre de mauvaises mains. Les ops et
chanroot ont alors une autre méthode pour permettre à un
utilisateur lambda d'accéder au canal : ils peuvent
l'inviter. La commande INVITE USER et
DEINVITE USER permet la gestion des invités.
Ces fonctions marchent comme les OP/DEOP,
grâce à une liste. Lorsqu'un utilisateur essaye de joindre
un canal qui est protégé par un mot de passe on regarde
s'il est invité. Si oui, on le supprime de la liste
d'invité et il peut rejoindre le canal. Ainsi une
invitation n'est valable qu'une fois. De plus la liste
d'invité n'est pas sauvegardée. Ces deux points peuvent
sembler fastidieux mais permettent aux ops d'avoir un
maximum de contrôle des allées et venues dans leur canal.