Skip to content

Serendipity für Geschlossene Gesellschaften

Ein Bekannter bat mich darum, eine Site für ihn und seine Familie hoch zu ziehen. Die Familie ist mittlerweile über die ganze Welt verstreut, somit macht so ein virtueller Treffpunkt durchaus Sinn. Aktuelles Hauptziel war erst einmal, ein Familientreffen zu planen. Die Vorgaben:

  1. Alle Mitglieder sollten News untereinander austauschen können
  2. Sie sollten irgendwie miteinander auf der Seite kommunizieren können
  3. Bilder zeigen sollte möglich sein
  4. All das sollte global mit einem Passwortschutz belegt sein, so dass nur Familienmitglieder die Site sehen können

Es gibt mehrere Möglichkeiten, das zu realisieren, mir kam natürlich gleich ein aufgebohrtes Serendipity in den Sinn. Am letzten Wochenende setzte ich mich dran.

Von meiner Firma kannte ich bereits, dass man das Serendipity Login auch über HTTP Authentifizierung mittels eines zugeschalteten Plugins realisieren kann, das schaute ich mir also als erstes an. Die ganze Domain wurde durch mehrere HTTP Auth Zugänge verschlossen. Danach wurde das HTTP-Authentication Plugin für Serendipity installiert.

Das HTTP-Authentication Plugin

Warum überhaupt so ein Plugin? Wenn die ganze Site sowieso schon mit einem Passwort Schutz belegt ist, dann will man sich nicht noch zusätzlich im Blog anmelden müssen, um Artikel zu verfassen. Das HTTP Auth Plugin erledigt genau das: Es liest den Namen, mit dem sich extern eingeloggt wurde, und matcht ihn auf einen Login Namen in Serendipity. Der Benutzer wird so nicht nur am Server eingeloggt sondern gleich mit in Serendipity. Man muss also einfach die Benutzer in Serendipity genau mit den Namen benennen, für die man HTTP Authentifizierungsaccounts eingerichtet hat. Diese kann man dann in Serendipity wie gewohnt konfigurieren. Klickt der Benutzer dann auf die Admin Oberfläche, so sieht er sie sofort, ohne sich noch einmal einloggen zu müssen und zwar unter dem passenden Account.

Auf diese Weise habe ich einen Familien Acount angelegt, der in die Gruppe Redakteur fällt, und einen Admin Account, der alles darf. Die Familienmitglieder sehen so in der Adminoberfläche nur das, was für sie wichtig ist, und werden nicht mit überbordenden Optionen im Interface überfordert. Man kann natürlich beliebig viele Accounts auf diese Weise anlegen, z.B. für jedes Familienmitglied einen eigenen, damit man sie auch als Artikelschreiber unterscheiden kann, aber der Bekannte meinte, eines für alle reiche erst einmal.

HTTP Authentifizierung als übergreifendes Login

Etwas später fiel mir auf, dass dieses einen weiteren sehr interessanten Vorteil mit sich bringt: Wenn andere Software den gleichen Mechanismus ausnutzt, dann kann man diese mit Serendipity zusammen benutzen und ist dort auch gleich automatisch eingeloggt. Eine solche Software habe ich über das Plugin "Gallery2 Embed (gallery2)" gefunden. Dieses Plugin bindet die Software Gallery2 in Serendipity ein, so dass sie wie ein Teil des Blogs aussieht.

Gallery2 kennt auch Benutzer und Zugriffsrechte. Das beste in dem Zusammenhang: Auch Gallery2 hat ein HTTP Authentifizierungsplugin! Hier kann man also das selbe Vorgehen wählen: Man legt auch hier noch einmal die selben Benutzer an, die man in Serendipity und als HTTP Auth Accounts eingerichtet hat. Auf diese Weise ist der Benutzer also durch das Login am Start gleich in beiden Anwendungen eingeloggt und durch das Gallery2 Embed Plugin wirken Serendipity und Gallery wie eine Applikation mit nur einer Benutzer Datenbank. Ziemlich genial!

 

Gallery2 in Serendipity eingebunden

 

Auf diese Weise könnte man also noch weitere Webapplikationen einbinden, so lange sie ebenfalls die HTTP Authentifizierung unterstützen. Nachteil dabei ist nur, dass man neue Accounts immer mehrmals anlegen muss. Das ist vielleicht nicht ganz so problematisch, da diese ja nur einmal angelegt werden müssen. Das HTTP Auth Plugin von Serendipity bietet hier noch einen zusätzlichen Komfort: Es kann ihm unbekannte Benutzer Namen auf einen allgemeinen Serendipity Account mappen. Somit kann man Benutzer, die in anderen Anwendungen aber nicht in Serendipity unterschieden werden müssen, auf einen gemeinsamen Serendipity Account vereinen und muss diese Nutzer nur noch als HTTP Auth und für die anderen Anwendungen anlegen.

Nun wäre interessant, ob es noch weitere Web Applikationen gibt, die dieses HTTP Auth Mapping unterstützen, und ob man diese auch so einfach in Serendipity einbinden kann.

Auf diese Weise wurden nun alle Punkte bis auf Punkt 2 ziemlich smart unter einen Hut gebracht. Punkt 2, die Kommunikation, funktioniert natürlich eigentlich schon: Über die Artikel und Kommentare auf selbige. Kommentare sind unabhängig vom Login, hier können die einzelnen Familienmitglieder auch gut unterschieden werden. Es gibt aber noch weitere Plugins, die ich für diese Site passend fand.

Das Shoutbox Plugin

Mit dem Shoutbox Plugin erhält man in der Seitenleiste so zu sagen einen permanenten Chat. Besucher der Webseite können hier kleine Mitteilungen hinterlassen, von denen die letzten X auf der Seite dargestellt werden. In einem normalen Blog machte dieses Plugin für mich bisher keinen Sinn, da ich nicht möchte, dass beliebige Besucher (ob nun reale oder Bots, jedenfalls keine eingeloggten oder identifizierbaren) beliebige Nachrichten unmoderiert auf meiner Blog Seite hinterlassen können.

In dem aktuellen Umfeld macht dieses Plugin aber auf einmal Sinn, denn die Seite ist komplett Passwort gesichert, "Besucher" der Seite haben sich vorher authentifiziert und sind also Familienmitglieder. Diese können sich nun gegenseitig kleine Nachrichten hinterlassen, was sicherlich Spaß macht und sinnvoll ist.

Termine

Eines der Ziele der Site ist, ein Familien Treffen darüber zu organisieren. Dafür und für den Überblick in der Familie allgemein macht es Sinn, Termine innerhalb der Familie auf einen Blick sehen zu können. Dafür gibt es das Plugin "MyCalendar". Es besteht aus einem Haupt- und einem Seitenleisten Plugin. Das Hauptplugin erzeugt in der Administrationsoberfläche einen neuen Menü Eintrag "Mein Kalender". In diesem kann man nun Termine eintragen. Die Termindatenbank wird über alle registrierten Benutzer des Serendipity Blogs geteilt, Termine sind also nicht einer Person zugeordnet sondern werden "global" bewertet. Man muss sie also entsprechend benennen.

Diese Termine werden mit dem Seitenleisten Plugin auf der Webseite in einer Liste dargestellt. Hat man außerdem noch das Kalender Plugin, das mit Serendipity mitgeliefert wird, installiert, und hat man dort eingestellt, dass andere Plugins auf dieses zugreifen dürfen ("Plugin-Schnittstelle aktivieren"), so markiert das MyCalendar Plugin die Termine auch noch farblich im Kalender Plugin. Fährt man mit der Maus über diese Markierungen, so bekommt man auch eine Info, was an diesen Tagen an Terminen eingetragen ist.

MyCalendar könnte noch ein wenig ausgebaut werden, teilweise habe ich das sogar schon gemacht. Die Optik des Seitenleisten Plugins gefällt mir noch nicht so recht, Beschreibungen der Termine finden dort z.B. nur Eingang, wenn die Termine einen Link haben (dann sieht man die Beschreibungen, wenn man mit der Maus über den Link fährt). Mal schauen, evtl. baue ich hier noch ein wenig etwas dran, wenn ich Zeit habe.

Weiteres?

Ich finde diese Zusammenstellung inzwischen schon recht gelungen für die Aufgabenstellung. Da "das Blog" nicht allgemein im Internet zu sehen ist, würden mir spontan noch einige weitere Sachen einfallen, die man realisieren könnte. Die unten genannten würde ich sonst aus Datenschutz Bedenken nie in einem normalen Blog haben wollen:

  • Adressen / Telefonnummern der Familienmitglieder. Am besten auf einer separaten Seite, evtl. über eine Static Page eingebunden?
  • Aktueller Aufenthaltsort der Mitglieder in Google Maps dargestellt. Nun ja.. Zukunftsmusik, aber aktuelle Handies haben oft GPS und Internetverbindung. Darüber könnte man sich so etwas vorstellen.

Falls ihr noch Tipps habt, was auf so einer geschützten Familien Seite noch eingebaut werden könnte, das Sinn macht, freue ich mich über Kommentare. Die Aufgabenstellung sollte nun klar geworden sein.

Probleme

Probleme sollen hier nicht verschwiegen werden. Diese finden sich vor allem im HTTP Auth Plugin im Zusammenspiel mit Serendipity. Wenn man sich nun in der Admiministrationsoberfläche abmeldet, ist man nicht wirklich abgemeldet. Die HTTP Auth Session wird dadurch nicht zerstört. Dass dies möglich wäre, kann man in der Gallery2 sehen. Wenn man sich dort abmeldet, so wird auch die HTTP Auth Session abgeräumt, was man daran sieht, dass der Browser danach sofort wieder nach einem Zugang fragt, da die gesamte Site ja mit HTTP Auth geschützt ist. Hier müsste ich mir wohl mal anschauen, wie Gallery2 das macht und dieses versuchen, in das HTTP Auth Plugin von Serendipity zu übertragen.

Etwas nerviger ist, dass die interne Serendipity Session nicht richtig abgeräumt wird, wenn die HTTP Auth Session zerstört wird. Habe ich z.B. über die Gallery2 meine HTTP Auth Session zerstört und melde mich danach mit einem anderen Account an, so ist man weiterhin in der Adminoberfläche von Serendipity mit dem alten Account eingeloggt. Die beiden Sessions (HTTP Auth und die interne Login Session von Serendipity) sind völlig unabhängig von einander.

Das kann man nur ändern, wenn man sich im Blog noch einmal "ausloggt". Da die HTTP Auth Session hierdurch nicht zerstört wird, hat dies nur zur Folge, dass Serendipity noch einmal nachschaut, unter welchem Benutzernamen der User gerade per HTTP Auth eingeloggt ist. Geht man dann wieder in die Admin Oberfläche, so ist man (trotz scheinbarem Logout) weiterhin eingeloggt, nun aber unter dem korrekten Namen. Dieses Problem fällt allerdings nur auf, wenn man sich mit unterschiedlichen Namen einloggen will, was sicherlich nicht der Normalfall ist. Hier sollte aber wohl das HTTP Auth Plugin noch ein wenig nachgebessert werden.

Fazit

Gerade die Möglichkeiten, Web Anwendungen über HTTP Auth zusammen zu schalten und so ein gemeinsames einmaliges Login zu realisieren, fand ich recht spannend. Auf diese Weise bekommt man auch komplett voneinander unabhängige Anwendungen gut unter einen Hut. Wäre schön, wenn noch mehr Web Anwendungen diesen Mechanismus unterstützen würden. Ich muss mich wohl mal auf die Suche danach machen.

Nebenbei gefiel mir auch wieder einmal das Rechtesystem von Serendipity, mit dem man ziemlich genau festlegen kann wer was wo im Blog machen darf. Hinweisen möchte ich hier noch einmal auf meinen alten Artikel über Gruppenrechte in Serenendipity. Immer wieder nett zu sehen, was mit Serendipity so alles möglich ist. :-)

Trackbacks

s9y

s9y am : s9y via Twitter

"s9y via Twitter" vollständig lesen
Grischa (DE): Serendipity für Geschlossene Gesellschaften http://tinyurl.com/lsyx6k

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Ormus

Ormus am :

Sehr netter Artikel! Gattin drängelt sowieso momentan auf ein abgeschottetes Familienblog. Dann werde ich mich mal einarbeiten mit der Grundlage von dem Artikel hier. Also danke für die Grundlagenarbeit.

Und nebenbei schaue ich mir mal den HTTP Auth Plugin an, kann ja nicht so schwer sein, die 1-2 Fallstricke zu entfernen, oder?

Grischa

Grischa am :

Vielen Dank für die Blumen. :-)

Jau, ich denke auch, dass man das HTTP Auth Plugin so erweitern kann, dass die Fallstricke gelöst werden können. Einziges Problem, was ich dabei sehe ist, dass die beiden Sessions unabhängig voneinander sind. Sprich: Serendipity bekommt gar nicht mit, wenn die HTTP Auth Session zerstört wird. Somit müsste eigentlich bei *jedem* Seiten Aufruf überprüft werden, ob es noch eine gültige HTTP Session gibt und wenn nicht, müsste dann auch die S9Y Session zerstört werden. Das könnte ein gewisses Performance Problem sein.

Aktuell grübele ich gerade, wie man die Gallery2 Bilder auch in der S9Y Medienbibliothek sehen kann. Erster Ansatz dabei ist, das G2 Datenverzeichnis unterhalb von S9Y's Upload Verzeichnis zu verlegen. Da weigert sich G2 aber gerade strikt, das zu machen.

Auch wenn das geht, ist noch nicht gesagt, dass S9Y die Plattenverzeichnisse automatisch in Medien Directories umwandelt. Bilder an sich ja, aber Unterverzeichnisse? Ich weiß es nicht.

Wenn Du weiteren Erfolg zu verzeichnen hast, wäre ich natürlich an Infos interessiert. :-)

Robert Lender

Robert Lender am :

Danke für den Artikel. Der gibt auch gleich Anregungen für anderweitige Ideen.

Ich glaube ich muss mir mal ein paar Plugins wieder näher ansehen.

Grischa

Grischa am :

Jep, das empfand ich auch als einen netten Nebeneffekt, dass man sich mal wieder ein paar andere Plugins anschaut, die man im eigenen Blog nicht gebrauchen kann.

Man findet immer wieder Perlen darunter. :-)

Thore

Thore am :

Hallo danke erstmal Sitze gerade an einem ganz ähnlichen Projekt für meine Familie.

Da ich durch dich auf http-auth von serendipity gekommen bin werde ich mal beschreiben wie ich das alles gelöst habe.

Also erstmal ist Serendipity bei mir embedded in meine Seite weil es nur einen kleinen Teil darstellt.

Ich habe die gesamte Seite mit PHP gesichert. Da ich keine hohen Ansprüche an die Sicherheit habe wird beim Einloggen einfach nen cookie mit dem Loginnamen und nem md5-hash gesetzt, gleichzeitig wird in der $_SESSION sowohl der Name als auch das aus der Datenbank ausgelesen Password (ist ja in md5) gespeichert.

Damit s9y das auch übernimmt muss einfach in der serendipity_event_httpauth.php des http Plugins der Inhalt der Funktion even_hook ersetzt werden duch: if (!serendipity_authenticate_author($_SESSION['Tauth'], $_SESSION['Tpass'], true, false))

{

setcookie('login', '', time()-3600, '/');

header('Location: ../index.php');}

dadurch wird versucht sich mittels der Sessionvariablen bei s9y anzumelden. Falls das nicht klappt wird der cookie zerstört und auf die Startseite zurückgeleitet. In der functions_config.inc.php in ordner include muss dann in der Zeile 543 ein: serendipity_setAuthorToken(); eingefügt werden damit alles klappt.

Wenn man diese Veränderungen gemacht hat hat man den Vorteil dass man durch das PHP login wesentlich flexibler ist. So wird nach dem Abmelden im Blog der Cookie zerstört und damit ein automatisches Wiederanmelden im Blog verhindert, durch die Weiterleitung auf die Startseite wird bewirkt dass man nach dem Abmelden nicht mehr das Blog aufsuchen kann.

Uff und es würde dadurch ermöglicht dass ein Abmelden im Blog auch einen Zugriff auf gallery2 verhindert wenn man dessen plugin ähnlich umschreibt(was bei mir morgen ansteht :-( )

Hoffe mal das war verständlich und ich habe nichts vergessen ^^ Falls noch Fragen bestehen schreibt mir einfach aber ohne Garantie auf Lösungen. Ich musste mir leider alles mühselig erabeiten da meine Kenntnisse auf diesem Gebiet verbesserungswürdig sind.

Hoffe ich konnte irgendjemandem helfen und nochmals Danke für den Beitrag

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Dieses Blog erlaubt Dir, Audio Kommentare über audioboo.fm hinzuzufügen. Erstelle einen neuen Boo und gib hier den Link auf die Seite Deines Boos ein.
record
Wenn Du Deinen Twitter Namen eingibst wird Deine Timeline in Deinem Kommentar verlinkt.
Bewirb einen Deiner letzten Artikel
Dieses Blog erlaubt Dir mit Deinem Kommentar einen Deiner letzten Artikel zu bewerben. Bitte gib Deine Blog URL als Homepage ein, dann wird eine Auswahl erscheinen, in der Du einen Artikel auswählen kannst. (Javascript erforderlich)
(Bedingung: 1 Kommentare geschrieben)
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
tweetbackcheck