|
[Update: Leider funktioniert das Folgende nur bis Joomla 1.0.12, da in Joomla 1.0.13 das Format der Passwortspeicherung geändert wurde. Sobald ich eine Lösung gefunden habe, werde ich die neue Bridge hier posten.] Schon seit längerem habe ich openWiki für Joomla verwendet. Leider wird openWiki seit einiger Zeit nicht mehr für Joomla weiter entwickelt. OpenWiki ist eine Implementierung von DokuWiki. Damit ich auch in Zukunft von neuen Versionen von DokuWiki profitiere und bestehende Sicherheitslücken geschlossen werden, habe ich mich entschieden, DokuWiki in der "Vollversion" zu verwenden. Dazu habe ich einfach das Verzeichnis data/pages/ in mein neues DokuWiki kopiert. Das Ganze funktioniert auch von Anfang an Reibungslos. Allerdings hatte ich nun das Problem, dass ich nicht mehr die gleichen Benutzer verwenden konnte. Um dieses Problem zu umgehen habe ich ein kleines Skript geschrieben. Dieses liest jeweils alle Benutzer aus der Joomla Datenbank und erstellt damit die Benutzerdatei von DokuWiki. Den folgenden Quellcode habe ich in einer Daite updateUsers.php im Verzeichnis /dokuwik/ abgespeichert. Auf dem Root-Verzeichnis befindet sich die Joomla Installation. Die Datei sieht folgendermassen aus:
<?php
updateUserFile();
function updateUserFile() {
include_once("../configuration.php");
$conn =
mysql_connect($mosConfig_host,$mosConfig_user,$mosConfig_password);
$db =
mysql_select_db($mosConfig_db,$conn);
$sql =
"SELECT username,password,name,email FROM jos_users";
$query =
mysql_query($sql);
$date =
date("d.m.Y-H:i");
$string =
<<<EOD
#joomla user file
#@author ruflin -> http://ruflin.com/
#date: $date \n
EOD;
while($res = mysql_fetch_array($query)) {
if($res['username'] == "admin") {
$groups = "admin,user";
}
else {
$groups = "user";
}
$string .=
$res['username'].":".$res['password'].":".$res['name'].":".$res['email'].":".$groups."\n";
}
file_put_contents("./conf/users.auth.php",$string);
echo
"success";
}
?>
Damit die Benutzerdatei von DokuWiki aktuell bleibt, habe ich ein kleines Cron-Script auf meinem Server erstellt, welches stündlich ausgeführt wird. Der Befehl lautet folgendermassen:
curl http://sportstudis.ch/dokuwiki/updateUsers.php
Damit die Benutzer nicht auf die Idee kommen, im Wiki Ihr Profil zu verändern, habe ich in /dokuwiki/lib/tpl/default/main.php folgende Zeile entfernt:
<?php tpl_button('profile')?>
Bevor Sie die Datei auf Ihrem Server testen machen Sie umbedingt ein Backup der Datei /dokuwiki/conf/user.auth.php. Diese Datei wird anschliessend überschrieben. Das Skript geht davon aus, dass in Joomla und im DokuWiki der Administrator Benutzer admin heisst.
Hier können Sie die Datei auch direkt als Text-Datei herunterladen, die Endung .txt durch .php ersetzen und auf Ihrem Server verwenden.
In Zukunft werde ich das Skript noch ein wenig weiter verfeinern, damit ev. auch Benutzergruppen aus der Joomla-Datenbank gelesen werden können. Ein weiteres Problem zur Zeit ist, dass auch Benutzer übernommen werden, welche sich selbst noch nicht aktiviert haben.
Zuerst habe ich versucht, Änderungen direkt an der Funktion _loadUserData in der Datei inc/auth/plain.class.php vorzunehmen. Dies hat eigentlich auch funktioniert, doch anscheinend einige Probleme mit den Cookies verursacht. Der Benutzer war jeweils nur für 1-2 Klicks eingeloggt.
{moscomment}
|