Édition : Mot de passe pour l'édition

Par Omanu le 13.11.2012
ChuWiki 2.0

table des matières

Protéger les pages d'édition par mot de passe

Grâce à quelques modifications il est possible d'empêcher l'accès aux pages d'édition mais de permettre à une personne ayant connaissance du "mot de passe" d'y accéder.
Pour cela les pages suivantes vont être légèrement modifiées:

et une nouvelle page /logout.php devra être créée.

index.php: système d'identification

Dans un premier temps nous allons mettre en place un petit système d'identification, En fait quand un utilisateur voudra s'identifier il devra passer un mot de passe par la barre d'adresse du navigateur à l'intention de la page index.php (une simple variable $_GET en fait), si c'est la bonne variable (le bon mot de passe quoi) la page index va créer une variable de session. Ainsi il sera possible de demander à toutes les pages à protéger de vérifier si cette variable de session existe et selon d'afficher ou non les pages de modification.

Ouvrez la page index.php avec un éditeur de texte (pas Word hein!).
Juste après la première ligne (<?php) ajoutez ceci:

session_start();
if(isset($_GET['password'])) $_SESSION['admin'] = ' ';

Le mot "password" c'est le mot de passe, remplacez celui-ci par celui de votre choix mais veillez bien à n'utilisez que des caractères alphanumériques et pas d'espace

On pourrait bien sûr faire beaucoup plus chiadé mais c'est amplement suffisant et sécurisé pour ce que l'on souhaite faire

theme.php: cacher les boutons

Maintenant l'objectif va être de masquer les boutons "Éditer cette page" et "Historique de la page" afin que seuls les personnes autorisées puissent y avoir accès. Pour cela nous allons placer une condition qui vérifiera si une variable de session "admin" existe et auquel cas afficher ou non ces deux boutons.

Ouvrez la page theme.php avec un éditeur de texte (pas Word hein!).
Juste après la ligne 1 (<?php) il faut activer le mode session comme ceci:

<?php
session_start();

Plus bas repérez la dernière fonction "function EndDocument($strMode){ ... }"
Juste après la ligne:

WriteLine('<ul id="Utils">');

ouvrez la condition suivante:

if(isset($_SESSION['admin']))
{

et juste avant la ligne:

WriteLine('	<li><form id="Search" action="&Config.WikiURI;&Lang.SearchPage;" method="post"><p> ... </p></form></li>');

fermez la condition

}

A ce stade la fonction "EndDocument" devrait ressembler à ceci:

function EndDocument($strMode)
{
	WriteLine('<hr id="UtilsSeparator"/>');
	WriteLine('<ul id="Utils">');
	if(isset($_SESSION['admin']))// si admin connecté on affiche les boutons de modification
	{
		$jbvg
		if( $strMode == 'edit' )
		{
			WriteLine($strBackLine);
		}
		else
		{
			WriteLine('	<li><a href="&Config.EditURI;&Page.Name;#Wiki">&Lang.Edit;</a></li>');
		}

		if( $strMode == 'history' )
		{
			WriteLine($strBackLine);
		}
		else
		{
			WriteLine('	<li><a href="&Config.HistoryURI;&Page.Name;">&Lang.History;</a></li>');
		}
	}
	WriteLine('	<li><form id="Search" action="&Config.WikiURI;&Lang.SearchPage;" method="post"><p><input type="text" name="Search"/><input type="submit" class="Button"  value="&Lang.SearchPage;"/></p></form></li>');

	WriteLine('</ul>');
	WriteLine('');
	WriteLine('</body>');
	WriteLine('</html>');
}

Désormais et si vous accédez à votre wiki les boutons n'apparaitront plus mais toutefois les pages de modifications restent accessibles, nous allons donc répéter cette opération pour les pages edit.php et history.php

edit.php: empêcher l'édition

La encore ouvrez cette page avec un editeur de texte.
Juste après la ligne:

require('theme.php');

Ouvrez la condition (on teste si la variable de session existe)

if(isset($_SESSION['admin']))
{

Enfin tout à la fin du document ajoutez ceci:

<?php
}
else echo 'Acces priv&eacute;';

history.php: empêcher la modification de l'historique

Faites exactement la même chose que pour edit.php

logout.php: se déconnecter

La page logout.php n'existe pas avec ChuWiki, il va donc falloir la créer à la racine de votre wiki(même niveau que les pages index.php et configuration.ini).
Cette page servira à vous "délogger".

Ouvrez un éditeur de texte et après avoir ajouté le code ci dessous enregistrez la page sous le nom logout.php.

<?php
session_start();
session_destroy();
header('Location: ./');

theme.php: afficher un lien de déconnexion

Voila il ne nous reste plus qu'à ajouter un lien vers la page logout.
Nous allons faire apparaitre ce lien en bas du premier menu juste en dessous de "toutes les pages".

Ouvrez une nouvelle fois votre pages theme.php avec un éditeur de texte.
Repérez la fonction "function WriteMenu(){ ... }" puis juste en dessous de la ligne:

WriteLine('<li><a href="&Config.WikiURI;&Lang.ListPage;">&Lang.ListPage;</a></li>');

ajoutez ceci:

if(isset($_SESSION['admin'])) WriteLine('<li><a href="../logout.php" class="logout">Se d&eacute;connecter</a></li>');

se connecter

Supposons que votre wiki est hébergé sur votre domaine: "http://toto.com" dans un répertoire nommé "monwiki".
Quand vous souhaitez vous y rendre vous entrez donc cette adresse dans votre navigateur:

http://www.toto.com/monwiki/

désormais quand vous souhaiterez modifier votre wiki vous devrez entrer le mot de passe ainsi:

http://www.toto.com/monwiki/?password

N'oubliez pas le point interrogation.

Règles de formatage

_texte_
Faire une emphase (italique)
__texte__
Faire une emphase forte (gras)
@@texte@@
Faire un petit code
''texte|langue|source''
Faire une petite citation
>texte
Faire un paragraphe de citation
[texte|URI|langue|titre]
Faire un lien vers une page, les paramètres sont optionnels
((image|texte alternatif|alignement))
Ajouter une image, alignement peut valoir G(auche), D(roite) ou C(entre)
texte
Tout texte écrit simplement sera transformé en paragraphes.
!titre1, !!titre2, !!!titre3, etc.
Créer un titre d'un niveau égal au nombre de !
-texte ou *texte
Faire une liste d'éléments non numérotés
#texte
Faire une liste d'éléments numérotés
;titre:définition
Faire une définition/liste de définitions
??acronyme|titre??
Faire un acronyme
[ESPACE]texte ou {{{texte}}}
Le texte sera préformaté, utile pour écrire des bouts de code
==== ou ---- (au moins 4)
Une ligne de séparation horizontale
\
Si vous ne voulez pas que la syntaxe wiki s'applique, faites précéder les caractères spéciaux par des anti-slashs.