FLOSS'n'net - Aktivitäten im 1. Quartal 2020
Das neue Jahr hat im Prinzip begonnen, wie das alte geendet hat: viel zu tun, wenig Zeit, insbesondere für “freie Software und das Netz”. Aber wie ich am Anfang des letzten Quartals etwas Zeit für Serendipity gefunden hatte, so ging es mir nun am Ende diesen Quartals, rund um das - ausgefallene bzw. virtualisierte - Serendipity-Camp: zwei Releases, etliche Bugfixes und auch ein paar Erweiterungen, und eine ganze Menge Änderungen an der Infrastruktur.
Serendipity (s9y)
Das Blogsystem Serendipity werkelt auch hinter diesem Blog.
s9y-Kern
In der Mediendatenbank fehlten einige Sicherheitsnetze rund um das Umbenennen von Dateien - so führte das “Umbenennen” einer Datei in eine bereits existente Datei dazu, dass beide Dateien verschwanden, aus der Datenbank und von der Platte. Unschön, aber jetzt behoben.
Prevent renaming ML object into existing file.Beim Umbenennen von Mediendateien ohne Endung gab es auch noch einige Probleme; zum einen “verschwanden” diese direkt nach dem Umbenennen aus der Datenbank, und - nur unter Windows - gab es zudem die Möglichkeit, einer solchen Datei eine “gefährliche” Endung wie
.php
zu verpassen und sie damit ausführbar zu machen.
Fix for “disappearing” media files after renaming.
Fix RCE vulnerability on Windows.
Manche Leute kamen auf die Idee, Mediendateien mit seltsamen Endungen wie
.jpg12345
hochzuladen; das führt nicht nur später zu Problemen bei der Anzeige dieser “Bilder”, sondern passt auch nicht in das entsprechende, auf fünf Zeichen beschränkte Feld in der Datenbank. Unter mySQL macht das nicht so viel, soweit ich sehe - die Datenbank schneidet den Rest einfach ab. Unter PostgreSQL führt das aber wohl zu einer Fehlermeldung. Also kürzt Serendipity die Endung jetzt selbst auf maximal fünf Zeichen, und zwar mit einer hochkomplexen regular expression, die aber nach meinem besten Wissen ihren Zweck tut.
Truncate extension of media items to 5 chars.Außerdem mangelte es der Mediendatenbank - gerade beim Umbenennen - auch an Fehlermeldungen.
ML: Add error messagesDas mit Serendipity zusammen ausgelieferte und damit organisatorisch zum Kern gehörende Plugin
serendipity_plugin_comments
, das die neuesten Kommentare in der Seitenleiste anzeigen kann, zerhackte die Einträge sehr unschön mitten im Wort. Nicht nett anzusehen - die Ursache dafür war Code, der überlange Zeilen in den Kommentaren (wenn nötig auch mitten im Wort) trennte, damit überlange Worte nicht das Layout zerstören können. Abgesehen davon, dass man das mittlerweile auch durch CSS lösen kann, ergab sich das Problem, dass PHP zwei Funktionen für den Zeilenumbruch bereitstellt: eine davon (wordwrap()
) kann den Text (soweit möglich) nur an Wortgrenzen trennen, kann aber nicht mit Multibyte-Zeichen umgehen; bei der anderen (mb_strimwidth()
) ist es umgekehrt - sie ist multibyte-sicher (daher das “mb” im Funktionsnamen), kann aber Zeichenketten nur nach einer bestimmten Zeichenzahl trennen, aber nicht kurz vorher vor dem Beginn des neuen Wortes. Längeres Googeln brachte aber ein Rezept, das Ergebnis vonwordwrap()
mit multibyte-sicheren Funktionen zu erzeugen, und nach längeren Tests habe ich das dann implementiert.
[plugin_comments] Fix wordwrap at word boundaries.Das gleiche - aber mithilfe von CSS - habe ich dann auch für die Kommentaranzeige im Dashboard, der Startseite des Serendipity-Backends, umgesetzt.
Wordwrap overly long words in comments via CSS.Auch den Plugin-Manager habe ich bepuschelt. Der Plugin-Liste die Quelle des Plugins hinzuzufügen (Spartacus, das Plugin-Repository von Serendipity, oder mit dem Serendipity-Kern zusammen ausgeliefert, oder rein lokal installiert - bzw. aus einer der anderen Quellen mittlerweile entfernt und damit faktisch nicht mehr unterstützt) war dabei die eher einfache Übung.
Add plugin source to list of plugins.Sehr viel schwieriger war es, herauszubekommen, warum Serendipity manchmal nicht erkennt, dass für ein Plugin ein Update zur Verfügung steht. Der Weg zum Verständnis führte über das Nachverfolgen vieler ineinandergreifender Funktionen, die über drei Dateien verteilt waren, und - meines Erachtens - zu einem 14 Jahre alten Denkfehler. Weil ich mir nicht völlig sicher war, dass die gewählte Lösung nicht doch beabsichtigt gewesen ist, habe ich ihn daher nur minimalinvasiv an der Stelle behoben, an der er sich auswirkt.
Unconditionally keep upgraded_version in plugin cache.Schon letztes Jahr habe ich für die kommende Version 2.4 von Serendipity eine Update-Benachrichtigung auch für Plugins implementiert. Das durch die Suche nach dem vorstehend geschilderten Fehler verbesserte Verständnis der Plugin-API führte zu einer deutlichen Vereinfachung (und Verbesserung) des Codes, der durchzählt, ob und wie viele installierte Plugins geupdatet werden können. Außerdem habe ich im Dashboard die Hinweise auf ein Update für Serendipity selbst und für Plugins - für den Fall, dass beide Benachrichtigungen gleichzeitig angezeigt werden - in einer Box zusammengeführt und zugleich deren Anzeige verbessert. Den technisch nicht nötigen Update-Button für Plugins habe ich dann noch durch einen normalen Link im Text ersetzt, der an dieser Stelle optisch besser gefällt (und auch noch keine unmittelbare Aktion auslöst).
[event_spartacus] Simplify count_plugin_upgrades()
[event_spartacus] Change dashboard upgrade notification to simple link.
Dashboard: Merge s9y and plugin update notifications.
Daneben gab es noch einige minimale Bugfixes.
Plugins
Im Plugin
serendipity_event_social
kann man nunmehr für jeden Beitrag ein Bild vorgeben, das über das entsprechende Open Graph-Tag dann als Vorschaubild in den sozialen Medien (Twitter, Facebook) angezeigt wird. Es ist nicht mehr nötig, das Bild im Eintrag selbst (als erstes Bild) zu verwenden. Diese Möglichkeit bestand bislang nur für die Themes Timeline und Photo, die jeweils schon beitragsbezogene Bilder vorsehen.
[event_social] Set social media image for entry.Bei einigen Plugins habe ich das
Changelog
inChangeLog
umbenannt, denn nur diese Schreibung erkennt und verlinkt Spartacus, das Plugin-Repository. Außerdem habe ich nach dem Spartacus-Umzug (siehe unten) das Build-Log ausgewertet und sich darin niederschlagende PHP-Fehler (meistens alte Klassen-Konstruktoren aus PHP-4-Zeiten und fehlerhafte definierte Konstanten) behoben.
Dazu kamen ein oder zwei marginale Änderungen an Plugins.
Infrastruktur
Auch in der Serendipity-Infrastruktur gab es einige Änderungen.
Wir haben Kernkomponenten der Serendipity-Infrastruktur - s9y.org (eigentlich nur noch Redirects, aber wichtige Redirects), das Blog und später auch Spartacus (das Plugin- und Theme-Repository) - von Uberspace 6 auf Uberspace 7 umgestellt. Das geht nur über die Anlage eines neuen Accounts (und die Löschung des alten). Bei dem Umzug insbesondere des Blogs habe ich mitgeholfen.
Bislang lagen die Spartacus-Webseiten, auf denen die Plugins und Themes zur Ansicht präsentiert werden, noch bei Sourceforge. Auch die Plugins und Themes selbst wurden nach dort (und zu Netmirror) hochgeladen, obschon Netmirror schon seit Jahren nicht mehr existiert und der Abruf von Plugins/Themes bei Sourceforge seit der Einstellung des CVS-Web-Dienstes irgendwann 2017 nicht mehr möglich war. Auch ansonsten schleppte der Build-Prozess für Spartacus noch jahrzehntealte, oft bereits lange auskommentierte Artefakte früherer Installationen mit sich herum (und auf dem alten Uberspace-Account, der noch unter PHP 5 lief, schlug der gesamte Build-Prozess seit einiger Zeit fehl, weil ein Plugin PHP-7-Code enthielt, der zum Abbruch des Build-Prozesses mit Fehlern führte). Daher bin ich den gesamten Build-Prozess durchgegangen und habe die entsprechenden Scripts komplett durch neue ersetzt, die jetzt nur noch die notwendigen Teile der Arbeit durchführen und damit auch besser verständlich sind.
Im Zusammenhang mit dem erneuten Spartacus-Build-Prozess habe ich die Spartacus-Webseiten von Sourceforge zu unserem neuen Uberspace 7-Account umgezogen, auf dem ohnehin die Build-Scripte laufen. Das spart zum einen viel Zeit für den Upload zu Sourceforge und gibt uns zum anderen automatisch auf Let’s encrpyt! gestütztes TLS, so dass auch der letzte Teil von Serendipity nunmehr nur noch über HTTPS erreichbar ist.
Nachdem ich einmal dabei war, habe ich - neben diversen primär optischen Änderungen - das Datum des letzten Builds der Spartacus-Webseiten als Kommentar in den HTML-Quelltext eingefügt, damit man von außen leicht erkennen kann, ob der Build ordnungsgemäß täglich läuft, und die Serendipity-Themes ohne Rücksicht auf Groß- und Kleinschreibung alphabetisch sortiert (ein jahrealter Wishlist-Bug).
Last but not least ist der Button für die Sprachauswahl in der Seitenleiste ganz nach oben gewandert und die dahinterliegende Funktionalität so geändert worden, dass die gerade betrachtete Plugin-Übersicht zum einen erhalten bleibt und zum anderen direkt die Sprache ändert. Zuvor änderten sich nur die Links in der Seitenleiste auf die gewählte Sprachversion.
Auf der Startseite der Serendipity-Webseiten sind die letzten Blogeinträge als Feed eingebunden. Das funktioniert im Moment aber deshalb nicht, weil ein Javascript den Blog-Feed per XMLHttpRequest abruft, also Cross-Origin Resource Sharing (CORS) versucht, und das erlautb der Uberspace 7-Webserver nicht, auf dem das Blog läuft. Also habe ich stattdessen zunächst einen entsprechenden Hinweis auf das Blog eingebunden, und zwar in einer Weise, die den Hinweis ohne weitere Änderung wieder durch die aktuellen Blogbeiträge ersetzt, sobald der Feed wieder abgerufen werden kann. Danach bin ich dann beim Lesen alter Serendipity-Changelogs auf die Konfigurationsoption
$serendipity['cors']
gestoßen; setzt man diese aufTRUE
, funktioniert auch der Feed wieder.
Releases
Im Rahmen des diesjährigen Serendipity-Camps habe ich alle geeigneten Änderungen aus der aktuellen Entwicklungsversion in den 2.3er-Zweig übernommen und dann Serendipity 2.3.3 releast sowie die Release-Notes, einen Blog- und einen Forenbeitrag verfasst.
Dasselbe habe ich dann weniger Tage später nochmal für die Version 2.3.4 wiederholt.
Puh - ist doch eine ganze Menge geworden! Das reicht dann eigentlich auch direkt für das zweite Quartal, falls ich da wieder einmal zu nichts kommen sollte …
Vorherige Aktivitäten-Übersicht: IV/2019
Titelbild © momius - stock.adobe.com
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt