Repository navigation
Releases: holzcloud/holzcloud-cms
Release list
v0.0.25
Menüeinträge lassen sich bearbeiten, und die Eintragsliste ist auf dem Handy lesbar.
Einträge bearbeiten statt löschen und neu anlegen. Jeder Eintrag im Menüeditor
hat jetzt die Schaltfläche „Bearbeiten“. Auf der Seite dahinter ändert man Titel,
Art, Adresse, Seite und übergeordneten Eintrag. Ein Eintrag lässt sich nicht unter
sich selbst oder unter einen seiner eigenen Untereinträge schieben, und eine Seite
einer anderen Website wird abgewiesen. Schlägt eine Prüfung fehl, bleibt alles
unverändert.
Die Änderung steht im Aktivitätsprotokoll. Jede gespeicherte Änderung eines
Eintrags wird als menu.item_update festgehalten, mit dem Menü, dem Eintrag und
dem neuen Titel.
Die Liste ist auf dem Handy lesbar. Titel, Art und Adresse brechen jetzt in
ihrer eigenen Zeile um, statt sich mit den Schaltflächen zu überlagern. Auf
schmalen Bildschirmen stehen die Schaltflächen unter dem Text und sind groß genug
für den Daumen.
What's Changed
- 0.0.25: Menüeinträge bearbeiten, Eintragsliste auf dem Handy by @holzcloud in #42
Full Changelog: v0.0.24...v0.0.25
v0.0.24
Menüs haben einen eigenen Platz in der Leiste, und ihr Name lässt sich direkt in der Liste ändern.
Menüs stehen im Hauptmenü. In der schmalen Leiste links gibt es neben Seiten
und Medien jetzt einen eigenen Eintrag „Menüs“; unter den Einstellungen taucht er
nicht mehr auf. Menüs sind tägliche Arbeit am Inhalt, keine Einstellung. Die
Adressen bleiben dieselben, gespeicherte Lesezeichen funktionieren weiter.
Der Name ist direkt in der Liste änderbar. Jede Zeile der Menüliste hat ein
Feld mit dem Namen und die Schaltfläche „Umbenennen“, auch ohne JavaScript. Der
Schlüssel bleibt dabei unberührt, damit das Menü auf der Seite nicht verschwindet.
Wer den Schlüssel ändern will, tut das weiter im Menüeditor.
Umbenennen steht im Aktivitätsprotokoll. Anlegen, Ändern und Löschen eines
Menüs im Admin werden jetzt wie bei der KI-Schnittstelle unter menu.create,
menu.update und menu.delete festgehalten.
What's Changed
- 0.0.24: Menüs im Hauptmenü, Name in der Liste änderbar by @holzcloud in #41
Full Changelog: v0.0.23...v0.0.24
v0.0.23
Farben für die Programmseite holzWave, im Theme holzcloud.
holzWave bekommt seine eigenen Farben. Eine Seite mit dem Adressnamen
holzwave steht in Rosé auf dunklem Aubergine, wie das Programm selbst:
dunkel #FF8FB8 auf #14091A (9,1 : 1), hell ein tieferes Rosé #A82E5E auf
#FBEEF3 (5,8 : 1). Alle anderen Programmseiten bleiben unverändert.
What's Changed
- Theme holzcloud: Farben für die Programmseite holzWave (0.0.23) by @holzcloud in #40
Full Changelog: v0.0.22...v0.0.23
v0.0.22
Vergleichstabellen auf dem Handy, im Theme holzcloud.
Breite Tabellen schieben die Seite nicht mehr zur Seite. Auf Telefonen bis
40em Breite scrollt eine Tabelle mit drei oder mehr Spalten in ihrem eigenen
Kasten; die erste Spalte bleibt dabei stehen, und ein Schatten am Rand zeigt,
dass es weitergeht. Tabellen mit zwei Spalten brechen um und bekommen eine
schmalere erste Spalte. Ebenso bricht ein langer Befehl im Lauftext jetzt um,
statt die Seite zu verbreitern. Tablet, Desktop und Druck bleiben unverändert.
Der Kasten lässt sich nicht mit der Tastatur scrollen, weil das ein tabindex
im Inhalt bräuchte, den ein Stylesheet nicht setzen kann.
What's Changed
- docs: security.md nennt das Warenkorb-Cookie des Shops by @holzcloud in #38
- Theme holzcloud: Tabellen auf dem Handy scrollen im eigenen Kasten (0.0.22) by @holzcloud in #39
Full Changelog: v0.0.21...v0.0.22
v0.0.21
Sicherheitsprüfung, alle Gruppen. Eine Migration (00060) kommt mit, sie läuft
beim Start von selbst.
Die Bestätigungsseite einer Bestellung ist nur noch über einen privaten Link
erreichbar. Bisher lag sie unter /bestellung/2026-0001, und die Nummer zählt
hoch: Wer eine Nummer kannte, konnte alle anderen durchprobieren und Namen,
Adressen und Bestelltes lesen. Der Link enthält jetzt eine zufällige Kennung aus
32 Zeichen, die sich nicht erraten lässt. Die Bestellnummer steht weiter auf der
Seite und in den Mails, öffnet aber nichts mehr. Die Mails, die Weiterleitung
nach dem Absenden und die Rückkehr von der Zahlungsseite führen auf den neuen
Link. Ein alter Link mit der Nummer zeigt eine 404-Seite; schon verschickte
Bestätigungsmails sind davon betroffen, und wer sie noch einmal öffnen will,
bekommt den neuen Link vom Betreiber. Bestehende Bestellungen erhalten bei der
Migration ihre Kennung automatisch.
Eine geschützte Startseite fragt jetzt nach dem Passwort. Alle anderen Seiten
taten das schon, die Startseite lieferte ihren Inhalt an jeden aus. Nach der
Eingabe führt der Weg wieder auf die Startseite zurück, und der Inhalt wird wie
bei jeder geschützten Seite nicht von gemeinsamen Zwischenspeichern aufbewahrt.
Das Passwort eines Versandkontos wandert nicht mehr mit zu einem anderen
Server. Wer unter „Versand“ einer Website Server, Port oder Benutzernamen
ändert und das Passwortfeld leer lässt, bekommt jetzt die Meldung, das Passwort
erneut einzugeben, statt dass das gespeicherte Passwort an den neuen Server
geschickt wird. Bleiben alle drei gleich, bleibt das Passwort wie bisher
erhalten.
Eine Zahlungsbestätigung kann eine abgeschlossene Bestellung nicht mehr
überschreiben. Eine Bestellung wird nur noch als bezahlt oder fehlgeschlagen
vermerkt, solange sie offen ist oder ein früherer Versuch fehlgeschlagen war,
und nur, wenn die Zahlungsseite diejenige ist, die zu dieser Bestellung gehört.
Eine von Hand erfasste Rückerstattung bleibt also stehen.
Unterschiedlich geschriebene Hostnamen belegen keinen Platz mehr im
Zwischenspeicher. „Example.COM“, „example.com.“ und „example.com“ sind
dieselbe Adresse und werden einmal gespeichert, und der Speicher hat eine
Obergrenze.
Unsinnig hohe Preise werden abgelehnt. Ein Betrag über einer Milliarde ist
jetzt ein Fehler in der Eingabe, statt in einen kleinen oder negativen Betrag
umzuschlagen.
Plugin-Migrationen dürfen nur noch eigene Tabellen anlegen. Das SQL, das ein
Plugin mitbringt, lief bisher mit allen Rechten auf der ganzen Datenbank. Jetzt
darf es nur Tabellen und Indizes mit dem eigenen Präfix plugin_<Kennung>_
anlegen, ändern und löschen und in sie schreiben; in plugin_store darf es nur
schreiben, wenn es die eigene Kennung nennt. Lesen darf es Seiten, Websites,
Domains und die alten Formularnachrichten, mehr nicht. ATTACH, PRAGMA,
VACUUM, Trigger, Views und jede Berührung der Tabellen des Kerns werden
abgelehnt, bevor etwas ausgeführt wird, mit einer Meldung, die Migration und
Plugin nennt. Das mitgelieferte Kontaktformular ist davon nicht betroffen.
Dateien aus einem Import und Plugin-Dateien werden nicht mehr als Seite
ausgeliefert. Beim Import einer Website zählt, was in der Datei steckt, nicht
was das Archiv behauptet: Es gelten dieselben Typen wie beim Hochladen im
Admin (Bilder, PDF, Video). HTML, Skripte und XML unter einem Bildnamen werden
mit einem Hinweis im Bericht übersprungen, ebenso ein SVG, das etwas von einem
anderen Server lädt; gespeichert wird der erkannte Typ. Dateien, die ein Plugin
unter /plugin-assets/ mitbringt, kommen mit nosniff und einer
Sandbox-Richtlinie heraus, und .html, .svg und .xml werden zum Herunterladen
angeboten statt im Browser geöffnet. Skripte und Stylesheets bleiben für die
Bildschirme des Plugins nutzbar.
Bei weiteren heiklen Aktionen wird das Passwort erneut verlangt. Wie schon
beim Löschen gilt das jetzt auch für: Zwei-Faktor ausschalten, neue
Wiederherstellungscodes, Plugin hochladen, Plugin einschalten, Vorlage
hochladen, Benutzer ändern (etwa die Rolle) und Website importieren. Ist die
Bestätigung älter als 15 Minuten, führt der Knopf zur Bestätigungsseite und von
dort zurück; hochgeladene Dateien müssen danach noch einmal ausgewählt werden.
Konten, die nur über Single Sign-on angelegt wurden und nie ein Passwort
bekommen haben, kommen an diesen Stellen wie beim Löschen nicht weiter, bis
der Betreiber mit holzcloud user passwd eines setzt.
Ein hängender Mailserver blockiert den Postausgang nicht mehr. Bisher galt
die Wartezeit nur für den Verbindungsaufbau; ein Server, der die Verbindung
annahm und dann schwieg, hielt den Versand beliebig lange fest. Jetzt hat die
ganze Sitzung (Begrüßung, Verschlüsselung, Anmeldung, Nachricht) eine
gemeinsame Frist von dem Dreifachen der eingestellten Wartezeit.
SECURITY.md beschreibt die Zahlung richtig. Dort stand, das Programm kenne
keine Zahlung. Das stimmt seit dem Laden mit Payrexx nicht mehr. Der Text sagt
jetzt, was das Programm tut und prüft: Weiterleitung statt Kartendaten, keine
Benachrichtigung wird geglaubt, sondern der Anbieter wird gefragt, und Betrag,
Währung und Zahlungsseite müssen zur Bestellung passen.
Go-Version, Bibliotheken und htmx sind auf dem neuesten Stand. Das Programm
wird mit Go 1.26.8 gebaut (auch das Container-Image und die mitgelieferten
Plugin-Module). Aktualisiert sind golang.org/x/net, golang.org/x/image und
die SQLite-Bibliothek modernc.org/sqlite samt ihrer Laufzeit. Die Prüfung mit
govulncheck findet keine Lücke, die das Programm erreicht. Zwei Meldungen
betreffen Teile, die das Programm nicht aufruft, und hatten noch keine
korrigierte Fassung. Dazu kommt htmx 2.0.11, dessen Prüfsumme gegen die
Angabe der Paketquelle verglichen wurde. Die Schritte zum Bauen des Images
laufen in GitHub Actions jetzt auf festen, geprüften Versionen statt auf
beweglichen Marken. Nach dem Update ist nichts zu tun.
Der Dienst darf unter systemd weniger. Die mitgelieferte Datei
holzcloud.service erlaubt dem Prozess nur noch IPv4, IPv6 und lokale Sockets,
sperrt privilegierte Systemaufrufe und Eingriffe in Ressourcen, verzichtet auf
alle Capabilities (Port 8080 braucht keine), verbirgt fremde Prozesse und
schützt Uhr, Hostnamen und Kernel-Log. Neue Dateien sind nur für den
Dienstbenutzer lesbar. Auf einem bestehenden Server wirkt das erst mit der
neuen Datei: kopieren, sudo systemctl daemon-reload && sudo systemctl restart holzcloud,
danach journalctl -u holzcloud ansehen und mit
systemd-analyze security holzcloud prüfen. Liegt das Datenverzeichnis nicht
unter /opt/holzcloud/data, muss ReadWritePaths angepasst werden; ein Port
unter 1024 braucht CAP_NET_BIND_SERVICE.
What's Changed
- 0.0.21: Sicherheits- und Update-Audit by @holzcloud in #37
Full Changelog: v0.0.20...v0.0.21
v0.0.20
Der SEO-Check sagt, was an einer Seite besser sein könnte. Im Editor gibt es
neben „Vorschau“, „Einstellungen“ und „Versionen“ den Reiter „SEO“. Er prüft die
gespeicherte Fassung der Seite und sagt zu jedem Punkt, was zu ändern ist: Titel
und Beschreibung fehlen oder sind zu kurz oder zu lang, derselbe Titel oder
dieselbe Beschreibung steht auf einer anderen Seite, im Text steht noch eine
zweite H1, Überschriftenstufen sind übersprungen, Bilder haben keine
Beschreibung, der Text ist sehr kurz, die Seite verlinkt auf keine andere, die
Adresse ist lang oder voller Füllwörter, oder zum Teilen fehlt ein Bild. Gesperrt
wird nichts. Unter „SEO“ in der Liste der Einstellungen steht dasselbe für die
ganze Website, nach Befund filterbar, und der KI-Zugang kennt es als lesendes
Werkzeug seo_report. Nach dem Update ist nichts zu tun.
Neu: /llms.txt, Bilder in der Sitemap und mehr strukturierte Daten. Jede
Website liefert unter /llms.txt eine Markdown-Übersicht für KI-Suche und
Assistenten: Name und Beschreibung, dann je Sprache die Seiten mit Titel,
Adresse und Beschreibung. Die Sitemap nennt jetzt unter jeder Seite die Bilder,
die sie zeigt. Beiträge tragen BlogPosting statt Article, und Produkte im
Laden tragen Product mit Offer (Preis, Währung, auf Lager oder nicht) und
einen Brotkrumenpfad.
Die Sitemap führt Seiten mit „noindex“ nicht mehr auf. Bisher stand dort auch
eine Seite, die man den Suchmaschinen ausdrücklich verbot; das widersprach sich.
/llms.txt und die Sitemap lesen jetzt dieselbe Auswahl, sodass sie nicht
auseinanderlaufen. Entwürfe, geplante, gesperrte und fremde Seiten stehen in
keiner von beiden.
What's Changed
- Repo für Public aufräumen by @holzcloud in #35
- 0.0.20: SEO-Check, SEO-Bericht, llms.txt, Bild-Sitemap, mehr strukturierte Daten by @holzcloud in #36
Full Changelog: v0.0.19...v0.0.20
v0.0.19
Eine Weiterleitung behält die Sprache. Wer eine Seite umbenennt, bekommt
eine Weiterleitung von der alten auf die neue Adresse, und weil eine Seite in
allen Sprachen denselben Adressnamen trägt, gilt sie für alle. Bisher führte sie
aber jeden Besucher in die Hauptsprache: /fr/ancien landete auf /nouveau
statt auf /fr/nouveau. Jetzt bleibt die Sprache erhalten. Eine Weiterleitung,
die für die Adresse mit Sprachkürzel eingetragen ist (/fr/ancien), geht der
allgemeinen vor; bisher wurde sie gar nie gefunden. Ziele ausserhalb der Website
bleiben, wie sie sind. Nach dem Update ist dafür nichts zu tun.
What's Changed
- Redirects keep the visitor's language (0.0.19) by @holzcloud in #34
Full Changelog: v0.0.18...v0.0.19
v0.0.18
Die Vorlage „holzcloud“ färbt auch die Seite holzbar ein. holzIce heisst
jetzt holzBar, und seine Seite bekommt den Adressnamen holzbar. Sie steht wie
bisher in Eisblau auf dunklem Marineblau, im hellen Modus in Blau auf einem
Hauch Eisblau. Eine Seite mit dem alten Adressnamen holzice behält dieselben
Farben, damit eine Installation, die ihre Seite noch nicht umbenannt hat, nichts
verliert. Nach dem Update ist dafür nichts zu tun; die neue style.css erreicht
die Besucher sofort, weil ihr Link eine neue Version trägt.
What's Changed
- holzcloud theme: the holzbar page keeps the ice colours (0.0.18) by @holzcloud in #33
Full Changelog: v0.0.17...v0.0.18
v0.0.17
Der Rest des Programms heisst jetzt auch holzcloud-CMS. Was 0.0.16 noch
übrig liess, ist nachgezogen: die Begrüssung auf dem Dashboard, der Mailstatus
und der Markenbildschirm, der Standardname der Verwaltung, die README, die
Dokumente und die Dateien unter deploy/. Die Mails heissen jetzt „Dein Zugang
zu holzcloud-CMS“ und „Testnachricht von holzcloud-CMS“.
Authenticator-Apps zeigen den neuen Namen. Wer die Zwei-Faktor-Anmeldung
neu einrichtet, sieht in seiner App „holzcloud-CMS“ mit dem Host dahinter.
Bestehende Einträge behalten ihre alte Beschriftung; sie bleiben gültig und
müssen nicht neu eingerichtet werden.
Der Markenbildschirm behält das Zeichen des CMS. Eine Installation, die den
Bildschirm einmal mit leerem Namensfeld gespeichert hat, trug den alten
Standardnamen „Holzcloud“ in der Datenbank. Sie gilt weiter als Standard und
zeigt deshalb nach dem Update das Zeichen des CMS und nicht einen Buchstaben im
Quadrat.
Unverändert bleiben die technischen Namen: die Variablen HOLZCLOUD_*, der
Header X-Holzcloud-Proxy-Secret, der Befehl holzcloud und die Vorlage
„holzcloud“.
What's Changed
- 0.0.17: überall holzcloud-CMS, neue Screenshots by @holzcloud in #32
Full Changelog: v0.0.16...v0.0.17
v0.0.16
Das CMS heisst holzcloud-CMS, und seine Ringe sind rund. Wo die
Verwaltung, die Dokumentation und die Schnittstelle für KI-Assistenten den
Namen des Programms nennen, steht jetzt „holzcloud-CMS“ statt „Holzcloud CMS“;
Binary, Modul, Repository und Adressen heissen weiter wie bisher. Im Zeichen
des CMS stehen statt drei flacher Ellipsen vier runde Jahresringe, etwas tiefer
in der Wolke, wie im Querschnitt eines Stamms: oben links in der Verwaltung, auf
der Anmeldung, im Favicon und in Banner und Karte des Repositorys.
Karten und Aufrufe in der Vorlage „holzcloud“ nutzen die ganze Breite.
Karten und Aufruf-Kästen stehen auf jeder Seite über die volle Inhaltsbreite
statt nur in der Textspalte. Jede Karte hat jetzt die knappe Form der Stärken im
Auftakt einer Programmseite: Titel oben, Text gleich darunter, eine Kante in der
Farbe der Seite als oberer Rand. Der Knopf im Aufruf steht wieder in der Mitte;
eine Breitenbegrenzung für Absätze hatte ihn nach links geschoben. Nach dem
Update ist nichts zu tun.
Full Changelog: v0.0.15...v0.0.16