Plugin Private Mode : cool URI doesn't change

J’ai été amené récemment à protéger l’accès d’un blog Dotclear 2 à l’aide du plugin Private Mode développé par Osku. Ce plugin, une fois paramétré, protège tous les accès aux différentes parties du blog par un mot de passe sauf l’accès aux flux RSS générés. Pour ces derniers, une nouvelle URL fabriquée à partir du mot de passe est générée, ce qui rend inutilisable les URL standards de type http://www.domaine.tld/feed/rss2 et http://www.domaine.tld/feed/atom, ces dernières ne renvoyant plus qu’une page vide.

Le problème se pose alors pour les blogs ayant déjà des abonnés aux anciens flux. Comment leur signaler la mise en place de la protection puisque vu d’un lecteur de flux RSS, ces derniers paraissent ne plus avoir changé du tout ? Ce qu’il faudrait dans l’idéal serait de fournir un flux RSS statique indiquant qu’il y a dorénavant une protection.

J’ai un peu fouillé le code du plugin, ouvert un ticket pour demander la prise en charge des anciennes URL des flux et en attendant j’ai choisi une autre solution que je vais détailler ici.

Un prérequis que je pense obligatoire — mais je serai peut-être détrompé par quelqu’un — est qu’il faut avoir fait le nécessaire pour supprimer la mention index.php des URLs du blog. Un simple fichier .htaccess suffit à faire cela :

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1
RewriteRule ^index.php$  index.php/

À défaut les URLs originales des flux seraient http://www.domaine.tld/index.php/feed/rss2 et http://www.domaine.tld/index.php/feed/atom ce qui rend impossible la technique que j’ai utilisée.

Ensuite j’ai simplement utilisé le fait qu’Apache (et probablement les autres serveurs web) teste la présence d’un fichier .html ou .php dans un répertoire donné avant tout. Donc si je crée un fichier rss2.php et un fichier atom.php dans un répertoire feed, Apache doit alors les servir lorsqu’un abonné relève respectivement le flux RSS ou ATOM.

Il suffit ensuite que ces fichiers rss2.php et atom.php génèrent un simple flux statique pour prévenir le lecteur du changement. J’ai simplement repris le code source des flux générés par Dotclear, leur ai enlevé toute la partie contenant les billets en n’en laissant qu’un seul qui me servira alors de message et c’est ce flux simplifié que je renvoie.

Voilà le code du fichier rss2.php :

<?php

header('Content-Type: application/xml; charset=UTF-8');

echo <<<EOD
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.domaine.tld/feed/rss2/xslt" ?>
<rss version="2.0"
	  xmlns:dc="http://purl.org/dc/elements/1.1/"
	  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	  xmlns:content="http://purl.org/rss/1.0/modules/content/"
	  xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
	  <title>Mon blog</title>
	  <link>http://www.domaine.tld/</link>
	  <atom:link href="http://www.domaine.tld/feed/rss2" rel="self" type="application/rss+xml"/>
	  <description>Mon petit blog à moi que j'ai</description>
	  <language>fr</language>
	  <pubDate>Wed, 08 Apr 2009 00:00:00 +0200</pubDate>

	  <copyright>© Moi-même</copyright>
	  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
	  <generator>Dotclear</generator>


	  <item>
	    <title>Private</title>
	    <link>http://www.domaine.tld/</link>

	    <guid isPermaLink="false">urn:md5:300df4c42465ce245ac2a02e5ee91a33</guid>
	    <pubDate>Wed, 08 Apr 2009 00:00:00 +0200</pubDate>
	    <dc:creator>Moi-même</dc:creator>
	    <description>    &lt;p&gt;Vous avez besoin du mot de passe pour accéder au blog et pour obtenir les nouvelles URL des flux RSS. Si vous ne le possédez pas vous pouvez en faire une demande à l'adresse suivante moi chez domaine.tld (en remplaçant chez par @ et en enlevant les espaces).&lt;/p&gt;</description>

	      </item>
	</channel>
	</rss>
EOD;

?>

Et voilà celui de atom.php qui lui ressemble comme deux gouttes d’eau ou presque :

<?php

header('Content-Type: application/atom+xml; charset=UTF-8');

echo <<<EOD
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xml:lang="fr">
  
  <title type="html">Mon blog</title>
  <subtitle type="html">Mon petit blog à moi que j'ai</subtitle>
  <link href="http://www.domaine.tld/feed/atom" rel="self" type="application/atom+xml"/>
  <link href="http://www.domaine.tld/" rel="alternate" type="text/html"
  title="Mon petit blog à moi que j'ai"/>
  <updated>2009-04-07T21:18:28+02:00</updated>
  <author>
    <name>Moi-même</name>
  </author>
  <id>urn:md5:e4c6ee9633392036a90c1798a6942634</id>
  <generator uri="http://www.dotclear.net/">Dotclear</generator>
  
    
  <entry>
    <title>Private</title>
    <link href="http://www.domaine.tld/" rel="alternate" type="text/html"
    title="Private" />
    <id>urn:md5:300df4c42465ce245ac2a02e5ee91a32</id>
    <updated>2009-04-08T00:00:00+02:00</updated>
    <author><name>Moi-même</name></author>
    <content type="html">    &lt;p&gt;Vous avez besoin du mot de passe pour accéder au blog et pour obtenir les nouvelles URL des flux RSS. Si vous ne le possédez pas vous pouvez en faire une demande à l'adresse suivante moi chez domaine.tld (en remplaçant chez par @ et en enlevant les espaces).&lt;/p&gt;
</content>
	</entry>
    
</feed>
EOD;

?>

Voilà qui permet de s’assurer que Cool URI doesn’t change ;-)

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/3212

Haut de page