Was ist Hubzilla?
Hubzilla ist ein dezentralisiertes Kommunikationsnetzwerk mit dem Ziel, Kommunikationsmöglichkeiten bereitzustellen, die Zensur umgehen, die Privatsphäre respektieren und somit frei sind von den Einschränkungen, die die heutigen kommerziellen Kommunikationsgiganten uns auferlegen. Diese stellen in erster Linie Spionagenetzwerke für zahlende Kunden aller Art zur Verfügung und monopolisieren und zentralisieren das ganze Internet – was ursprünglich eben gerade nicht unter den revolutionären Zielen war, die einst zum World Wide Web führten.
Hubzilla ist frei, kostenlos und Open Source. Es wurde entwickelt, um auf einem Raspberry Pi ebenso zu laufen wie auf den größten AMD- und Intel-Xeon-Multiprozessor-Servern. Es kann für die Kommunikation zwischen einigen wenigen Einzelpersonen genutzt werden oder viele tausend Leute und mehr miteinander verbinden.
Ein weiteres Ziel ist es, von Können und Ressourcen unabhängig zu sein. Hubzilla ist für den einfachen Computernutzer ebenso leicht bedienbar wie für Systemadministratoren und Entwickler.
Wie Du es benutzt hängt davon ab, wie Du es benutzen willst.
Hubzilla ist in PHP geschrieben, dadurch ist es einfach, sie auf jedweder heutigen Hosting-Plattform zu installieren, inklusive Self-Hosting zu Hause, auf Shared Servern oder auf virtuellen und dedizierten Servern.
Mit anderen Worten, Hubzilla kann auf jeder Plattform laufen, die einen Web-Server, eine MySQL-kompatible Datenbank und PHP mitbringt.
Dabei bietet Hubzilla einige einzigartige Leckerbissen:
Ein-Klick-Identifikation: Du kannst auf andere Server im Hubzilla-Netzwerk zugreifen, indem Du einfach auf einen Link dorthin klickst. Die Authentifizierung wird ganz einfach automatisch hinter den Kulissen durchgeführt. Vergiss viele verschiedene Usernamen für verschiedene Seiten und die Passwörter dazu – das tut alles Hubzilla für Dich.
Klone: Du kannst Deine Online-Identität (oder, wie wir sagen, einen Kanal) klonen. Sie ist nicht mehr länger an einen bestimmten Server, eine Domain oder eine IP-Adresse gebunden. Importiere sie einfach auf einem anderen Hubzilla-Server (oder Hubzilla-Hub, wie es bei uns heißt) – direkt online oder mit Hilfe eines vorher generierten Exports. Wenn Dein primärer Hub plötzlich nicht mehr online ist, kein Problem, Deine Kontakte, Posts* und Nachrichten* sind automagisch weiterhin unter Deiner geklonten Identität verfügbar und zugreifbar. (*: nur Posts und Nachrichten, die nach dem Moment des Klonens erstellt wurden)
Privatsphäre: Hubzilla-Identitäten (Zot-IDs) können gelöscht, gesichert/heruntergeladen und geklont werden. Du hast volle Kontrolle über Deine Daten. Wenn Du Dich entscheidest, all Deine Daten und Deine Zot-ID zu löschen, musst Du nur auf einen Link klicken, und sie werden sofort von dem Server gelöscht. Keine Fragen, keine Umstände.
Funktionen
Im Folgenden einige der Hauptfunktionen von Hubzilla, die in der offiziellen Version enthalten sind. Hubzilla ist eine hochgradig erweiterbare Plattform, so dass weitere Funktionen und Möglichkeiten durch zusätzliche Themes und Plugins hinzugefügt werden können.
Affinity-Schieberegler
Beim Hinzufügen von Verbindungen in Hubzilla haben Mitglieder die Möglichkeit, der neuen Verbindung „Affinitätsstufen“ zuzuweisen (wie eng Ihre Freundschaft ist). Wenn Sie z. B. jemanden hinzufügen, dessen Blog Sie verfolgen, können Sie seinem Kanal die Affinitätsstufe „Bekannte“ zuweisen.
Wenn Sie hingegen den Kanal eines Freundes hinzufügen, könnten Sie ihm die Affinitätsstufe „Freunde“ zuweisen.
An diesem Punkt passt das Hubzilla Affinitäts-Schieberegler-Tool, das in der Regel oben auf Ihrer „Stream“-Seite erscheint, den Inhalt der Seite so an, dass die Kanäle innerhalb des gewünschten Affinitätsbereichs angezeigt werden. Kanäle außerhalb dieses Bereichs werden nicht angezeigt, es sei denn, Sie passen den Schieberegler so an, dass er sie einschließt.
Der Schieberegler für die Affinität ermöglicht die sofortige Filterung großer Mengen von Inhalten, gruppiert nach Grad der Nähe.
Filterung von Verbindungen
Mit dem optionalen „Verbindungsfilter“ haben Sie die Möglichkeit, genau zu steuern, was in Ihrem Stream angezeigt wird. Wenn er aktiviert ist, bietet der Verbindungseditor Eingaben zur Auswahl von Kriterien, die erfüllt werden müssen, um einen bestimmten Beitrag aus einem bestimmten Kanal aufzunehmen oder auszuschließen. Sobald ein Beitrag zugelassen wurde, sind alle Kommentare zu diesem Beitrag erlaubt, unabhängig davon, ob sie den Auswahlkriterien entsprechen. Sie können Wörter auswählen, die, falls vorhanden, den Beitrag blockieren oder sicherstellen, dass er in Ihren Stream aufgenommen wird. Reguläre Ausdrücke können für eine noch feinere Kontrolle verwendet werden, ebenso wie Hashtags oder sogar die erkannte Sprache des Beitrags.
Zugriffskontrolllisten
Bei der Freigabe von Inhalten haben die Mitglieder die Möglichkeit einzuschränken, wer den Inhalt sehen kann. Durch Anklicken des Vorhängeschlosses unter dem Freigabefeld kann man die gewünschten Empfänger des Beitrags auswählen, indem man auf deren Namen klickt.
Nach dem Versenden kann die Nachricht nur vom Absender und den ausgewählten Empfängern eingesehen werden. Mit anderen Worten, die Nachricht wird nicht auf öffentlichen Wänden erscheinen.
Zugangskontrolllisten können auf Inhalte und Beiträge, Fotos, Ereignisse, Webseiten, Chatrooms und Dateien angewendet werden.
Einmalige Anmeldung
Zugriffskontrolllisten funktionieren dank unserer einzigartigen Single-Sign-On-Technologie für alle Kanäle im Grid. Die meisten internen Links bieten ein Identitäts-Token, das auf anderen Hubzilla-Sites verifiziert und zur Kontrolle des Zugriffs auf private Ressourcen verwendet werden kann. Sie melden sich einmal bei Ihrem Home Hub an. Danach ist die Authentifizierung für alle Hubzilla-Ressourcen „magisch“.
WebDAV-fähiger Dateispeicher
Dateien können mit den Dienstprogrammen Ihres Betriebssystems (in den meisten Fällen per Drag & Drop) in Ihren persönlichen Speicherbereich hochgeladen werden. Sie können diese Dateien mit Zugriffskontrolllisten für eine beliebige Kombination von Hubzilla-Mitgliedern (einschließlich einiger Netzwerkmitglieder von Drittanbietern) schützen oder sie öffentlich zugänglich machen.
Fotoalben
Speichern Sie Fotos in Alben. Alle Ihre Fotos können durch Zugriffskontrolllisten geschützt werden.
Veranstaltungskalender
Erstellen und verwalten Sie Ereignisse und Aufgaben, die ebenfalls mit Zugriffskontrolllisten geschützt werden können. Ereignisse können mit dem Industriestandard vcalendar/iCal-Format in andere Software importiert/exportiert und in Posts mit anderen geteilt werden. Geburtstagsereignisse werden automatisch von Ihren Freunden hinzugefügt und in Ihre korrekte Zeitzone umgewandelt, so dass Sie genau wissen, wann der Geburtstag stattfindet - unabhängig davon, wo auf der Welt Sie sich in Bezug auf die Geburtstagsperson befinden. Veranstaltungen werden normalerweise mit Anwesenheitszählern erstellt, so dass Ihre Freunde und Verbindungen sofort zusagen können.
Chaträume
Sie können eine beliebige Anzahl von persönlichen Chatrooms erstellen und den Zugang über Zugangskontrolllisten erlauben. Diese sind in der Regel sicherer als XMPP, IRC und andere Instant Messaging-Transporte, obwohl wir auch die Nutzung dieser anderen Dienste über Plugins erlauben.
Erstellung von Webseiten
Hubzilla verfügt über zahlreiche „Content Management“-Werkzeuge zur Erstellung von Webseiten, einschließlich Layout-Bearbeitung, Menüs, Blöcke, Widgets und Seiten-/Inhaltsbereiche. Alle diese Tools können zugriffsgesteuert werden, so dass die resultierenden Seiten nur für das vorgesehene Publikum zugänglich sind.
Anwendungen
Apps können von Mitgliedern erstellt und verteilt werden. Diese unterscheiden sich von den traditionellen „Vendor Lockin“-Apps, da sie vollständig vom Autor kontrolliert werden - der den Zugriff auf die Zielseiten der App kontrollieren und entsprechend für diesen Zugriff bezahlen kann. Die meisten Apps in Hubzilla sind kostenlos und können auch von Personen ohne Programmierkenntnisse leicht erstellt werden.
Gestaltung
Das Seitenlayout basiert auf einer Beschreibungssprache namens Comanche. Hubzilla selbst ist in Comanche-Layouts geschrieben, die Sie ändern können. Dies ermöglicht ein Maß an individueller Anpassung, das man in so genannten „Multi-User-Umgebungen“ normalerweise nicht findet.
Lesezeichen
Teilen und speichern/verwalten Sie Lesezeichen von Links, die in Unterhaltungen bereitgestellt werden.
Verschlüsselung privater Nachrichten und Datenschutzaspekte
Private Nachrichten werden in einem verschlüsselten Format gespeichert. Dies ist zwar nicht hundertprozentig sicher, verhindert aber in der Regel das gelegentliche Ausspähen durch den Site-Administrator oder ISP.
Jeder Hubzilla-Channel verfügt über einen eigenen Satz privater und zugehöriger öffentlicher RSA 4096-Bit-Schlüssel, die bei der ersten Erstellung des Channels generiert werden. Dies wird verwendet, um private Nachrichten und Beiträge während der Übertragung zu schützen.
Zusätzlich können Nachrichten mit einer „Ende-zu-Ende-Verschlüsselung“ erstellt werden, die von Hubzilla-Betreibern, ISPs oder anderen Personen, die den Passcode nicht kennen, nicht gelesen werden kann.
Öffentliche Nachrichten werden in der Regel weder bei der Übertragung noch bei der Speicherung verschlüsselt.
Private Nachrichten können zurückgezogen (nicht gesendet) werden, obwohl es keine Garantie gibt, dass der Empfänger sie noch nicht gelesen hat.
Beiträge und Nachrichten können mit einem Verfallsdatum versehen werden, nach dessen Ablauf sie auf der Seite des Empfängers gelöscht/entfernt werden.
Dienst-Föderation
Neben zusätzlichen „Cross-Post-Connectoren“ zu einer Vielzahl von alternativen Netzwerken gibt es eine native Unterstützung für den Import von Inhalten aus RSS/Atom-Feeds und deren Verwendung zur Erstellung spezieller Kanäle. Es sind auch Plugins verfügbar, um mit anderen über die Protokolle Diaspora und GNU-Social (OStatus) zu kommunizieren. Diese Netzwerke unterstützen keine nomadische Identität oder domänenübergreifende Zugriffskontrolle; allerdings wird die grundlegende Kommunikation mit/von Diaspora, Friendica, GNU-Social, Mastodon und anderen Anbietern, die diese Protokolle verwenden, unterstützt.
Es gibt auch eine experimentelle Unterstützung für OpenID-Authentifizierung, die in Zugriffskontrolllisten verwendet werden kann. Dies ist ein Projekt, an dem gearbeitet wird. Ihr Hubzilla-Hub kann als OpenID-Provider verwendet werden, um Sie bei externen Diensten, die diese Technologie nutzen, zu authentifizieren.
Channels können die Berechtigung haben, zu „derivativen Channels“ zu werden, bei denen zwei oder mehr bestehende Channels kombiniert werden, um einen neuen thematischen Channel zu erstellen.
Datenschutz-Gruppen
Unsere Implementierung von Datenschutzgruppen ähnelt den „Circles“ von Google und den „Aspekten“ von Diaspora. Dies ermöglicht Ihnen, Ihren eingehenden Stream nach ausgewählten Gruppen zu filtern und die ausgehende Zugriffskontrollliste automatisch auf die Mitglieder dieser Gruppe zu beschränken, wenn Sie etwas posten. Sie können dies jederzeit (vor dem Senden des Beitrags) rückgängig machen.
Verzeichnisdienste
Wir bieten einen einfachen Zugang zu einem Mitgliederverzeichnis und stellen dezentralisierte Tools zur Verfügung, die „Vorschläge“ für Freunde machen können. Die Verzeichnisse sind normale Hubzilla-Sites, die sich entschieden haben, die Rolle des Verzeichnisservers zu übernehmen. Dies erfordert mehr Ressourcen als die meisten typischen Sites und ist daher nicht die Standardeinstellung. Die Verzeichnisse werden synchronisiert und gespiegelt, so dass sie alle aktuelle Informationen über das gesamte Netzwerk enthalten (vorbehaltlich normaler Ausbreitungsverzögerungen).
TLS/SSL
Bei Hubzilla-Hubs, die TLS/SSL verwenden, wird die Kommunikation zwischen Client und Server über TLS/SSL verschlüsselt. In Anbetracht der jüngsten Enthüllungen in den Medien über die weit verbreitete, weltweite Überwachung und die Umgehung der Verschlüsselung durch die NSA und das GCHQ kann man davon ausgehen, dass HTTPS-geschützte Kommunikation auf verschiedene Weise kompromittiert werden kann. Private Kommunikation wird daher auf einer höheren Ebene verschlüsselt, bevor sie nach außen gesendet wird.
Channel-Einstellungen
Bei der Erstellung eines Channels wird eine Rolle ausgewählt, die eine Reihe von vorkonfigurierten Sicherheits- und Datenschutzeinstellungen anwendet. Diese werden nach bewährten Verfahren ausgewählt, um den Datenschutz auf dem gewünschten Niveau zu halten.
Wenn Sie eine „benutzerdefinierte“ Datenschutzrolle wählen, können Sie für jeden Kanal fein abgestufte Berechtigungen für verschiedene Aspekte der Kommunikation festlegen. Unter der Überschrift „Sicherheits- und Datenschutzeinstellungen“ gibt es zum Beispiel für jeden Aspekt auf der linken Seite sechs (6) mögliche Anzeige-/Zugriffsoptionen, die durch Anklicken des Dropdown-Menüs ausgewählt werden können. Es gibt auch eine Reihe anderer Datenschutzeinstellungen, die Sie bearbeiten können.
Die Optionen sind:
- Niemand außer Ihnen selbst. - Nur diejenigen, die Sie ausdrücklich zulassen. - Jeder, der in Ihrem Adressbuch steht. - Alle Personen auf dieser Website. - Alle Personen in diesem Netzwerk. - Jeder, der authentifiziert ist. - Jeder, der sich im Internet befindet.
Öffentliche und private Foren
Foren sind in der Regel Kanäle, an denen sich mehrere Autoren beteiligen können. Derzeit gibt es zwei Möglichkeiten, Beiträge in Foren zu veröffentlichen: 1) „Wand-zu-Wand“-Beiträge und 2) über @mention-Tags im Forum. Foren können von jedem erstellt und für jeden Zweck verwendet werden. Das Verzeichnis enthält eine Option zur Suche nach öffentlichen Foren. In privaten Foren können nur Beiträge verfasst werden, die oft nur von Mitgliedern gesehen werden.
Klonen von Accounts
Konten in Hubzilla werden als nomadische Identitäten bezeichnet, da die Identität eines Mitglieds nicht an den Hub gebunden ist, in dem die Identität ursprünglich erstellt wurde. Wenn Sie zum Beispiel ein Facebook- oder Gmail-Konto erstellen, ist es an diese Dienste gebunden. Sie können nicht ohne Facebook.com oder Gmail.com funktionieren.
Angenommen, Sie haben eine Hubzilla-Identität namens tina@Hubzillahub.com erstellt. Sie können sie auf einen anderen Hubzilla-Hub klonen, indem Sie denselben oder einen anderen Namen wählen: liveForever@SomeHubzillaHub.info
Beide Kanäle werden nun synchronisiert, d. h. alle Ihre Kontakte und Einstellungen werden auf Ihrem Klon dupliziert. Es spielt keine Rolle, ob Sie einen Beitrag von Ihrem ursprünglichen Hub oder von dem neuen Hub aus senden. Die Beiträge werden auf beiden Konten gespiegelt.
Dies ist eine ziemlich revolutionäre Funktion, wenn wir uns einige Szenarien vor Augen führen:
- Was passiert, wenn der Hub, in dem sich eine Identität befindet, plötzlich offline geht? Ohne Klonen ist ein Mitglied nicht in der Lage zu kommunizieren, bis der Hub wieder online ist (zweifellos haben viele von Ihnen den „Fail Whale“ von Twitter gesehen und verflucht). Beim Klonen loggen Sie sich einfach in Ihr geklontes Konto ein, und das Leben geht fröhlich weiter.
- Der Administrator Ihres Hubs kann es sich nicht mehr leisten, für seinen kostenlosen und öffentlichen Hubzilla-Hub zu bezahlen. Er kündigt an, dass der Hub in zwei Wochen abgeschaltet wird. Das gibt Ihnen reichlich Zeit, Ihre Identität(en) zu klonen und Ihre Hubzilla-Beziehungen, Freunde und Inhalte zu bewahren.
- Was ist, wenn Ihre Identität der staatlichen Zensur unterliegt? Ihr Hub-Anbieter kann gezwungen sein, Ihr Konto sowie alle Identitäten und zugehörigen Daten zu löschen. Mit Klonen bietet Hubzilla Widerstand gegen Zensur. Wenn Sie möchten, können Sie Hunderte von Klonen haben, die alle einen anderen Namen tragen und auf vielen verschiedenen Hubs im Internet verstreut sind.
Hubzilla bietet interessante neue Möglichkeiten für die Privatsphäre. Weitere Informationen finden Sie auf der Seite Tipps zum Schutz der Privatsphäre.
Es gelten einige Vorbehalte. Eine vollständige Erklärung des Klonens von Identitäten finden Sie auf der Seite Klonen.
Mehrere Profile
Es kann eine beliebige Anzahl von Profilen mit unterschiedlichen Informationen erstellt werden, die für bestimmte Ihrer Verbindungen/Freunde sichtbar gemacht werden können. Ein „Standard“-Profil kann von jedem eingesehen werden und kann begrenzte Informationen enthalten, während mehr Informationen für ausgewählte Gruppen oder Personen zugänglich sind. Das bedeutet, dass das Profil (und der Inhalt der Website), das Ihre biertrinkenden Freunde sehen, anders sein kann als das, was Ihre Kollegen sehen, und auch völlig anders als das, was für die Allgemeinheit sichtbar ist.
Account-Sicherung
Hubzilla bietet ein einfaches Konto-Backup mit nur einem Klick, bei dem Sie ein vollständiges Backup Ihres Profils herunterladen können. Die Backups können dann zum Klonen oder Wiederherstellen eines Profils verwendet werden.
Konto-Löschung
Konten können sofort gelöscht werden, indem Sie auf einen Link klicken. Das war's. Alle zugehörigen Inhalte werden dann aus dem Netz gelöscht (einschließlich der Beiträge und aller anderen Inhalte, die von dem gelöschten Profil erstellt wurden). Je nach der Anzahl der Verbindungen, die Sie haben, kann der Vorgang des Löschens entfernter Inhalte einige Zeit in Anspruch nehmen, aber er wird so schnell wie möglich durchgeführt.
Löschung von Inhalten
Alle in Hubzilla erstellten Inhalte bleiben unter der Kontrolle des Mitglieds (oder Channels), das sie ursprünglich erstellt hat. Ein Mitglied kann zu jeder Zeit eine Nachricht oder eine Reihe von Nachrichten löschen. Der Löschvorgang stellt sicher, dass der Inhalt gelöscht wird, unabhängig davon, ob er auf dem primären (Heimat-)Hub eines Channels oder auf einem anderen Hub gepostet wurde, bei dem der Channel über Zot (Hubzilla-Kommunikations- und Authentifizierungsprotokoll) remote authentifiziert wurde.
Medien
Ähnlich wie jedes andere moderne Blogging-System, soziale Netzwerk oder ein Micro-Blogging-Dienst unterstützt Hubzilla das Hochladen von Dateien, das Einbetten von Videos und das Verlinken von Webseiten.
Vorschau/Bearbeitung
Beiträge und Kommentare können vor dem Senden in der Vorschau angezeigt und nach dem Senden bearbeitet werden.
Abstimmen/Umfragen
Beiträge können in „Umfrage“-Elemente umgewandelt werden, die es den Lesern ermöglichen, Feedback zu geben, das in Zählern für „Zustimmung“, „Ablehnung“ und „Enthaltung“ zusammengefasst wird. Auf diese Weise können Sie das Interesse für Ideen messen und informelle Umfragen erstellen.
Erweitern von Hubzilla
Hubzilla kann auf verschiedene Weise erweitert werden: durch Anpassung der Website, persönliche Anpassung, Optionseinstellungen, Themen und Addons/Plugins.
API
Eine API ist für die Nutzung durch Dienste von Drittanbietern verfügbar. Ein Plugin bietet auch eine grundlegende Implementierung der Twitter-API (für die es Hunderte von Drittanbieter-Tools gibt). Der Zugriff kann über Login/Passwort oder OAuth erfolgen, und eine Client-Registrierung von OAuth-Anwendungen ist vorgesehen.
Glossar
-
Hub
Eine Instanz dieser Software, die auf einem Standard-Webserver läuft.
-
Grid
Das globale Netzwerk von Hubs, die mit Hilfe des Zot-Protokolls Informationen untereinander austauschen.
-
Kanal
Die grundlegende Identität im Grid. Ein Channel kann eine Person, einen Blog oder ein Forum repräsentieren, um nur einige zu nennen. Channels können Verbindungen mit anderen Channels herstellen, um Informationen mit sehr detaillierten Berechtigungen zu teilen.
-
klonen
Kanäle können Klone haben, die mit separaten und ansonsten nicht verbundenen Konten auf unabhängigen Hubs verbunden sind. Die mit einem Channel geteilte Kommunikation wird zwischen den Channel-Klonen synchronisiert, so dass ein Channel Nachrichten senden und empfangen und auf gemeinsame Inhalte von mehreren Hubs zugreifen kann. Dies bietet Ausfallsicherheit bei Netzwerk- und Hardwareausfällen, was für selbst gehostete oder mit begrenzten Ressourcen ausgestattete Webserver ein großes Problem darstellen kann. Das Klonen ermöglicht es Ihnen, einen Channel vollständig von einem Hub zu einem anderen zu verschieben und dabei Ihre Daten und Verbindungen mitzunehmen. Siehe nomadische Identität.
-
nomadische Identität
Die Fähigkeit, eine Identität über unabhängige Hubs und Webdomänen hinweg zu authentifizieren und einfach zu migrieren. Die nomadische Identität bietet echte Eigentumsrechte an einer Online-Identität, da die Identitäten der Kanäle, die von einem Konto auf einem Hub kontrolliert werden, nicht an den Hub selbst gebunden sind. Ein Hub ist eher eine Art „Gastgeber“ für Kanäle. Bei Hubzilla haben Sie kein „Konto“ auf einem Server wie bei typischen Websites, sondern Sie besitzen eine Identität, die Sie über das Netz mitnehmen können, indem Sie Klone verwenden.
-
Das neuartige JSON-basierte Protokoll zur Implementierung sicherer dezentraler Kommunikation und Dienste. Es unterscheidet sich von vielen anderen Kommunikationsprotokollen, indem es die Kommunikation auf einem dezentralen Identitäts- und Authentifizierungsrahmen aufbaut. Die Authentifizierungskomponente ähnelt dem OpenID-Konzept, ist aber von DNS-basierten Identitäten isoliert. Soweit möglich, erfolgt die Fernauthentifizierung still und unsichtbar. Dies bietet einen Mechanismus für eine verteilte Zugangskontrolle im Internet, der unauffällig ist.
Oberfläche / Bezeichnungen
Überblick
Während viele Funktionen und Möglichkeiten von Hubzilla denjenigen vertraut sind, die bereits Social-Networking-Websites und Blogging-Software verwendet haben, gibt es auch einige neue Konzepte und Funktionen, die den meisten Menschen noch nicht begegnet sind. Einige der neuen Ideen hängen mit der dezentralen Natur des Grids zusammen, andere mit dem fortschrittlichen Berechtigungssystem, das zum Schutz Ihrer Daten notwendig ist. Dieser Leitfaden soll Ihnen helfen zu verstehen, wie Sie Ihre nomadische Identität erstellen, konfigurieren und nutzen können.
Anmeldung / Registrierung
Nicht alle Hubzilla-Sites erlauben eine offene Registrierung. Wenn die Registrierung erlaubt ist, sehen Sie einen Link „Registrieren“ direkt neben der Anmeldeaufforderung auf der Homepage der Site. Wenn Sie diesem Link folgen, gelangen Sie auf die Registrierungsseite der Site. Auf einigen Sites werden Sie möglicherweise zu einer anderen Site weitergeleitet, auf der Hubs aufgeführt sind, bei denen eine Registrierung möglich ist. Da alle Hubzilla-Sites miteinander verbunden sind, spielt es keine Rolle, wo sich Ihr Account befindet.
Ihre E-Mail-Adresse
Bitte geben Sie eine gültige E-Mail-Adresse an. Ihre E-Mail-Adresse wird niemals veröffentlicht. Diese Adresse wird verwendet, um Ihr Konto zu aktivieren, um (optional) E-Mail-Benachrichtigungen für eingehende Nachrichten oder Artikel zu versenden und um verlorene Passwörter wiederherzustellen.
Kennwort
Geben Sie ein Passwort Ihrer Wahl ein und wiederholen Sie es im zweiten Feld, um sicherzustellen, dass es richtig eingegeben wurde. Da Hubzilla eine dezentrale Identität bietet, können Sie sich mit Ihrem Konto bei vielen anderen Websites anmelden.
Nutzungsbedingungen
Klicken Sie auf den Link, um die Nutzungsbedingungen der Website zu lesen. Wenn Sie sie gelesen haben, bestätigen Sie sie durch Anklicken des Kästchens im Anmeldeformular.
Anmelden
Sobald Sie die erforderlichen Angaben gemacht haben, klicken Sie auf die Schaltfläche „Registrieren“. Bei einigen Websites ist möglicherweise die Zustimmung des Administrators erforderlich, bevor die Registrierung bearbeitet werden kann; in diesem Fall werden Sie benachrichtigt. Bitte achten Sie auf Ihre E-Mail (einschließlich Spam-Ordner), um die Genehmigung für Ihre Registrierung zu erhalten.
Konten, Profile und Kanäle
Sobald Sie ein Konto im Grid registriert haben, haben Sie auch ein Profil und einen Kanal erstellt.
Konto
Sie haben ein Konto. Dieses besteht aus Ihrem E-Mail-Konto und Ihrem Passwort. Mit Ihrem Konto haben Sie Zugang zu Ihrem Profil und Ihrem Kanal.
Betrachten Sie Ihr Konto als die Art und Weise, wie Sie sich bei einer $Projektname-Website authentifizieren. Damit können Sie Dinge tun, wie z. B. Profile und Kanäle erstellen, mit denen Sie sich mit anderen Personen verbinden können.
Profil
Sicherlich haben Sie sich auch bei anderen Internetdiensten registriert, z. B. bei Foren oder Online-Communities. Bei all diesen Diensten haben Sie einige Informationen über sich selbst angegeben, z. B. Geburtsdatum, Land, Alter und Ähnliches.
Wenn Sie möchten, können Sie Ihr Profil hier einsehen: [baseurl]/profile/[webname] und bearbeiten, indem Sie auf das Bleistiftsymbol neben Ihrem Avatarbild klicken.
Im Gegensatz zu anderen Diensten bietet dir hubzilla den Vorteil, dass du viele weitere Profile anlegen kannst. Auf diese Weise können Sie zwischen Profilen unterscheiden, die sich speziell an jedermann (Ihr öffentliches Profil), Ihre Arbeitskollegen, Ihre Familie und Ihren Partner richten.
Betrachten Sie Ihr Profil als die grundlegenden Informationen über sich selbst, die Sie anderen Menschen mitteilen.
Kanal
Bei der Registrierung haben Sie Ihren ersten Kanal erstellt. Ja, neben mehreren Profilen können Sie auch mehrere Channels haben. Das mag am Anfang etwas verwirrend sein, aber lassen Sie uns die Dinge klarstellen. Sie haben bereits einen Kanal erstellt. Diesen können Sie für die Öffentlichkeit nutzen, um mit Leuten über das tägliche Leben zu kommunizieren. Aber vielleicht sind Sie ein begeisterter Leser von Büchern und das langweilt viele Leute. Also eröffnen Sie einen zweiten Kanal nur für Buchliebhaber, in dem Sie alle so viel über Bücher reden können, wie Sie wollen. Natürlich ist dies ein neuer Strom von Beiträgen, mit einem neuen Profil (... oder neuenProfilen...) und völlig anderen Kontakten. Einige Verbindungen können in beiden Kanälen bestehen, aber es wird auch welche geben, die nur in einem der beiden Kanäle bestehen. Sie selbst wechseln einfach zwischen den beiden Kanälen hin und her, so wie Sie auch im wirklichen Leben zwischen den Kanälen hin und her wechseln würden, wenn Sie sich mit Leuten unterhalten, die Sie auf der Straße treffen, oder mit Leuten, die Sie speziell für ein Gespräch über Bücher treffen. Sie können sich sogar mit sich selbst verbinden, oder besser: mit Ihrem anderen Kanal :)
Stellen Sie sich einen Kanal als verschiedene Bereiche vor, die verschiedenen Themen gewidmet sind und in denen Sie sich mit verschiedenen Menschen treffen.
Kanäle
Kanäle sind einfach Sammlungen von Inhalten, die an einem Ort gespeichert werden. Ein Kanal kann für alles Mögliche stehen. Er kann für Sie stehen, für eine Website, ein Forum, Fotoalben, einfach für alles. Für die meisten Menschen ist ihr erster Kanal „Ich“.
Die wichtigsten Funktionen für einen Kanal, der „mich“ repräsentiert, sind:
-
Sichere und private „spamfreie“ Kommunikation
-
Identität und „Single-Signon“ über das gesamte Netzwerk
-
Datenschutzkontrollen und Berechtigungen, die sich auf das gesamte Netz erstrecken
-
Verzeichnisdienste (wie ein Telefonbuch)
Kurz gesagt, ein Kanal, der Sie repräsentiert, ist „ich im Internet“.
Mit einem Account bei einem Hub können mehrere verschiedene Kanäle mit jeweils individueller Konfiguration angelegt und genutzt werden.
Kanäle erstellen
Nachdem Sie Ihr Konto erstellt haben, wird Ihnen der Bildschirm „Kanal hinzufügen“ angezeigt. Normalerweise wird Ihr erster Kanal einer sein, der Sie repräsentiert - es ist also eine gute Idee, Ihren eigenen Namen (oder ein Pseudonym) als Kanalnamen zu verwenden. Der Kanalname sollte als Titel oder kurze Beschreibung deines Kanals betrachtet werden. Das Feld „Wählen Sie einen kurzen Spitznamen“ ist vergleichbar mit einem „Benutzernamen“. Mit dem, was Sie hier eingeben, erstellen Sie eine Kanaladresse (im Fediverse auch als "Handle" bezeichnet), mit der sich andere Personen mit Ihnen verbinden können und mit der Sie sich auf anderen Websites anmelden können. Diese Adresse sieht aus wie eine E-Mail-Adresse und hat die Form <nickname>@<ihr_hub>
.
Hinweis: Bei anderen Diensten im Fediverse wird dem Handle ein "@" vorangestellt. Bei Hubzilla muss dieses Zeichen weggelassen werden, wenn man sich z.B. mit einem anderen Nutzer verbinden oder nach einem Handle suchen möchte.
Sie können weitere Kanäle über den Link „Kanalmanager“ erstellen.
Sobald Sie dies getan haben, ist Ihr Kanal einsatzbereit. Unter <ihr_hub>/channel/<Nickname>
finden Sie Ihren Kanal „Stream“. Hier werden Ihre jüngsten Aktivitäten in umgekehrter chronologischer Reihenfolge angezeigt.
Kanalrollen
Wenn Sie einen neuen Kanal erstellen, werden Sie aufgefordert, eine Berechtigungsrolle auszuwählen, je nachdem, wie Sie diesen Kanal nutzen möchten. Die beliebtesten Berechtigungsrollen sind die Rollen für soziale Netzwerke. Sie haben viele weitere Auswahlmöglichkeiten, die mit Facebook-Gruppen und -Seiten, kollaborativen Bereichen, Newsfeeds und mehr vergleichbar sind. Diese Rollen konfigurieren automatisch verschiedene Systemvariablen, von den Berechtigungen, die Freunden gewährt werden, bis hin zu den Standardeinstellungen für Privatsphäre und Sichtbarkeit. Es stehen erweiterte Konfigurationen zur Verfügung, mit denen Sie jeden dieser Parameter an Ihre Bedürfnisse anpassen können, aber wir haben die Erfahrung gemacht, dass die meisten Nutzer es vorziehen, die Einstellungen vorzunehmen und sie zu vergessen. Im Folgenden werden einige der verschiedenen Rollen beschrieben, die derzeit verfügbar sind, und wie sie sich auf Ihre Privatsphäre und Ihre Interaktionsmöglichkeiten auswirken.
Es gibt vier Kanal-Rollen:
- Öffentlich
- Persönlich
- Community Forum
- Benutzerdefiniert
Öffentlich
Der Kanal ist ein sehr freizügiges soziales Netzwerkprofil, das mit anderen föderierten sozialen Netzwerken kompatibel ist. Die Privatsphäre hat eine geringere Priorität als der einfache Zugang und die Verbindung mit anderen. Jeder im Netzwerk kann Ihre öffentlichen Beiträge kommentieren und Ihnen private Nachrichten schicken. Standardmäßig sind Beiträge und veröffentlichte Artikel öffentlich, aber Sie können dies bei der Erstellung des Artikels überschreiben und einschränken. Sie sind im Verzeichnis aufgeführt. Ihre Online-Präsenz und Ihre Verbindungen sind für andere sichtbar. Dieser Modus kann Ihre Anfälligkeit für unerwünschte Mitteilungen und Spam erhöhen. Der "klassische" Social-Media-Account.
Persönlich
Standardmäßig sind Beiträge und veröffentlichte Elemente öffentlich, aber Sie können dies bei der Erstellung des Elements außer Kraft setzen und einschränken. Sie sind im Verzeichnis aufgeführt. Ihre Online-Präsenz und Ihre Verbindungen sind für andere sichtbar. Nur Ihre unmittelbaren Verbindungen können Ihre öffentlichen Beiträge kommentieren und Ihnen private Nachrichten schicken.
Community Forum
Der Kanal ist ein typisches Forum. Standardmäßig sind Beiträge und veröffentlichte Artikel öffentlich. Mitglieder können Beiträge per !mention oder wall-to-wall posten. Das Einstellen von Fotos und anderen veröffentlichten Beiträgen ist gesperrt. Der Kanal ist im Verzeichnis sichtbar. Mitglieder werden automatisch hinzugefügt.
Benutzerdefiniert
Dies ist die genaueste Einstellung für Kanal-Rechte. Alle Rechte können fein-granular festgelegt werden. Vorsicht: Wer hier die falschen Einstellungen wählt, kann seinen Kanal unbrauchbar machen. Zum Glück lassen sich die Rechte auch wieder ändern, so dass man solche Fehlfunktionen beheben kann. Es ist sinnvoll, sich bei jedem einzelnen Recht zu überlegen, welche Auswirkungen es für einen selbst, als Kanalbesitzer, aber auch für andere Nutzer hat.
Für jeden Regelungspunkt sind folgende Einstellungen möglich:
- Nur ich
- Nur die, denen Du es explizit erlaubst
- Angenommene Verbindungen
- Beliebige Verbindungen
- Jeder auf dieser Webseite
- Alle Hubzilla-Mitglieder
- Jeder authentifizierte
- Jeder im Internet
Um die benutzerdefinierte Rolle zu bearbeiten, wählt man in den Einstellungen den Punkt "Privacy-Einstellungen". Rechts unten findet man den Button "Benutzerdefinierte Konfiguration der Kanal-Rolle". Klickt man darauf, erscheint ein Warn-Dialog, der auf die Risiken einer fehlerhaften Konfiguration aufmerksam macht. Bestätigt man, dass man die Rechte bearbeiten möchte, öffnet sich der Einstellungs-Dialog für die benutzerdefinierten Rollenrechte.
Profile
Hubzilla hat unbegrenzte Profile. Sie können verschiedene Profile verwenden, um verschiedene „Seiten von sich selbst“ für verschiedene Zielgruppen zu zeigen. Das ist etwas anderes als verschiedene Kanäle zu haben. Verschiedene Kanäle ermöglichen völlig unterschiedliche Informationen. Sie können einen Kanal für sich selbst, einen Kanal für Ihr Sportteam, einen Kanal für Ihre Website oder etwas anderes haben. Ein Profil ermöglicht fein abgestufte „Seiten“ eines jeden Kanals. Verschiedene Profile könnte man mit verschiedenen Visitenkarten einer Person vergleichen. Je nach Verwendungszweck werden auf der jeweiligen Visitenkarte unterschiedliche Informationen gegeben. Ihr öffentliches Standardprofil könnte zum Beispiel lauten: „Hallo, ich bin Fred und ich lache gerne“. Ihren engen Freunden können Sie ein Profil zeigen, auf dem steht „und ich werfe auch gerne Zwerge“.
Sie haben immer ein Profil, das als Ihr „Standard-“ oder „öffentliches“ Profil bezeichnet wird. Dieses Profil ist immer für die Allgemeinheit zugänglich und kann nicht versteckt werden (es kann seltene Ausnahmen auf privat betriebenen oder nicht angeschlossenen Sites geben). Sie können und sollten die Informationen, die Sie in Ihrem öffentlichen Profil zur Verfügung stellen, einschränken.
Wenn Sie möchten, dass Ihre Freunde Sie finden können, ist es hilfreich, wenn Sie die folgenden Informationen in Ihrem öffentlichen Profil angeben...
- Ihr richtiger Name oder zumindest ein Spitzname, den jeder kennt
- Ein Foto von Ihnen
- Ihr Standort auf der Erde, zumindest auf Länderebene.
Wenn Sie außerdem Leute treffen möchten, die allgemeine Interessen mit Ihnen teilen, nehmen Sie sich bitte einen Moment Zeit und fügen Sie Ihrem Profil einige „Schlüsselwörter“ hinzu. Zum Beispiel „Musik, Linux, Fotografie“ oder ähnliches. Sie können so viele Stichwörter hinzufügen, wie Sie möchten.
Wählen Sie „Profile bearbeiten“ aus dem Menü Ihrer Hubzilla-Site. Sie können ein bestehendes Profil bearbeiten, das Profilfoto ändern, Dinge zu einem Profil hinzufügen oder ein neues Profil erstellen. Sie können auch einen „Klon“ eines bestehenden Profils erstellen, wenn Sie nur ein paar Dinge ändern möchten, aber nicht alle Informationen erneut eingeben wollen. Klicken Sie dazu auf das Profil, das Sie klonen möchten, und wählen Sie dort „Dieses Profil klonen“.
In der Liste Ihrer Profile können Sie auch die Kontakte auswählen, die ein bestimmtes Profil sehen können. Klicken Sie einfach auf „Sichtbarkeit bearbeiten“ neben dem betreffenden Profil (nur verfügbar für Profile, die nicht Ihr Standardprofil sind) und klicken Sie dann auf bestimmte Verbindungen, um sie zu der Gruppe von Personen, die dieses Profil sehen können, hinzuzufügen oder sie daraus zu entfernen.
Sobald ein Profil ausgewählt wurde, sieht die Person, die Ihr Profil anschaut, das private Profil, das Sie zugewiesen haben. Wenn die Person nicht authentifiziert ist, wird sie Ihr öffentliches Profil sehen.
Es gibt eine Einstellung, die es Ihnen ermöglicht, Ihr Profil in einem Verzeichnis zu veröffentlichen und sicherzustellen, dass es von anderen gefunden werden kann. Sie können diese Einstellung auf der Seite „Einstellungen“ ändern.
Wenn Sie nicht möchten, dass Sie von anderen gefunden werden, ohne ihnen Ihre Kanal-Adresse mitzuteilen, können Sie Ihr Profil unveröffentlicht lassen.
Einstellungen
Hubzilla erlaubt vielfältige Einstellungen zu Verhalten, Optik, Features,Kanälen etc.
Sie erreichen die meisten Einstellungen über das Hauptmenü, wo Sie den Menüpunkt Einstellungen finden.
Es werden verschiedene Einstellungs-Kategorien zur Verfügung gestellt:
- Konto-Einstellungen
- Kanal-Einstellungen
- Privacy-Einstellungen
- Anzeige-Einstellungen
- sofern Klone des eigenen Kanals existieren: Klon-Adressen verwalten
Befinden Sie sich in der Stream Ansicht, ist ein neben dem Hauptmenü ein kleines Zahnrad (⚙)zu sehen,über welches Sie die
- Stream-Einstellungen
erreichen.
Außerdem gibt es noch verborgene Einstellungen
- Zusätzliche Funktionen
welche Sie jedoch nicht über das Menü oder ein Icon erreichen können.
Konto-Einstellungen
Mit den Konto-Einstellungen können Sie die Daten Ihres Accounts ändern.
Kanal-Einstellungen
Rufen Sie die Einstellungen über den Menüeintrag auf, so werden als Standard die Kanal-Einstellungen gezeigt. Die Grundeinstellungen dienen dazu, die Eigenschaften und Funktionen des aktuell ausgewählten (genutzten) Kanals einzustellen. Neben der Kanalrolle können Sie hier auch den Standard für automatisch erstellte Verzeichnisse in der Cloud (diese werden z.B. erzeugt, wenn Sie in einem Beitrag ein Bild als Anhang hochladen) festlegen.
Außerdem ist es möglich, den Kanal zu löschen (roter Button "Kanal löschen").
Wichtiger Hinweis: Es ist nicht ohne weiteres möglich, einen Kanal unter dem Namen des gelöschten Kanals neu auf diesem Hub zu erstellen (auch nicht durch Klonen). Das dient dem Schutz vor "Identitäts-Missbrauch". Möchte man auch wichtigen Gründen dennoch wieder einen Kanal mit diesem Namen installieren, dann kann man mit dem Admin des Hub Kontakt aufnehmen, ihm die Gründe darlegen (so dass er sicher sein kann, dass man ein berechtigtes Interesse hat) und bitten, die Sperre aufzuheben. Das kann nur er mit wenigen Handgriffen in der Datenbank tun.
Sie können außerdem den Verfallszeitraum für importierte Inhalte anderer Kanäle festlegen und diesen Import über zwei Filter regeln.
Die Benachrichtigungs-Einstellungen erlauben es, ganz genau festzulegen, ob man über bestimmte Ereignisse und Vorgänge benachrichtigt wird. Und ob die Benachrichtigung auch per E-Mail erfolgen soll.
Privacy Einstellungen
In den Privacy-Einstellungen können Sie festlegen, ob Ihre eigenen Beiträge durch Suchmaschinen indiziert werden dürfen, ob Sie Kontaktanfragen automatisch (ohne manuelle Genehmigung) akzeptieren, ob alle Nachrichten in denen Sie erwähnt werden, automatisch akzeptiert werden, ob Kommentare von Nutzern, die nicht zu Ihren Kontakten gehören, zur Moderation (freigeben / verwerfen) gestellt oder gelöscht werden und ob Sie OCAP-Zugriff erlauben.
Anzeige-Einstellungen
Mit den Anzeige-Einstellungen kann das Design des Kanals eingestellt werden. Überdies kann in gewissen Grenzen festgelegt werden, welche Inhalte dargestellt werden.
In den Design-Einstellungen kann man aus den installierten Themes auswählen und dein Design-Schema für das Thema festlegen.
Mit den Benutzerdefinierten Design-Einstellungen ist es möglich, das Farbschema den eigenen Vorstellungen anzupassen und Eckenradien, Standardgrößen sowie Standardmaße für Avatare festzulegen. Es werden als Standard zunächst die vereinfachten Einstellungen angezeigt, mit denen es nur möglich ist, den dunklen Modus festzulegen, eine schmale Navigationsleiste zu wählen, sowie die Breite des Inhaltsbereichs und die Schriftgröße.
Wenn Sie den Schalter "Erweiterte Einstellungen anzeigen" auf "Ja" stellen und die Auswahl absenden, werden die erweiterten Einstellungen angezeigt, mit denen man Farben, Avatarmaße und Hintergrundbilder festlegen kann.
Mit den Inhalts-Einstellungen lassen sich verschiedene Parameter auswählen (z.B. die Zeit bis zur Aktualisierung der Ansicht) und die Anzeige der "Links für neue Mitglieder", die bei neu angelegten Kanälen angezeigt werden, auszuschalten.
Klon-Adressen verwalten
Existieren vom aktuellen Kanal Klone auf anderen Hubs, so wird als weiterer Menüeintrag "Klon-Adressen verwalten" angezeigt. Damit können Sie festlegen, auf welchem Hub der der Hauptkanal (primärer Kanal) liegt (das legt auch den Teil des Handles hinter dem "@" fest).
Außerdem kann man Klone an dieser Stelle löschen. Für Kanäle auf fremden Servern empfiehlt es sich allerdings, den Kanal auf dem eigentlichen Hub zu löschen. Das Löschen aus der Klon-Verwaltung sollte nur genutzt werden, wenn der Hub des Klons nicht mehr existiert.
Stream-Einstellungen
Die Stream-Einstellungen erreicht man nicht über Hauptmenü → Einstellungen, sonder über das kleine Zahnradsymbol (⚙) neben dem Hauptmenü, das dort erscheint, sobald man die Stream-Ansicht aufruft.
Mit den Stream-Einstellungen kann man die Ansicht des Streams und dort zur Verfügung stehende Features (z.B. Stream-Filter, das Speichern von Suchanfragen etc.) auswählen.
Zusätzliche Funktionen (verborgene Einstellungen)
Die Einstellungen "Zusätzliche-Funktionen" sind in der Gesamtheit weder über das Menü, noch über ein Symbol/Icon erreichbar. Sämtliche einzelnen Funktions-Einstellungen kann man aber auch in der jeweiligen App über das Zahnrad neben dem Hauptmenü (Avatar-Bild) erreichen.
Es handelt sich um Einstellungen zu weiteren Funktionen in allen mögliche Bereichen von Hubzilla. Um die Einstellungen aufzurufen, muss man im Browser an die URL des Hubs /settings/features
anhängen, also z.B. https://klacker.org/settings/features
.
Die Voreinstellungen für sämtliche dieser Optionen werden vom Administrator des Hubs vorgenommen. Diese Voreinstellung kann durch den Nutzer in den "Zusätzlichen Funktionen" überschrieben werden.
Adlerdings hat der Administrator bei jeder Option auch die Möglichkeit, die Voreinstellung gegen Änderung zu sperren. Der Nutzer kann den Schalter für die Option zwar weiterhin umlegen, die Auswahl wird aber nicht gespeichert, sondern die Option wieder auf die Voreinstellung zurückgesetzt.
Verbinden mit Kanälen
Verbindungen in Hubzilla können sehr viele verschiedene Bedeutungen haben. Eine Verbindung ist genauer definiert als eine Reihe von Berechtigungen, die Sie einer anderen Person erteilt haben. In herkömmlichen sozialen Netzwerken erhalten alle Verbindungen die gleichen Berechtigungen oder höchstens zwei Stufen (Freunde und „Follower“). In Hubzilla kann eine Reihe von separaten Berechtigungen festgelegt/angepasst werden, abhängig von der Situation und der Beziehung, die Sie mit dem anderen Kanal haben. Sie können jemandem erlauben, Ihre Beiträge zu sehen, aber nicht Ihre Fotos. Sie können ihnen auch die Erlaubnis verweigern, Ihre Beiträge zu kommentieren oder private Nachrichten an Sie zu senden. Aber machen wir es uns einfach: Sie wollen mit jemandem befreundet sein, den Sie aus sozialen Netzwerken kennen. Wie machen Sie das?
Sie können sich das Verzeichnis ansehen. Das Verzeichnis ist auf allen Hubzilla-Websites verfügbar, d. h., wenn Sie von Ihrer eigenen Seite aus suchen, erhalten Sie Ergebnisse aus dem gesamten Netzwerk. Sie können nach Name, Interesse, Standort und Schlüsselwort suchen.
Wenn Sie das „Handle“ von jemandem bereits kennen, können Sie direkt mit ihm in Verbindung treten. Ein Handle sieht genauso aus wie eine E-Mail-Adresse (z. B. bob@example.com
), verweist aber auf eine Person im offenen sozialen Netz. Um eine Verbindung herstellen zu können, muss ein kompatibles Netzwerkprotokoll verwendet werden. Standardmäßig unterstützt diese Software das „Zot“-Protokoll, weitere Protokolle können jedoch über Plugins/Addons bereitgestellt werden. Weitere Informationen zur Verbindung mit Kanälen in anderen Netzwerken finden Sie weiter unten.
So verbinden Sie sich mit anderen Hubzilla-Kanälen:
Besuchen Sie das Profil des gewünschten Kanals, indem Sie auf ihr Foto im Verzeichnis, im Stream oder in den Kommentaren klicken, und es öffnet sich ihre Kanal-Homepage im Kanal-Betrachter. Auf der linken Seite des Bildschirms sehen Sie normalerweise einen Link mit der Bezeichnung „Verbinden“. Klicken Sie darauf, und schon sind Sie fertig. Je nach den Einstellungen des Kanals, mit dem Sie eine Verbindung herstellen möchten, müssen Sie möglicherweise warten, bis der Kanal Ihre Verbindung genehmigt hat, aber es sind keine weiteren Aktionen Ihrerseits erforderlich. Sobald Sie die Verbindung initiiert haben, werden Sie zum Verbindungseditor weitergeleitet. Hier können Sie bestimmte Berechtigungen für diesen Kanal zuweisen, wenn Sie Änderungen vornehmen möchten.
Sie können auch eine Verbindung zu einem beliebigen Kanal herstellen, indem Sie die Seite „Verbindungen“ Ihrer Website oder des Verzeichnisses aufrufen und den „Handle“ in das Feld „Neue Verbindung hinzufügen“ eingeben. Verwenden Sie diese Methode, wenn Ihnen jemand sein Handle mitteilt und Sie sich mit ihm verbinden möchten. Der Vorgang ist derselbe wie bei der Verbindung über die Schaltfläche „Verbinden“ - Sie werden dann zum Verbindungseditor weitergeleitet, um die Berechtigungen festzulegen.
So stellen Sie eine Verbindung zu Kanälen in anderen Netzwerken her:
Das Verfahren zum Verbinden mit "Kanälen" in anderen Netzwerken (wie z.B GNU-Social, Mastodon, Misskey, Pleroma und Diaspora) ist ähnlich - geben Sie deren „Handle“ in das Feld „+Add“ auf der Seite „Verbindungen“ ein. Bevor Sie dies jedoch tun, besuchen Sie bitte die App-Verwaltung im App-Menü und vergewissern Sie sich, dass das entsprechende Protokoll (Diaspora, GNU-Social/OStatus oder ActivityPub) in Ihrem Hub bereitgestellt und für Ihren Kanal aktiviert ist. Diese Netzwerke/Protokolle unterstützen keine Kontomigration und Standortunabhängigkeit. Wenn Sie also den Standort wechseln oder Ihren Kanal anderswo klonen, kann die Kommunikation mit diesen Verbindungen fehlschlagen. Aus diesem Grund sind diese Protokolle nicht standardmäßig aktiviert, sondern nur mit Ihrer Zustimmung. Die Aktivierung dieser Protokolle ist eine wichtige Entscheidung zwischen der Kommunikation mit Freunden in diesen Netzwerken und der Ausfallsicherheit des Kontos, falls Ihr Server ausfällt.
Einige Kommunikationsnetze bieten mehr als ein Protokoll an. So können Sie sich beispielsweise mit jemandem verbinden, der sowohl das „ostatus“- alsauch das „activitypub“-Protokoll für die Kommunikation verwendet. Im Allgemeinen bietet das 'activitypub'-Protokoll eine bessere Erfahrung als das 'ostatus'-Protokoll, aber Hubzilla wählt oft das erste Protokoll, das es entdeckt, und das ist vielleicht nicht das, was Sie wollen. Sie können sich mit jemandem über ein bestimmtes Protokoll verbinden, indem Sie den Protokollnamen in eckigen Klammern vor dessen „Handle“ setzen. Zum Beispiel
[activitypub]https://foo.bar/foobar
[ostatus]foobar@foo.bar
[diaspora]foobar@foo.bar
[zot]foobar@foo.bar
[feed]https://foo.bar/foobar
So verbinden Sie sich mit RSS-Feeds:
Ihr Hub-Administrator kann die Verbindung mit RSS-Feeds erlauben. Das Verfahren für die Verbindung mit einem RSS-Feed ist dasselbe, außer dass Sie die URL des Feeds in das Feld „Neue Verbindung hinzufügen“ eingeben (oder einfügen). Die Möglichkeiten können durch den Administrator Ihres Hubs eingeschränkt sein, weil Verbindungen mit Feeds teilweise für hohe Systemlast sorgen.
Posten
Möchten Sie einen Beitrag verfassen und teilen (veröffentlichen, wobei der Kreis der Empfänger bzw. derer, welche den Beitrag sehen können, eingeschränkt sein kann), so tun Sie dies in der Regel über das Feld "Teilen", das sich über dem Stream befindet. Klicken Sie in dieses Feld, öffnet sich der Beitragseditor.
Zu oberst gibt es das Feld für den Beitragstitel (optional), darunter befindet sich das Feld für die Zusammenfassung (Summary, ebenfalls optional nutzbar), sofern der Administrator Ihres Hubs diese Funktion erlaubt. Die Zusammenfassung kann auch für den Zweck einer Inhaltswarnung verwendet werden. Unter dem Feld für die Zusammenfassung befindet sich (sofern vom Admin aktiviert) ein Feld für Kategorien.
Darunter folgt das Textfeld, in welchem Sie den Beitragsinhalt erstellen können. Sie können, je nach Einstellung des Hubs, einfachen Text, Markdown, bbCode oder HTML für Formatierungen des Textes nutzen.
Am unteren Rand des Beitragseditors befinden sich einige Schaltflächen zur einfacheren Formatierung des Inhalts und für das einfügen von Elementen und das Nutzen zusätzlicher Funktionen: fett, kursiv, unterstrichen, Zitat, Code, Datei anhängen/hochladen, Link einfügen, Bild einfügen (ein unter Dateien bereits existierendes Bild), Standort einfügen, Verfallsdatum für den Beitrag festlegen, Veröffentlichungsdatum festlegen, Text verschlüsseln, Abstimmung (Umfrage) ein/aus, Kommentare deaktivieren. Rechts daneben befindet sich ein weiterer Block mit Schaltflächen. Hier kann man sich eine Vorschau des Beitrags anzeigen lassen, festlegen, ob der Beitrag ggf. noch bei anderen Netzwerken veröffentlicht wird, die Berechtigungs-Einstellungen (wer kann das Posting sehen) vornehmen und mit dem Button "Teilen" schließlich veröffentlichen.
Man erreicht den Beitrags-Editor auch, wenn man den entsprechenden Menüpunkt im App-Menü (oben rechts ⋮) auswählt oder das entsprechende Icon in der Navigationsleiste (sofern man die App "Beitrag schreiben" angepinnt hat).
Kommentieren
Möchte man einen Beitrag kommentieren, also auf diesen antworten, klickt man in das Feld am unteren Rand des Beitrag ("Kommentar"). Es öffnet sich an dieser Stelle der Kommentar-Editor, welcher dem Beitrags-Editor ähnelt. Es gibt hier aber keine Felder für einen Titel, eine Zusammenfassung und Kategorien. Unter dem Eingabe-Feld für den Inhalt des Kommentars befinden sich wiederum Schaltflächen für bestimmte Formatierungen (nicht alle, die es im Beitrags-Editor gibt, weil nicht alles in einem Kommentar möglich ist) und rechts wieder eine Schaltfläche für eine Vorschau, sowie einen Button "Absenden", um den Kommentar zu veröffentlichen.
Auch im Feld für den Kommentar-Inhalt kann man den Text mit Markdown, bbCode und HTML auszeichnen.
Da es kein Feld für eine Zusammenfassung gibt, ist es nicht möglich, diese für eine Inhaltswarnung bezüglich des Kommentars zu verwenden. Man kann das aber durch bbCode erreichen, indem man die Inhaltswarnung in [summary][/summary]
einschießt. Dadurch wird der gesamte nachfolgende Inhalt zunächst verborgen und kann per Klick angezeigt werden.
Bilder einfügen
Es gibt verschiedene Möglichkeiten, Bilder in Beiträge und Kommentare einzufügen.
Im Beitragseditor
Im Beitragseditor existieren zwei Schaltflächen, die es ermöglichen, Bilder einzufügen: "Bild einbetten" und "Datei anhängen/hochladen".
Mit "Bild einbetten" kann man ein bereits in der Cloud existierendes Bild in den Beitrag einfügen. Das Bild muss also entweder vorhanden sein, oder mal lädt es zu genau diesem Zweck z.B. mit der App "Dateien" hoch.
Wählt man diese Schaltfläche, öffnet sich eine Übersicht mit den vorhandenen ´Bilddateien und man muss nur das passende Bild auswählen und anklicken. Beachte: Nach der Auswahl des einzufügenden Bildes muss das Auswahlfenster wieder geschlossen werden. Es schließt sich nicht automatisch nach dem Einfügen eines Bildes, um die Möglichkeit zu haben, in einem Durchgang ggf. mehrere Bilder einzufügen.
Mit dem Auswählen wird das Bild, auf Originalgröße skaliert, als anklickbarer Link zur Quelldatei mittels der bbCode-Tags [zrl][zmg] [/zmg][/zrl]
am Ende des bisherigen Beitrags (nicht an der aktuellen Textcursor-Position) eingefügt.
Mit "Datei anhängen/hochladen" kann ein Bild direkt vom eigenen Gerät hochgeladen und am Ende des Beitrags eingebettet.
Es öffnet sich ein Dateiauswahl-Dialog mit dem man das Bild auf dem eigenen Gerät auswählen und hochladen kann. Es wird in ein ggf. automatisch erstelltes Unterverzeichnis in der Cloud hochgeladen und wieder mit den bbCode-Tags [zrl][zmg] [/zmg][/zrl]
am Ende des bisherigen Beitrags eingefügt.
Beachte: Bei dieser Methode wird das Bild, sofern kein Fließtext vorhanden ist, nicht auf Originalgröße skaliert, sondern als kleiners Vorschaubild dargestellt. Das führt dazu, dass um das Bild herum ggf. ein Karomuster-Hintergrund zu sehen ist.
Im Kommentareditor
Im Kommentareditor existiert lediglich die Möglichkeit, ein Bild hochzuladen und einzubetten. Die Schaltfläche für das Einfügen eines vorhandenen Bildes existiert dort nicht.
Möchte man dennoch ein bereits vorhandenes Bild einfügen, muss man das per Hand mit den Tags [img][/img]
oder [img=URL][/img]
tun. Dafür muss man die URL des Bildes kennen. Auf diese Weise kann man auch Bilder aus externen Quellen im Web einfügen.
Verwendet man [img=BREITExHÖHE][/img]
, kann man das Bild skalieren.
Alt-Text
Möchte man einen Alternativtext (Alt-Text), welcher angezeigt wird, wenn das Bild nicht dargestellt werden kann, oder - als Popup - wenn man mit dem Mauszeiger über das Bild fährt, so kann man diesen zwischen die beiden Tags [img=URL]ALT_TEXT[/img]
tun. Hat man das Bild in einen Beitrag nach der erstem Methode ("Bild einbetten"), muss man selbst Hand anlegen. Man muss die Skalierung, die im öffnenden zmg-Tag eingefügt wurde mit der URL des Bildes ersetzen und die automatisch eingefügte Bild-URL zwischen dem öffnenden und dem schließenden zmg-Tag durch den Alt-Text ersetzen.
Beispiel:
Das Bild wurde eingebettet und es wurde damit der Code
[zrl=https://klacker.org/photos/tutorial01/image/cd747cd9-3f05-42cd-94cc-91c7368c5a18][zmg=520x520]https://klacker.org/photo/cd747cd9-3f05-42cd-94cc-91c7368c5a18-2.png[/zmg][/zrl]
automatisch erstellt, dann muss er, um z.B. den Alt-Text "Hubzilla-Symbol auf hellgrauem Hintergrund" einzufügen, so geändert werden:
[zrl=https://klacker.org/photos/tutorial01/image/cd747cd9-3f05-42cd-94cc-91c7368c5a18][zmg=https://klacker.org/photo/cd747cd9-3f05-42cd-94cc-91c7368c5a18-2.png520x520]Hubzilla-Symbol auf hellgrauem Hintergrund[/zmg][/zrl]
Text Dekoration
BBcode syntax | Rendered text |
---|---|
[b]bold[/b] | bold |
[i]italic[/i] | italic |
[u]underlined[/u] | underlined |
[s]strike[/s] | |
[color=red]red[/color] | |
[hl]highlighted[/hl] | |
[font=courier]some text[/font] | |
[quote]quote[/quote] | |
[quote=Author]Author? Me? No, no, no...[/quote] | |
[size=small]small text[/size] [size=xx-large]xx-large text[/size] [size=20]20px exactly[/size] Size options include: xx-small, small, medium, large, xx-large | |
Add a horizontal bar [hr] Like this | |
This is [center]centered[/center] text |
Code-Blöcke
Code kann generisch in einem Block- oder Inline-Format dargestellt werden (je nachdem, ob es neue Zeilenzeichen im Text gibt), oder Sie können eine unterstützte Sprache für erweiterte Syntaxhervorhebung angeben. Die Syntaxhervorhebung erfordert ein geeignetes Rendering-Plugin wie hilite. Unterstützte Sprachen mit dem hilite-Plugin sind php, css, mysql, sql, abap, diff, html, perl, ruby, vbscript, avrc, dtd, java, xml, cpp, python, javascript, js, json, sh.
Wenn kein Rendering-Plugin installiert ist oder eine nicht unterstützte Sprache angegeben wird, entspricht die Ausgabe für syntaxmarkierte Codeblöcke dem Code-Tag des Blockformats.
BBcode syntax | Output |
---|---|
[code]function bbcode() { }[/code] | function bbcode() { } |
[code=php]function bbcode() { $variable = true; if( $variable ) { echo "true"; } }[/code] | |
[nobb][nobb]This is how [i]you[/i] can [u]show[/u] how to use [hl]BBcode[/hl] syntax[/nobb][/nobb] | This is how [i]you[/i] can [u]show[/u] how to use [hl]BBcode[/hl] syntax |
Listen
BBcode syntax | Rendered list |
---|---|
[ul] [*] First list element [*] Second list element [/ul] | - First list element - Second list element |
[ol] [*] First list element [*] Second list element [/ol] | 1. First list element 2. Second list element |
[list=A] [*] First list element [*] Second list element [/list] The list type options are 1, i, I, a, A . | A. First list element B. Second list element |
[dl terms="b"] [*= First element term] First element description [*= Second element term] Second element description [/dl] The terms style options can be any combination of: bbold iitalic uunderline mmonospace llarge hhorizontal — like this defintion list | First element term First element description Second element term Second element description |
Tabellen
BBcode syntax | Rendered table |
---|---|
[table border=0] [tr] [th]Header 1[/th][th]Header 2[/th] [/tr] [tr][td]Content[/td][td]Content[/td][/tr] [tr][td]Content[/td][td]Content[/td][/tr] [/table] | |
[table border=1] [tr] [th]Header 1[/th][th]Header 2[/th] [/tr] [tr][td]Content[/td][td]Content[/td][/tr] [tr][td]Content[/td][td]Content[/td][/tr] [/table] | |
[table] [tr] [th]Header 1[/th][th]Header 2[/th] [/tr] [tr][td]Content[/td][td]Content[/td][/tr] [tr][td]Content[/td][td]Content[/td][/tr] [/table] |
Links und eingebettete Inhalte
BBcode syntax | Output |
---|---|
[video]video URL[/video] [audio]audio URL[/audio] | VIDEO AUDIO |
[video='URL_TO_POSTER']video_link[/video] | |
[url=https://hubzilla.org]Hubzilla[/url] | Hubzilla |
An image [img]https://example.org/image.jpg[/img] in some text |
Hubzilla-spezifische codes
BBcode syntax | Output |
---|---|
Magic-auth version of [url] tag [zrl=https://hubzilla.org]Identity-aware link[/zrl] | |
Magic-auth version of [img] tag [zmg]https://hubzilla.org/some/photo.jpg[/zmg] | Image is only viewable by those authenticated and with permission. |
Observer-dependent output:[observer=1]Text to display if observer IS authenticated[/observer] | |
[observer=0]Text to display if observer IS NOT authenticated[/observer] | |
[observer.language=en]Text to display if observer language is English[/observer] | |
[observer.language!=de]Text to display if observer language is not German[/observer] | |
[observer.url] | channel URL of observer |
[observer.baseurl] | website of observer |
[observer.name] | name of observer |
[observer.webname] | short name in the url of the observer |
[observer.address] | address (ZOT-id) of observer |
[observer.photo] | profile photo of observer |
What is a spoiler? [spoiler]Text you want to hide.[/spoiler] | What is a spoiler? Click to open/close |
[toc data-toc='div.page-body' data-toc-headings='h1,h2'] Create a table of content in a webpage or wiki page. Please refer to the original jQuery toc to get more explanations. Optional param: 'data-toc'. If omitted the default is 'body' Optional param: 'data-toc-headings'. If omitted the default is 'h1,h2,h3' | |
[rpost=title]Text to post[/rpost] The observer will be returned to their home hub to enter a post with the specified title and body. Both are optional | [[baseurl]/rpost?f=&title=title&body=Text+to+post](file:///home/daniel/Fediverse/orig doc/member/[baseurl]/rpost?f=&title=title&body=Text+to+post) |
This requires the qrator plugin. [qr]text to post[/qr] | |
This requires a suitable map plugin such as openstreetmap. [map] | Generate an inline map using the current browser coordinates of the poster, if browser location is enabled |
This requires a suitable map plugin such as openstreetmap. [map=latitude,longitude] | Generate a map using global coordinates. |
This requires a suitable map plugin such as openstreetmap. [map]Place Name[/map] | Generate a map for a given named location. The first matching location is returned. For instance "Sydney" will usually return Sydney, Australia and not Sydney, Nova Scotia, Canada unless the more precise location is specified. It is highly recommended to use the post preview utility to ensure you have the correct location before submitting the post. |
[©] | © |
Das Grid
Als das "Grid" wird das Netzwerk aller Hubzilla-Hubs bezeichnet, die miteinander über das Zot-Protokoll kommunizieren. Das Grid ist quasi eine Untermenge des Fediverse und umfasst alle Hubzilla-Server.
Der Stream
Der Stream ist die Liste der Beiträge, Kommentare und Boosts von Nutzern im Fediverse. Er ist umgekehrt chronologisch sortiert (die neuesten Beiträge erscheinen zuoberst). Welche Beiträge Ihnen hier genau gezeigt werden, hängt weitgehend von Ihren Berechtigungseinstellungen ab.
Der Stream (bei anderen Fediversedienste wird er auch "Timeline" genannt) kann durch verschiedene Filter gefiltert werden: nach Direktnachrichten, Ereignissen, Umfragen, Privacy Gruppen, Foren, Markierten Beiträgen, den eigenen Beiträgen, gespeicherte Ordner, Namen.
Der Stream im Fediverse wird nicht durch Algorithmen, die vermeintlich interessante Inhalte für den Nutzer auswählt, erstellt, sondern wird ausschließlich durch den Nutzer selbst bestimmt. Im Fediverse sind Sie, der Nutzer, der Algorithmus für den Stream.
Mit Postings interagieren
Mit Postings, die man im Stream sieht, kann man interagieren. Das ist einer der Zwecke von Sozialen Netzwerken. Man kann einen solchen Beitrag kommentieren, es sind aber noch weitere Möglichkeiten der Interaktion möglich.
Die Schaltflächen (Buttons) dafür findet man im Beitrag unten rechts.
Man kann einen Beitrag "mögen" 🖒 oder "nicht mögen" 🖓 oder man kann mit einem Emoji auf einen Beitrag reagieren:
Weitere Funktionen befinden sich im Menü ⚙.
Repeat
Mit dem Repeaten (Wiederholen) von Beiträgen, wird der Beitrag an die eigenen Verbindungen verteilt. Kommentare landen (im Gegensatz zu geteilten Beiträgen) beim Original-Beitrag.
Dieses Verhalten entspricht dem "Boosten", wie man es z.B. von Mastodon oder anderen Fediverse-Diensten kennt.
Teilen
Mit dem Teilen (Weitersagen) von Beiträgen wird ein Beitrag eines anderen Nutzers auf dem eigenen Kanal erneut gepostet. Es wird eine neue Konversation im eigenen Kanal erzeugt. Kommentare dazu landen bei der neuen Konversation und nicht bei der ursprünglichen.
Das Teilen von Beiträgen funktioniert nur aus dem Stream oder dem eigenen Kanal, nicht jedoch aus einem „fremden“ Kanal.
Link zur Quelle
Mit "Link zur Quelle" gelangt man zur eigentlichen Quelle eines Beitrags. Man landet beim Original-Beitrag auf der Instanz des Beitragserstellers.
In Ordner speichern
Möchte man sich Postings für später merken, so kann man das durch Markierung tun. Bei einer großen Zahl solchermaßen gemerkter Postings wird es aber leicht unübersichtlich.
Praktischer ist es, solche Beiträge in verschiedenen "Ordner" zu speichern. Das sind kategorisierte Markierungen.
Wählt man "In Ordner speichern", so öffnet sich ein Dialogfenster zur Auswahl des Ordners.
In dem Textfeld kann man einen Ordnernamen vergeben. Sind schon Ordner vorhanden, sorgt ein zweifacher Kick in das Textfeld dafür, dass eine Auswahlliste der vorhandenen Ordner angezeigt wird, um einen davon auszuwählen.
Hat man einen Beitrag in einem Ordner abgelegt, erkennt man dies an Ordersymbol (inklusive Ordnernamen) unten links am Beitrag.
Dieses Symbol dient auch dazu, einen Beitrag wieder aus eienm Ordner zu entfernen, indem man auf das "X" im Symbol klickt.
In der Stream-Ansicht findet man in der linken Seitenleiste den Eintrag "Gespeicherte Ordner". Klickt man darauf werden sämtliche vorhandenen Ordner angezeigt. Wählt man nun einen Ordner aus, so werden sämtliche Postings, die man in diesem Ordner abgelegt hat in (umgekehrter) chronologischer Reihenfolge im Stream angezeigt.
Dieses Feature ist vergleichbar mit den "Clips" (= kategorisierte Lesezeichen), wie man sie von Misskey und den Forkeys kennt.
Markierungsstatus (Stern) umschalten
Das Umschalten des Markierungssterns darf nicht mit dem "Sternen" (= Favorisieren) anderer Fediversedienste (z.B. Mastodon) verwechselt werden. Während das "Sternen" bei diesen Diensten eine positive Wertung des Beitrags darstellt, die am ehesten einem "Link" entspricht, ist das Markieren mit einem Stern bei Hubzilla mit dem Setzen eines Lesezeichens vergleichbar. Mit dem Umschalten (ein Klick setzt den Stern, ein weiterer entfernt ihn wieder) wird der Beitrag für den Nutzer selbst als eine Art Lesezeichen gesetzt.
Einen "gesternten" Beitrag erkennt man am Sternsymbol unten links.
In der Stream-Ansicht findet man in der linken Seitenleiste den Eintrag "Markierte Beiträge". Klickt man darauf werden sämtliche markierte Postings in (umgekehrter) chronologischer Reihenfolge im Stream angezeigt.
Quellcode anzeigen
Mit dieser Funktion kann man sich den Quelltext eines Beitrags anzeigen lassen. Der Inhalt wird also nicht in formatierter Form gerendert, sondern umfasst den Text inklusive aller Auszeichnungs-Tags (Markdown, bbCode, HTML).
Die Funktion scheint deshalb eher etwas für fortgeschrittene oder sehr neugierige Nutzer zu sein.
Allerdings enthält sie ein Feature, das für jeden hilfreich sein kann.
Neben der internen Beitrags-Id findet man zwei Hyperlinks: "plink" und "llink".
"plink" bedeutet "Permalink" und entspricht dem Link zur Quelle.
"llink" bedeutet "lokaler Link" und verweist auf den Ort des Postings auf der eigenen Instanz (Hub). Ein Klick darauf führt nicht dazu, dass man seine eigene Instanz verlässt, sondern zeigt den Beitrag in der Einzelansicht an.
Unterhaltung folgen / nicht mehr folgen
Mittels Unterhaltung folgen / Unterhaltung nicht mehr folgen kann man umschalten, ob man einem Thread folgen möchte, also ob man Benachrichtigungen über Kommentare/Antworten, über Likes, Dislikes, Emoji-Reaktionen oder darüber, dass der Beitrag geteilt oder wiederholt wurde, erhalten möchte.
Löschen
Mit dieser Funktion kann man Beiträge aus dem Stream löschen. Ein normaler Nutzer hat diese Möglichkeit nicht beim globalen Stream. In diesem kann nur ein Administrator Beiträge entfernen.
Konversationsmerkmale
Über diesen Dialog ist es möglich, bestimmte Konversationsmerkmale für einen Beitrag festzulegen:
- Zulassen von Emoji-Reaktionen
- Zulassen von Dislikes
- Zulassen des lokalen Markierens (Sternchen)
- Zulassen von Antworten auf Kommentare
Öffentlicher Beitrags-Stream
Sofern der Administrator eines Hub den öffentlichen Beitrags-Stream aktiviert hat, können Sie als Nutzer die App "Öffentlicher Beitrags-Stream" installieren und aktivieren.
Während im "normalen" Stream alle Beiträge und Aktivitäten von Ihnen selbst und all Ihren Verbindungen erscheinen, ist der öffentliche Beitrags-Stream umfassender.
Es gibt zwei Möglichkeiten:
- Hat der Administrator den öffentlichen Beitrags-Stream auf den eigenen Hub beschränkt, so erscheinen dort sämtliche öffentlichen Beiträge und Aktivitäten aus den Streams aller Nutzer, die einen Account auf eben diesem Hub haben.
- Hat der Administrator den öffentlichen Beitrags-Stream nicht auf den eigenen Hub beschränkt, so werden alle öffentlichen Beiträge aller Kanäle des eigene Hub, öffentliche Inhalte, die beim eigenen Hub eintreffen (also .B. Kommentare auf Beiträge der Nutzer des Hubs, die von anderen Instanzen stammen), sowie zufällig eingesammelte Inhalte von Kanälen, die dem eigenen Hub bekannt sind (also alle Kontakte aller Kanäle auf dem eigenen Hub).
Der öffentliche Beitrags-Stream ist nicht unmoderiert. Der Administrator eines Hub hat die Möglichkeit, Beiträge aus dem öffentlichen Beitrags-Stream zu löschen ("Admin delete"). Diese Beiträge sind dann tatsächlich aus dem öffentlichen Beitragsstream des eigenen Hub gelöscht. Sie erscheinen auch nicht in der öffentlichen Stream-Ansicht anderer Kanäle des Hub.
Apps
Im frisch installierten Zustand verfügt eine Hubzilla-Instanz über etliche Grundfunktionalitäten. Es gibt jedoch viele Features, die nicht zur Basis-Installation gehören und auch nicht für einen neu erstellten Kanal sofort zur Verfügung stehen.
Die überwiegende Zahl der Funktionen sind als "Applikationen" (kurz "Apps") realisiert.
Die Apps erreichen Sie mit dem "App-Menü", das mit der Schaltfläche "⋮" symbolisiert wird (und sich bei den meisten Hubs ganz rechts in der Navigationsleiste befindet). Häufig benutzte Appskönnen Sie auch an der Navigationsleiste anpinnen, so dass Sie nicht bei jedem Aufruf erst das App-Menü öffnen müssen.
Wie viele und welche Apps Ihnen zur Verfügung stehen, hängt davon ab, wie der Administrator den Hub konfiguriert hat.
Appverwaltung
Sie können die Apps für Ihren Kanal mit der Appverwaltung verwalten. Diese erreichen Sie ebenfalls im App-Menü unter dem untersten Menüpunkt "+ Apps"
Nach dem Aufrufen der Appverwaltung werden Ihnen die bereits installierten Apps angezeigt.
In der linken Seitenleiste können Sie nun zwischen "Installierte Apps" und "Verfügbare Apps" umschalten.
Verfügbare Apps
Bei den verfügbaren Apps finden Sie sämtliche auf Ihrem Hub zur Verfügung stehenden Apps. Einige davon sind bereits installiert. Über den Button neben der App kann man Apps installieren oder bereits installierte Apps aktualisieren.
Installierte Apps
Im Tab der installierten Apps finden Sie sämtliche Apps, die für Ihren Kanal installiert sind. Rechts von jeder App befinden sich zwei oder drei Buttons mit Symbolen: ein Sternsymbol, ein Pinnadelsymbol und ggf. ein Zahnradsymbol.
Das Sternsymbol dient dazu, die App im App-Menü als Menüeintrag zugänglich zu machen.
Mit dem Pinnadelsymbol kann man die App in der Navigationsleiste anpinnen.
Gibt es für eine App einen Dialog für app-spezifische Einstellungen, so erreichen Sie diesen über den Button mit dem Zahnradsymbol.
Apps verwalten
Im Tab der installierten Apps ist genz oben auch ein Button vorhanden, welcher mit "Apps verwalten" beschriftet ist. Mit diesem Button gelangen Sie auf die Seite "Apps verwalten", auf welcher Sie Apps wieder deinstallieren und installierte in gewissen Grenzen auch bearbeiten können.
Dort ist es auch möglich eigene Apps zu erstellen (Nur für fortgeschrittene Nutzer!).
Apps im Menü sortieren
Die Apps, welche Sie dem App-Menü zugefügt haben, können sie dort ganz einfach per Drag-and-drop sortieren und Ihre bevorzugte Reihenfolge festlegen.
Wichtige Apps
Wenn Sie Ihren Kanal hauptsächlich für social Networking nutzen möchten, gibt es einige Apps, die nicht als Standard installiert oder aktiviert sind, welche teilweise essenziell wichtig sind.
Um am gesamten Fediverse teilzunehmen, müssen Sie die App "ActivityPub-Protokoll" installieren.
Um einfacher lohnende Kontakte zu finden und zu erleben, was im Fediverse gerade passiert, kann man die App "Öffentlicher Beitragsstream" installieren und nutzen.
Ebenfalls sinnvoll und empfehlenswert ist die App "NSFW", mit welcher man eigenen Contentwarning-Filter erstellen und nutzen kann.
Außerdem sollten Sie die App "Superblock" installieren, welche es Ihnen ermöglicht, bestimmte Nutzer komplett zu blockieren.
Als ebenfalls wichtig ist die App "Privacy Groups" zu erachten. Mit dieser ist es möglich, Kontaktgruppen zu erstellen und sowohl nach diesen zu filtern, als auch mit den Kontakten aus den Gruppen geschlossene Kommunikation zu betreiben.
Achtung: Die App "Öffentlicher Beitragsstream" steht zur Installation nur zur Verfügung, wenn der Administrator des Hub diesen Stream aktiviert hat.
Verbindungen
Mit der App "Verbindungen" können Sie sich alle Ihre Verbindungen anzeigen lassen.
In der Übersicht kann man für jede Verbindung
- den Kanalnamen
- das Datum der Verbindung
- die Kanaladresse (Handle)
- das Netzwerk des Kontakts (ActivityPub, Zot, RSS, Diaspora...)
- man kann sich über einen daneben stehenden Filter die kürzlichen Aktivitäten des Kanals im Stream anzeigen lassen
- das Profilbild
- und durch einen farbigen Punkt (Ampelfarben) die vom Kontakt eingeräumten Rechte (lassen Sie den Mauszeiger über dem farbigen Punkt ruhen, werden Ihnen die eingeräumten Rechte angezeigt)
sehen.
Außerdem ist wird ein Label angezeigt, welches den Typ der Verbindung anzeigt oder warnt, dass (bei Klonen) an diesem Ort noch keine Verbindung besteht.
Rechts befindet sich an jedem Kontakteintrag ein Button "Bearbeiten", mit welchem man die Verbindung mittels Verbindungs-Editor bearbeiten kann.
Verbindungs-Editor
Klicken Sie in der App "Verbindungen" auf den Button "Bearbeiten" an einem Kontakt, öffnet sich der Verbindungs-Editor.
Mit dem Editor können Sie einem Kontakt eine bestimmte Kontaktrolle zuweisen. Bei Bedarf können Sie sich über den Button "Contact Roles" die vorhandenen Rollen anzeigen lassen und auch neue Rollen erstellen. Ein weiterer Button (Berechtigungen vergleichen) können Sie die zugewiesenen Berechtigungen mit denen der Standard-Berechtigungsrolle vergleichen.
Mit dem Tab "Privacy Gruppen" können Sie einen Kontakt einer oder mehreren Privacy-Gruppen zuordnen.
Über den Tab "Profile" können Sie festlegen, welches Ihrer Profile (sofern Sie mehrere angelegt haben) dem Kontakt angezeigt wird.
Mit den Inhaltsfiltern ist es Ihnen möglich, Beiträge eines Kontakts mit bestimmten Inhalten herauszufiltern bzw. über Filter festzulegen, dass nur Beiträge mit definierten Inhalten im Stream landen.
Mit den Kontakt-Tools können sie den Kontakt
- blockieren,
- ignorieren,
- archivieren,
- verstecken
oder
- löschen.
Diaspora-Kompatibilität
Das Diaspora Protocol Addon ermöglicht es einer Website, mit dem Diaspora-Protokoll zu kommunizieren, was die Kommunikation und Verbindungen mit Diaspora-Mitgliedern (und auch Friendica-Mitgliedern, da dieses Netzwerk ebenfalls das Diaspora-Protokoll anbietet) ermöglicht. Dieses Addon ist in den Serverkonfigurationen 'Basic' und 'Standard' verfügbar. Es ist nicht verfügbar mit und das Plugin ist komplett deaktiviert, wenn Sie die 'pro' Serverkonfiguration verwenden. Der Grund dafür ist, dass das Diaspora-Protokoll nicht sehr ausgereift ist und viele Funktionen von $projectname nicht gut damit funktionieren. Die Mitglieder müssen sich der Einschränkungen des Protokolls bewusst sein eigenen Aktivitäten auf diejenigen beschränken, die mit Diaspora kompatibel sind. Die „Pro“-Serverkonfiguration ist frei von diesen Einschränkungen und Sie können alle Projektfunktionen und -fähigkeiten nutzen, ohne sich Gedanken darüber zu machen, wie sie sich auf andere Netzwerke übertragen lassen. Viele Funktionen sind einzigartig für $Projektname und werden durch das „Zot“-Protokoll unterstützt, das unsere native Kommunikationssprache zwischen Servern/Hubs ist. Wenn Sie eine Konfiguration verwenden, die direkte Diaspora-Kommunikation erlaubt, sollten Sie sich der hier dargestellten Einschränkungen bewusst sein.
- Das Zurückziehen von privaten Nachrichten (unsend) ist bei Diaspora-Verbindungen nicht möglich.
- Private Nachrichten und die dazugehörigen Kommentare werden in Diaspora und Friendica als E-Mail-Benachrichtigungen im Klartext gesendet. Dies ist ein großes Problem für die Privatsphäre und betrifft alle privaten Kommunikationen, bei denen sich ein Mitglied der Konversation in einem anderen Netzwerk befindet. Sei dir dessen bewusst.
- Die Zugangskontrolle funktioniert nur für Beiträge und Kommentare. Diaspora-Mitgliedern wird die Erlaubnis verweigert, wenn sie versuchen, auf andere zugriffskontrollierte hubzilla-Objekte wie Dateien, Fotos, Webseiten, Chatrooms usw. zuzugreifen. Im Falle von privaten Fotos, die mit Beiträgen verlinkt sind, sehen sie ein „Verbotszeichen“ anstelle des Fotos. Diaspora hat kein Konzept für private Medien und bietet eine Illusion von Fotoprivatsphäre, indem es unkenntliche URLs verwendet, anstatt das Foto vor dem Schnüffeln durch unbefugte Betrachter zu schützen.
Es gibt keine andere Möglichkeit, als Ihre Medienressourcen öffentlich zu machen (für jeden im Internet).
- Bearbeitete Beiträge werden nicht zugestellt. Die Diaspora-Mitglieder sehen den ursprünglichen Beitrag/Kommentar ohne Bearbeitungen. Das Protokoll enthält keinen Mechanismus, um einen bestehenden Beitrag zu aktualisieren. Es ist nicht möglich, einen Beitrag zu löschen und einen neuen unsichtbar zu übermitteln, da sich die Message-ID ändert und wir dieselbe Message-ID in unserem eigenen Netzwerk behalten müssen. Die einzige Abhilfe besteht darin, den Beitrag/Kommentar zu löschen und ihn erneut zu übermitteln. (Wenn es sich um einen Beitrag handelt, werden dabei alle vorhandenen Likes/Kommentare gelöscht). Eventuell werden wir eine Möglichkeit anbieten, die veraltete Kopie nur in Diaspora zu löschen und sie in Netzwerken, die Änderungen verarbeiten können, intakt zu lassen.
- Nomadische Identität (nur $projectname 'standard') wird nicht mit Diaspora funktionieren. Wir werden eventuell eine Option bereitstellen, die es Ihnen ermöglicht, die Freigabe von allen Ihren Klonen zu starten, wenn Sie die erste Verbindung herstellen. Die Diaspora-Person muss dies nicht akzeptieren, aber wenn sie die Verbindung akzeptiert, kann die Kommunikation fortgesetzt werden. Ohne diese Option müssen Sie, wenn Sie zu einem anderen Server gehen, von dem aus Sie die Verbindung ursprünglich hergestellt haben, oder wenn Sie die Verbindung herstellen, bevor Sie den Klon erstellt haben, die Verbindung von dem neuen Ort aus erneut herstellen.
- Das Ablaufen der Post wird auf Diaspora nicht unterstützt. Wir können Ihnen eine Option anbieten, um ablaufende Beiträge nicht an das Netzwerk zu senden. In Zukunft kann dies mit einer Remote-Löschanforderung bereitgestellt werden.
- Eine Ende-zu-Ende-Verschlüsselung wird nicht unterstützt. Wir werden diese Beiträge in ein Schlosssymbol übersetzen, das von der Diaspora-Seite aus nicht entsperrt werden kann.
- Die Überprüfung von Nachrichten wird in Zukunft unterstützt werden.
- Mehrere Profile werden nicht unterstützt. Diaspora-Mitglieder können nur Ihr Standardprofil sehen.
- Geburtstagsereignisse werden in Diaspora nicht angezeigt. Andere Ereignisse werden übersetzt und als Post verschickt, aber alle Zeiten werden entweder in der Zeitzone des Ursprungskanals oder in GMT angegeben. Wir kennen die Zeitzone des Empfängers nicht, da Diaspora dieses Konzept nicht hat.
- Wir erlauben derzeit standardmäßig, dass Tags gekapert werden können. Es gibt eine Option, mit der Sie verhindern können, dass das andere Ende des Netzwerks Ihre Tags entführt und sie auf seine eigenen Ressourcen zeigt.
- Community-Tags werden nicht funktionieren. Wir werden eine Tagging-Aktivität als Kommentar senden. Das wird nichts bewirken.
- Privatsphären-Tags (@!somebody) werden für Diaspora-Mitglieder nicht verfügbar sein. Diese Tags müssen möglicherweise entfernt oder unkenntlich gemacht werden, um zu verhindern, dass sie gekapert werden - was zu Datenschutzproblemen führen könnte.
- Plus-getaggte hubzilla-Foren sollten von Diaspora aus funktionieren.
- Du kannst keine Diaspora-Kanäle als Kanalquellen verwenden.
- Ablehnungen von Beiträgen werden in Kommentare umgewandelt und Du wirst die Möglichkeit haben, diese als Kommentare zu senden oder sie nicht an Diaspora zu senden (das keine Ablehnungen bietet). Derzeit werden sie nicht gesendet.
- Wir werden das Gleiche für Likes und Dislikes von Kommentaren tun. Sie können entweder als Kommentar gesendet werden oder Sie werden die Möglichkeit haben, zu verhindern, dass sie an Diaspora übermittelt werden. Derzeit werden sie nicht gesendet.
- Emojis sind derzeit nicht übersetzt.
- „Beobachter-Tags“ werden in leeren Text umgewandelt.
- Eingebettete Apps werden in Links umgewandelt.
- Eingebettete Seitendesign-Elemente (in Arbeit) werden entweder entfernt oder in eine Fehlermeldung umgewandelt.
- Diaspora-Mitglieder werden nicht im Verzeichnis angezeigt.
- Es gibt Unterschiede in der Kompatibilität von Oembed zwischen den Netzwerken. Einige eingebettete Ressourcen werden auf der einen oder anderen Seite in einen Link umgewandelt.
Verzeichnis
Hubzilla bietet über die App (im App-Menü ⋮) ein Kanalverzeichnis an. Im Verzeichnis werden die Kanäle des Hubzilla-Grid aufgeführt.
Über die Verzeichnisoptionen in der linken Seitenleiste kann der Umfang des Verzeichnisses gefiltert werden. So können Sie z.B. die Auflistung auf Kanäle des eigenen Hub beschränken.
Außerdem gibt es in der linken Seitenleiste einen Schlüsselwörter-Wolke, über welche Sie Kanäle mit entsprechenden Interessen/Schwerpunkten finden können.
Ebenfalls in der linken Seitenleiste befindet sich ein Suchfeld, um Kanäle durch Namen / Namensbestandteile oder Interessen (Schlagwörter) zu finden.
Sie können sich dann durch Klick auf den entsprechenden Button direkt mit einem gefundenen Kanal verbinden.
Erweiterte Verzeichnissuche
Die erweiterte Verzeichnissuche wird im „Expertenmodus“ auf der Seite Einstellungen => Zusätzliche Funktionen aktiviert.
Auf der Verzeichnisseite wird eine Option namens „Erweitert“ im Widget „Kanäle suchen“ (normalerweise in der Seitenleiste) angezeigt. Wenn Sie auf „Erweitert“ klicken, wird ein weiteres Suchfeld geöffnet, in das Sie erweiterte Suchanfragen eingeben können. Zu den erweiterten Suchanfragen gehören
- name=xxx [Kanalname enthält xxx]
- address=xxx [Kanaladresse (Webbie) enthält xxx]
- locale=xxx [Gebietsschema (typischerweise 'Stadt') enthält xxx]
- region=xxx [Region (Bundesland/Territorium) enthält xxx]
- postcode=xxx [Postleitzahl enthält xxx]
- country=xxx [Ländername enthält xxx]
- gender=xxx [Geschlecht enthält xxx]
- marital=xxx [Familienstand enthält xxx]
- sexual=xxx [Sexuelle Präferenz enthält xxx]
- keywords=xxx [Schlüsselwörter enthalten xxx]
Es gibt viele Gründe, warum ein Treffer nicht das liefert, wonach Sie suchen, da viele Kanäle in ihrem (öffentlichen) Standardprofil keine detaillierten Informationen bereitstellen und viele dieser Felder Freitext-Eingaben in mehreren Sprachen zulassen - und dies kann schwierig sein, einen genauen Treffer zu erzielen. Zum Beispiel können Sie bessere Ergebnisse erzielen, wenn Sie jemanden in den USA mit 'country=u' finden (zusammen mit einigen seltsamen Kanälen aus Deutschland, Bulgarien und Australien), da dies in einem Profil als US, U.S.A, USA, Vereinigte Staaten, usw. dargestellt werden könnte.
Künftige Überarbeitungen dieses Tools könnten versuchen, einige dieser Schwierigkeiten zu beseitigen. Anfragen können mit 'und', 'oder' und 'und nicht' verbunden werden.
Begriffe, die Leerzeichen enthalten, müssen in Anführungszeichen gesetzt werden.
Beispiel:
name=„charlie brown“ und country=canada und nicht gender=female
Kanäle blockieren/ignorieren/archivieren/verstecken
Kanäle in Ihrem Adressbuch können den Status „ blockiert“, „ ignoriert“, „ archiviert“ oder „ versteckt“ haben. Auf Ihrer Verbindungsseite gibt es einen Filter, der die Kanäle mit diesen Status anzeigen.
Auf den Seiten zum Bearbeiten von Verbindungen können Sie den Status eines Kanals ändern.
Die Bedeutung:
Blockiert: Der Kanal kann Ihre Elemente nicht lesen, unabhängig von den Berechtigungen, und er kann auch nicht in Ihren Kanal schreiben.
Ignoriert: Der Kanal kann Ihre Elemente lesen, wenn er dazu berechtigt ist, aber er kann nicht in Ihren Kanal schreiben.
Versteckt: Der Kanal wird nicht in der Verbindungsliste Ihres Profils angezeigt. Niemand kann sehen, dass Sie mit ihm verbunden sind. Beachte: Er ist trotzdem für deine anderen Verbindungen sichtbar, zum Beispiel in Antworten auf Beiträge.
Archiviert: Wenn ein Kanal 30 Tage lang nicht erreicht werden kann, wird er automatisch als archiviert markiert. Dadurch bleiben alle Daten erhalten, aber der Kanal wird nicht mehr nach neuen Informationen abgefragt und aus der automatischen Vervollständigung entfernt. Wenn Sie später erfahren, dass der Kanal wieder online ist, können Sie ihn manuell aus dem Archiv entfernen.
Superblock
Die App "Superblock" ist eine Moderationsmethode für den eigenen Stream. Während man mit der normalen Funktionalität von Hubzilla mittels Kontakt-Tool ausschließlich Nutzer, mit denen man verbunden ist, blockieren kann, funktioniert Superblock unabhängig davon, ob man mit einem Kontakt verbunden ist, oder nicht.
Bemerkt man im Stream einen Nutzer, mit welchem man nicht verbunden ist (weil dessen Beiträge von einem Kontakt aus dem eigenen Adressbuch geteilt werden), und möchte man - aus welchem Grund auch immer - keinerlei Beiträge von diesem Fediversenutzer im Stream haben, so kann man dies mit der App "Superblock" erreichen.
Dafür klicken Sie man auf das kleine weiße Dreieck im Avatar des zu blockenden Nutzers.
Es öffnet sich ein Pulldown-Menü, welches zu unterst den Menüpunkt "Vollständig blockieren" enthält. Mit einem Klick auf diesen Menüpunkt landet der Nutzer in der Superblock-Liste. Beiträge dieses Nutzers erscheinen künftig nicht mehr im eigenen Stream. Betroffene Beiträge werden sofort im Stream ausgeblendet. Außerdem ist es diesem Nutzer nicht mehr möglich, Ihre Beiträge zu lesen, unabhängig von den Berechtigungen, noch kann er in Ihren Kanal schreiben.
Wählt man im App-Menü (oben rechts ⋮) die App "Superblock", so wird die Liste sämtlicher blockierter Kontakte angezeigt.
Neben jedem Kontakt ist ein "Mülltonnen-Icon" zu sehen. Ein Klick auf dieses Icon entfernt den Nutzer von der Blockliste. Anschließend kann der Nutzer Ihnen wieder folgen, Ihre Beiträge sehen und auch bei Ihnen kommentieren und seine Postings erscheinen (z.B. durch Teilen von einem Kontakt) auch wieder im Stream.
Superblock ist bei neuen Kanälen nicht per Standard installiert und aktiviert.
Berechtigungen
Berechtigungen sind ein Kernelement von Hubzilla. Sie erlauben sehr fein abgestufte Möglichkeiten, Inhalte zugänglich zu machen, zu verbergen oder in der Nutzung zu beschränken. So dienen sie auch dazu, Direktnachrichten möglich zu machen, indem über Berechtigungen festgelegt wird, wer den Beitrag (nichts anderes sind Direktnachrichten) sehen kann, und wer nicht.
Berechtigungen für Inhalte
Wenn Sie Inhalte bei Hubzilla teilen, also Postings veröffentlichen, Bilder oder Texte hochladen, Termine im Kalender eintragen, können Sie ganz exakt festlegen, wer Zugriff auf diese Inhalte hat.
Die Berechtigungs-Einstellungen für Inhalte erreichen Sie über einen Button ("Privacy Tool") mit einem Vorhangschloss-Symbol 🔒bzw.🔓.
Für das Teilen von Beiträgen:
Für das Erstellen von Ordnern/Verzeichnissen im Cloud-Speicher:
Für das Hochladen von Dateien:
Für das Teilen von Terminen/Ereignissen:
Auch für Webseiten, Wikiseiten und verschiedene andere Inhalte gibt es entsprechende Einstellungsmöglichkeiten für die Berechtigung.
Wenn Sie auf das Symbol klicken, öffnet sich der Berechtigungsdialog, mit welchem Sie die Berechtigung für andere Nutzer festlegen können (hier geht es in der Regel um die Sichtbarkeit der Inhalte).
Sie haben die Wahl zwischen
-
Öffentlich - Wie die Bezeichnung schon nahelegt, ist der Inhalt für jeden im Internet sichtbar. Also selbst für Nutzer, die gar keinen Fediverse-Dienst nutzen.
-
Nur ich - Hier kann nur der erstellende Nutzer den Inhalt sehen. Sie "teilen" ihn mit sich selbst.
-
Privacy Gruppen - Der Inhalt ist für alle Nutzer sichtbar, die sich in einer Ihrer Privacy Gruppen befinden.
-
Benutzerdefinierte Auswahl - Hier kann exakt festgelegt werden, wer den Inhalt sehen kann. Es sind auch Kobinationen von Privacy Gruppen und einzelnen Kontakten möglich, indem man bei dem jeweiligen Eintrag "Erlauben" oder "Verweigern" anwählt.
Wichtiger Hinweis:
Die einmal festgelegten Berechtigungen für Postings können nachträglich nicht mehr geändert werden! Ein Posting wird sofort an eine nicht wirklich bestimmbare Zahl von anderen Servern verteilt, so dass Berechtigungen nachträglich nicht erteilt oder entzogen werden können.Die Berechtigungen für andere Inhalte, wie Dateien, Bilder etc. können hingegen nachträglich bearbeitet werden, weil diese Inhalte nur auf der eigenen Instanz (Hub) gespeichert werden und beim Teilen lediglich die Referenz zum Inhalt weitergegeben wird.
Berechtigungen - Benutzerdefinierte Kanalrollen
Kanal-Rollen legen fest, welche Rechte bei der Interaktion mit einem Kanal gegeben sind. Sie sind unter "Einstellungen" → "Kanal Einstellungen" erreichbar.
Hier kann die Rolle für einen Kanal festgelegt werden. Kanal-Rollen haben auch Einfluss auf Kontakt-Rollen, weil individuelle Rechte, die von den Kanal-Rollen vorgegeben sind und vererbt werden, dort die eigenen Einstellungen überschreiben.
Für eine wirklich individuelle Anpassung der Rollenberechtigungen Ihres Kanals, müssen Sie als Kanal-Rolle "Benutzerdefiniert" auswählen. Die anderen Rollen ("Öffentlich", "Persönlich", "Community Forum") sind vordefinierte Berechtigungsrollen (siehe: Kanal-Rollen).
Mit den benutzerdefinierten Kanal-Rollen können Sie für folgende Interaktionen festlegen, wer sie wie ausüben kann:
- Kann meinen Kanal-Stream und meine Beiträge sehen
- Kann mir die Beiträge aus seinem Kanal schicken
- Kann mein Standardprofil sehen
- Kann meine Verbindungen sehen
- Kann meine Datei- und Bilderordner sehen
- Kann in meine Datei- und Bilderordner hochladen/ändern
- Kann die Webseiten meines Kanals sehen
- Kann meine Wiki-Seiten sehen
- Kann Webseiten in meinem Kanal erstellen/ändern
- Kann meine Wiki-Seiten bearbeiten
- Kann auf meiner Kanal-Seite ("wall") Beiträge veröffentlichen
- Kann mir direkte Nachrichten schicken
- Kann Profile und Profilsachen mögen/nicht mögen
- Kann mit mir chatten
- Kann meine öffentlichen Beiträge in anderen Kanälen zitieren/spiegeln
- Kann meinen Kanal administrieren
Für diese Interaktionen stehen dann folgende Berechtigungen zur Wahl:
- Nur ich
- Nur die, denen Du es explizit erlaubst
- Angenommene Verbindungen
- Beliebige Verbindungen
- Jeder auf dieser Webseite
- Alle Hubzilla-Mitglieder
- Jeder authentifizierte
- Jeder im Internet
Um die benutzerdefinierte Rolle zu bearbeiten, wählt man in den Einstellungen den Punkt "Privacy-Einstellungen". Rechts unten findet man den Button "Benutzerdefinierte Konfiguration der Channel Role". Klickt man darauf, erscheint ein Warn-Dialog, der auf die Risiken einer fehlerhaften Konfiguration aufmerksam macht. Bestätigt man, dass man die Rechte bearbeiten möchte, öffnet sich der Einstellungs-Dialog für die benutzerdefinierten Rollenrechte.
Wichtiger Hinweis:
Die benutzerdefinierten Rollen sollten mit Bedacht eingestellt werden und bergen die Gefahr, dass sich bei bestimmten Konfigurationen der Kanal nicht mehr wie gewünscht verhält.
Berechtigungen - Kontaktrollen
Kontakt-Rollen dient dazu Rollen (also eine Sammlung von Rechten und Möglichkeiten) für Kontakte zu erstellen. Diese Rollen können dann einem Kontakt oder allen Kontakten einer Privacy Gruppe (nicht der Gruppe selbst) zugewiesen werden. Damit werden die Möglichkeiten von Kontakten eingeschränkt oder erweitert.
Mittels der App "Kontakt-Rollen" kann man Rollen, die den Kanal-Rollen entsprechen, zusammenstellen. Im Kontakt-Editor oder im Privacy Gruppen Editor kann dann diese Berechtigungsrolle einzelnen Kontakten oder allen Kontakten einer Privacy Gruppe zuweisen.
Direktnachrichten
Direktnachrichten sind Nachrichten, die an eine oder mehrere Einzelverbindungen adressiert sind. Sie sind über den Netzwerkstream zugänglich. Ein Filter für Direktnachrichten wurde dem Stream-Filter-Widget für den schnellen Zugriff hinzugefügt.
Möchte man eine Direktnachricht an einen (oder mehrere) andere Nutzer versenden (Direktnachrichten können nur von den Adressaten und vom Versender gelesen werden), so verfasst man einen normalen Beitrag und adressiert diesen per spezieller Erwähnung ausschließlich an den / die Empfänger. Dies geschieht mit der privaten Erwähnung (Privacy-Tag). Ein Privacy-Tag ist ein Name, dem die beiden Zeichen @!
vorangestellt sind und der zusätzlich zur Markierung dieser Kanäle auch die Datenschutzberechtigungen des Beitrags so ändert, dass nur diese berücksichtigt werden.
Um auf eine DN auch wieder "privat", also als DN zu antworten, muss man kein Privacy-Tag nutzen. Man antwortet einfach direkt auf die eingegangene DN, wodurch die Antwort an alle ursprünglichen Adressaten verteilt wird.
Alternativ zum Privacy-Tag kann man auch Kanäle oder Privacygruppen aus dem Privacy-Tool (🔒) auswählen. Dies ist der umständlichere Weg, der aber auch funktioniert. Die Nutzung eines Privacy-Tags überschreibt allerdings eine ggf. getroffene Auswahl im Privacy-Tool. Schreibt man also einen Beitrag, der als Direktnachricht verschickt werden soll, kann man den Privacy-Tag weglassen und stattdessen auf das Vorhangschloss-Symbol neben dem Button "Teilen" klicken, so dass man in die Berechtigungs-Einstellungen gelangt.
Erwähnungen
Kanäle (Nutzer) werden gekennzeichnet, indem ihrem Namen (Handle) einfach das @ -Zeichen vorangestellt wird. @Jack
Wenn Sie jemanden erwähnen, wird ein Feld für die automatische Vervollständigung erstellt, aus dem Sie Ihre unmittelbaren Verbindungen auswählen können. Wählen Sie entsprechend aus.
Ist der Kontakt berechtigt, Ihr Posting zu empfangen, erhält er eine Tagbenachrichtigung.
Befindet sich der Adressat nicht in Ihrer Kontaktliste, so müssen sie das Handle hinter dem "@"-Zeichen ausschreiben. Sofern der Empfänger auch Erwähnungen Fremder erlaubt, wird er ebenfalls über die Erwähnung benachrichtigt.
Tags
Tags (auch thematische Tags, Hashtags oder topical tags genannt) Tags werden angezeigt, indem Sie dem Tagnamen das Zeichen "#" voranstellen. Dadurch wird im Beitrag ein Link zu einer verallgemeinerten Website-Suche nach dem angegebenen Begriff erstellt. Zum Beispiel, #cars stellt einen Suchlink für alle Beiträge bereit, die „Autos“ auf Ihrer Website erwähnen. Aktuelle Tags sind in der Regel mindestens drei Zeichen lang. Kürzere Suchbegriffe führen wahrscheinlich nicht zu Suchergebnissen, dies hängt jedoch von der Datenbankkonfiguration ab.
Thematische Tags werden normalerweise auch nicht verknüpft, wenn sie rein numerisch sind, z. #1. Wenn Sie einen numerischen Hashtag verwenden möchten, fügen Sie bitte einen beschreibenden Text wie z.B. #2012-Wahlen oder das gesamte Tag in doppelte Anführungszeichen setzen (z. B. #“2012″). Doppelte Anführungszeichen sind auch erforderlich, wenn das Tag Leerzeichen enthält (# „Mein Tag“) und möglicherweise erforderlich, wenn das Tag Satzzeichen enthält (# „EndsWithPeriod.“ Oder # „Exciting !!!“).
Bookmarks (Lesezeichen))
Lesezeichen geben einen Link an, der in Ihrem Lesezeichenordner gespeichert werden kann. Sie verwenden die Zeichenfolge #^ gefolgt von dem Link. Oft werden diese automatisch generiert. Wenn der Administrator des Hub das Addon "bookmarker" installiert hat, wird diese Sequenz beim Online-Ansehen des Beitrags oder Kommentars in ein Lesezeichensymbol konvertiert.
Wenn Sie auf das Symbol klicken, wird das Lesezeichen gespeichert. Wenn das Add-In für das Lesezeichen nicht installiert ist, enthält das Post-Dropdown-Menü einen Link zum Speichern des Lesezeichens oder der Lesezeichen.
Um Lesezeichen zu verwenden, müssen Sie die App "Lesezeichen" installieren.
Die App führt dann alle von Ihnen gesetzten Lesezeichen auf.
Suche
Um schnell Informationen zu finden, kann die Suche verwendet werden.
Eine Suche ist über das Symbol in der Navigationsleiste möglich.
Hier wird der gesamte Hub durchsucht. Es kann nach Hashtags, Handles und nach Texten gesucht werden.
In der Kanalansicht ist in der linken Seitenleiste ebenfalls ein Suchfeld vorhanden. Es durchsucht nur den Stream des eigenen Kanals. Suchen, welche in diesem Widget durchgeführt wurden, können auch gespeichert werden, indem man auf das Diskettensymbol neben dem Suchfeld klickt. Die gespeicherte Suche wird dann in einer Liste von Suchbegriffen unter dem Suchfeld angezeigt und kann jederzeit durch einen einfachen Klick wiederholt werden.
Artikel
Der Artikel ist eine Macroblogging-Beitragsform bei Hubzilla und z.B. geeignet für echte Blogbeiträge. Im Gegensatz zu normalen Beiträgen, die im gesamten Netzwerk (inklusive Fediverse) verteilt werden, verbleiben Artikel beim eigenen Hub. Sie sind für Nutzer anderer Instanzen und Nutzer, die keinen Account im Fediverse haben also nur über ihre URL erreichbar. Die URL kann selbstverständlich geteilt werden, so dass der Artikel trotzdem im Fediverse bekannt wird und abgerufen werden kann.
Einen Artikel erstellt man über die App (App-Menü ⋮) "Artikel". Ruft man diese auf, werden sämtliche erstellten Artikel angezeigt und man hat die Möglichkeit, einen neuen Artikel anzulegen ("Artikel hinzufügen").
Das Erstellen eines Artikels ähnelt dem Erstellen eines normalen Beitrags. Das Eingabe-Formular weist aber ein zusätzliches Feld auf: "Link zur Seite".
Hier kann man eine leicht lesbare Linkbezeichnung eingeben. Lässt man das Feld frei, wird eine Bezeichnung automatisch vergeben (länger und "kryptischer").
Hat man das optionale Feld Summary ("Zusammenfassung") ausgefüllt, wird bei einem Artikel, genauso wie bei normalen Beiträgen, zunächst nur die Zusammenfassung angezeigt.
Wenn Sie auf "Artikel ansehen" klicken, wir der Artikel selbst angezeigt.
Der Direktlink zum Artikel setzt sich so zusammen:
URL-Ihres-Hubs/articles/Kanalname/Link-zurSeite
Dateien
Hubzilla bietet Cloud-Funktionalität. Das bedeutet, dass man für jeden Kanal ein Verzeichnis besitzt, in dem man weitere Unterverzeichnisse erzeugen und Dateien ablegen kann. Für jedes Verzeichnis, ja sogar für jede einzelne Datei kann man genaue Zugriffsrechte festlegen. Das geht von einer Sichtbarkeit für die Allgemeinheit, eine Sichtbarkeit für Mitglieder bestimmter Gruppen bis hin zur einzelnen Freigabe für einzelne Mitglieder aus den eigenen Verbindungen. Es ist sogar möglich, Dateien mit Leuten zu teilen, die keine Hubzilla-Identität haben. Dazu verwendet man Gastzugangs-Token.
Das Anlegen und Löschen von Verzeichnissen und das Anlegen bzw. Löschen von Dateien ist wirklich einfach.
Seinen Cloudspeicher erreicht man über das „App-Menü“ (⋮) → Dateien. Man kann auch Bilder über den Dateien-Bereich hochladen, was ebenfalls über den Bereich „Fotos“ möglich ist.
Die Dateien können in einer Listenansicht
oder einer Kachelansicht
dargestellt werden.
Neue Verzeichnisse / Ordner erstellt man mit dem Button "Erstelle". Beim Erstellen kann man auch sofort die Berechtigungen für den neuen Ordner festlegen (🔓).
Mit dem Button "+ Dateien hinzufügen" kann man Dateien in seine Cloud hochladen. Auch hier ist es wieder möglich die Zugriffsberechtigungen direkt festzulegen.
Um Zugriffsrechte (Berechtigungen) für Verzeichnisse oder Dateien nachträglich festzulegen oder zu ändern, klickt man auf das Kontextmenü (︙) der Datei oder des Verzeichnisses. Hier lassen sich außerdem noch verschiedene Dateioperationen durchführen.
Fügt man beim Erstellen eines Beitrags oder eines Kommentars eine Datei mit dem Button "📎" an, so wird diese Datei in einem ggf. neu erstellten Verzeichnis (Muster: Jahr-Monat
) in der Cloud abgelegt.
Fotos
Die App "Fotos" ist eine spezielle Verwaltung/Ansicht für in die eigene Cloud hochgeladene Bilder. Es werden Vorschaubilder, statt Kacheln oder Dateibezeichnungen angezeigt, was das Auffinden bestimmter Bilder einfacher macht.
Ein Klick auf das Bild führt zur Bildansicht. Hier gibt es zwei Steuerungssymbole, um zum nächsten oder vorherigen Foto zu wechseln.
Außerdem gibt es einen Button "Fotowerkzeuge", der es mittels eines Menüs möglich macht, Das Bild als Profilbild oder Banner festzulegen, sowie das Bild zu bearbeiten.
Ein weiterer Klick auf das Bild führt zur Vollansicht.
Cloudspeicher
Ihre Dateien sind im Internet unter der Adresse <URL-Ihres-Hubs>/cloud/<Ihr-Kanalname>
für jeden sichtbar, der sie einsehen darf. Wenn der Betrachter über ausreichende Berechtigungen verfügt, kann er auch neue Dateien und Ordner/Verzeichnisse erstellen. Diese Möglichkeit sollte nur für kleinere Dateien und Fotos (bis zu einigen Megabyte) genutzt werden, da sie den internen Speicher beansprucht. Größere Dateien (Videos, Musik usw.) laden Sie bitte mit WebDAV hoch. Diese Dateien können weiterhin über den Web-Zugang abgerufen werden.
Mit WebDAV können Sie Dateien direkt in das Betriebssystem Ihres Computers oder aus diesem heraus kopieren, wobei Ihre Cloud-Dateien wie ein virtuelles Laufwerk erscheinen. Dies sollte zum Hochladen großer Dateien wie Video- und Audiodateien verwendet werden.
Die URL für das Cloud-Verzeichnis lautet <URL-Ihres-Hubs>/dav/
.
Sollte, je nach Einbindung des DAV-Dateisystems (abhängig vom verwendeten Betriebssystem und ggf. der Anwendung) die Angabe eine Benutzernamens erforderlich sein, so ist dies der Kanal-Kurzname (also ohne führendes "@" und ohne folgende "@Hub-Adresse"). Ein eventuell erforderliches Passwort entspricht Ihrem Login-Passwort.
Galerie
Bei der App "Galerie" handelt es sich um eine einfache Fotogalerie mit welcher alle Ihre Bilder aus dem Cloudspeicher dargestellt werden.
Die dargestellten Bilder werden passend skaliert, was bei kleineren Bildern zu einer etwas unscharfen Darstellung führen kann. Praktischer ist die Nutzung der App "Fotos".
Chaträume
Die App "Chaträume" erlaubt es, Chaträume für Instant-Messaging innerhalb eines Hubs einzurichten und mit anderen Kanälen des Hubs zu chatten.
Ruft man die App aus dem Hamburger-Menü auf, werden die eigenen Chaträume angezeigt.
Um einen neuen Chatraum anzulegen, kickt man auf den Button "Raum hinzufügen".
Hier muss man einen Namen für den Taum vergeben und man kann wählen, nach wie viel Minuten die Chatinhalte verfallen. Außerdem ist es möglich, über das Privacy-Tool (🔒) festzulegen, wer berechtigt ist, den Chatraum zu sehen und zu nutzen.
Die URL zum Chatraum wird im Browser angezeigt und ist auch über den Verweis auf den Chatraum in der linken Seitenleiste verfügbar. Nun kann man einem anderen Nutzer des eigenen Hubs die URL mitteilen und einen Chat mit diesem beginnen.
Gastzugang
Wenn Sie private (also für die Öffentlichkeit nicht zugängliche) Inhalte mit Menschen teilen möchten, die über keinen Hubzilla-Account verfügen, so haben Sie die Möglichkeit dies mittels eines Gastzugangs zu verwirklichen.
Mit dem Gastzugang erstellen Sie einen (ggf. temporären) Zugang, der es dem Nutzer, welcher sich mit diesen Daten einloggt, ermöglicht, auf ihre öffentlich zugänglichen Inhalte, aber auch nicht-öffentliche Inhalte, welche sie speziell für den Gastzugang freigeben, zuzugreifen.
Rufen Sie die App "Gastzugang" auf, so wird ein Webformular angezeigt, mit welchem Sie einen solchen Gastzugang einrichten können. Sie geben einen selbst gewählten Anmeldenamen ein. Hubzilla hat bereits automatisch ein Kennwort für den Gastzugang generiert. Diese beiden Informationen können Sie nun demjenigen weitergeben, dem sie Zugriff auf Inhalte geben möchten.
Im Feld "Läuft ab" können Sie außerdem ein Verfallsdatum eingeben, ab welchem der Gastzugang automatisch wieder gelöscht wird. Wenn Sie dieses Feld leer lassen, wird der Gastzugang ohne zeitliche Beschränkung erstellt. Er läuft dann nie automatisch ab und muss ggf. per Hand gelöscht werden.
Außerdem können Sie für den Gastzugang eine Kontakt-Rolle festlegen.
In der linken Seitenleiste werden sämtliche Gastzugänge aufgelistet. Wählen Sie dort einen Gastzugang auf, so können sie ihn bearbeiten oder wieder löschen (auch vor Ablauf der Frist).
Sobald ein Gastzugang angelegt ist, taucht er auch in den "Berechtigungs-Einstellungen" (Privacy-Tool) unter "Benutzerdefinierte Auswahl" auf. Sie können damit einzelne private Inhalte explizit für den Gastzugang (aber natürlich zusätzlich auch für andere Kontakte) freigeben, so dass der Gast auf die Inhalte zugreifen kann.
Privacy Gruppen
Die App "Privacy Gruppen" erlaubt Ihnen das Anlegen von Gruppen, denen Sie Kontakte zuordnen können. Sie dienen einerseits dem Filtern des Streams (so kann man sich nur Beiträge von Nutzern anzeigen lassen, welche sich in einer Privacy Gruppe befinden) und andererseits erlauben sie es, in Bezug auf Berechtigungen, bestimmten Gruppen Rechte an Inhalten einzuräumen.
Die erste Funktion ist einfach zu verstehen. Hat man Kontakte (ein Kontakt kann durchaus auch in mehreren Gruppen vorhanden sein) in einer Gruppe und wählt man in der linken Seitenleiste bei der Stream-Ansicht eine bestimmte Gruppe aus, so werden nur Beiträge von Kontakten angezeigt, die sich in der Gruppe befinden. Diese Funktion fungiert also als Stream-Filter.
Die zweite Funktion ist auch einfach zu begreifen, aber eher ungewohnt für viele Fediverse-Nutzer, da es sie in dieser Form nur bei Hubzilla und verwandten Diensten (Streams, Friendica etc.) gibt. Wie die Bezeichnung "Privacy Gruppen" nahelegt, geht es hier auch um eine beschränkte Kommunikation. Wählt man beim Verfassen eines Beitrags als Berechtigung eine Gruppe aus, so wird das Posting nur an die Kontakte, die in dieser Gruppe enthalten sind, verteilt und nur diese können es sehen. Es ist den Empfängern (Gruppenmitglieder) auch nicht möglich, ein solches Posting öffentlich zu teilen. Damit kann eine geschlossene Gruppenkommunikation realisiert werden.
Ruft man die App auf, werden in der linken Seitenleiste bereits vorhandene Gruppen angezeigt und in der Hauptansicht das Eingabeformular zum Erstellen einer neuen Gruppe.
Wählt man in der Seitenleiste eine der Gruppen auf, so kann man diese bearbeiten.
Hier kann auch die Mitgliedschaft für Kontakte festgelegt werden. Ein Klick auf einen Eintrag wechselt die Mitgliedschaft zwischen "Nicht in der Gruppe" und "Gruppenmitgliedschaft". So kann man Mitglieder aus einer Gruppe entfernen oder Nutzer als Gruppenmitglieder hinzufügen.
Das Hinzufügen eines Kontakt zu einer Gruppe kann auch in der App "Verbindungen" mit dem Kontakt-Tool erfolgen:
Um eine neue Gruppe hinzuzufügen, klickt man in der Seitenleiste auf den Eintrag "+ Neue Gruppe hinzufügen".
Kalender
Mit der App "Kalender" kann man seine Termine verwalten.
Nach Aufruf der App erscheint eine Kalender-Übersicht (ein Monat).
Durch Klicken auf einen Tag können Sie ein Ereignis erzeugen. In der Eingabemaske (verkürzte Ansicht, lässt sich durch Klicken auf "mehr" erweitern) kann man nun die wesentlichen Inhalte eingeben.
Für diese Einträge können Sie ebenfalls wieder detaillierte Berechtigungen festlegen, so dass man private Termine und öffentliche / gemeinsame Termine in ein und demselben Kalender erfassen kann.
CalDAV-Zugang mit Android
Sie können Ihren Kalender auf Android mit Ihrem Hub synchronisieren.
Verwenden Sie "URL" und "Benutzername" zur Anmeldung. Die Basis-URL ist <URL-Ihres-Hubs>/cdav
, der Benutzername ist Ihr Kanalname (ohne führendes"@" und ohne Hub-Adresse "@<Ihr-Hub>
").
Um Ihren Kalender zu teilen, besuchen Sie <URL-Ihres-Hubs>/cdav/calendar
.
Adressbuch (CardDAV)
Hubzilla bietet Ihnen mit der App "CardDAV" eine Adressverwaltung. Sie können beliebig viele Adressbücher anlegen.
Die Einträge sind im vCards-Format abgelegt.
Die App ermöglicht auch das Importieren von Adressbüchern oder einzelnen vCards aus einer Datei.
Adressbücher sind generell privat und können - auch nicht mittels Fernautorisierung - geteilt werden.
Wikis
Die App "Wiki" ermöglicht es, im eigenen Kanal Wikis anzulegen.
Wiki-Seiten werden nicht föderiert und verbleiben auf dem eigenen Hub.
Die Wiki-App bietet eine einfache, klassische Wiki-Funktionalität. Wiki-Beiträge können als reiner Text, als Markdown-Text oder als BBcode-Text erstellt werden.
Um ein Wiki anzuschauen (oder zu bearbeiten), wählt man auf dieser Seite das entsprechende Wiki aus der Liste.
Möchte man ein neues Wiki erstellen, klickt man auf den Button "+ Neu anlegen".
Es öffnet sich ein Eingabe-Formular, in welchem man den Namen des Wiki eingibt und den Inhaltstyp (als Standard) festlegt. Man kann über einen Schalter bestimmen, dass nur der gewählte Inhaltstyp (Text, Markdown, BBcode) für alle Wiki-Einträge verwendet werden muss. Außerdem kann man per Schalter die Erzeugung eines Statusbeitrags über die Wikierstellung ein- oder ausschalten.
Auch für ein Wiki kann man detaillierte Berechtigungen festlegen.
Klickt man auf "Absenden", wird das Wiki erstellt und die Startseite (Home) geöffnet.
Die Standard-Ansicht einer Wiki-Seite ist immer "Ansicht", bei welcher der Text gemäß dem Quelltext gerendert wird. Über Reiter (Tabs) am oberen Rand kann man in die Ansicht "Bearbeiten" wechseln, um in den Editor-Modus zu gelangen.
Haben Sie die Seite bearbeitet und schalten Sie dann wieder auf Ansicht, werden die Änderungen sofort angezeigt.
Wenn Sie die Seite speichern möchten, geben Sie das Eingabefeld unter dem Text eine passende Bemerkung ein und klicken auf "Save". Die Wiki-Seite ist erstellt.
Über den dritten Reite mit der Bezeichnung "Historie" können Sie sich den Änderungsverlauf der Wiki-Seite anschauen und, sofern gewünscht, Änderungen rückgängig machen. Es handelt sich also um eine wiki-typische Form der Versionskontrolle.
Wenn Sie weitere Wiki-Seiten erstellen, werden diese in der linken Seitenleiste aufgeführt, von wo aus sie auch aufrufbar sind.
Für eine kollaborative Bearbeitung eines Wikis ist es erforderlich, den Nutzern, welche an dem Wiki mitarbeiten dürfen, entsprechende Rechte einzuräumen. Dies tut man in den Fällen eines öffentlichen, persönlichen oder Foren-Kanals mittels einer entsprechenden Kontaktrolle, in welcher man die Bearbeitung der Wiki-Seiten erlaubt. Diese Berechtigung ist nämlich bei den genannten Kanalrollen als Standard nicht erteilt (bei einer benutzerdefinierten Kanalrolle kann man die Genehmigung erteilen, sie gilt dann aber generell und kann mittels einer Kontaktrolle nicht wieder entzogen werden).
Will man einzelne Wikis davon ausnehmen, muss man deren Sichtbarkeit über die Berechtigungs-Einstellungen des Wikis (Vorhangschloss) einschränken.
Inhaltswarnung/NSFW
Inhaltswarnungen bzw. das Verbergen von bestimmten Inhalten wird bei Hubzilla mit der App "NSFW" realisiert.
Während Sie bei anderen Diensten im Fediverse darauf angewiesen sind, dass die Verfasser von Postings möglicherweise "sensible" Inhalte hinter einem Contentwarning (einer Inhalts- bzw. Triggerwarnung) verbergen, haben Sie bei Hubzilla diese Funktionalität als Rezipient selbst in der Hand. Mit der App NSFW können Sie Filter erstellen, die dafür sorgen, dass Beiträge, die unter die Filterregeln fallen, eingeklappt angezeigt werden. Erst ein Klick auf den Button zeigt den Inhalt des Postings.
Starten Sie die App, so erscheint die Eingabemaske für die Filter.
Hier können Sie nun Schlüsselwörter und sogar reguläre Ausdrücke eingeben, auf welche das Posting durchsucht wird. Wird eines der Wörter oder ein Textmuster gefunden, so wird der Inhalt im Stream zugeklappt angezeigt.
Es ist auch möglich, nach Sprachen zu filtern (lang=xx oder lang!=xx).
Findet sich nun ein Ausdruck, welcher zu einem der eingegebenen Filtern passt, in einem Posting, so wird das Posting für Sie hinter einer Inhaltswarnung zunächst verborgen.
Klonen
Hubzilla-Kanäle verfügen über eine sogenannten "nomadische Identität". Das ist eine Spezialität des Zot-Protokolls, auf welchem Hubzilla basiert und mit welchem Hubzilla-Hubs untereinander kommunizieren.
Durch die nomadische Identität ist es möglich, Klone des eigenen Kanals zu erzeugen, was die Zensur- und Ausfallresistenz enorm erhöht.
Wenn Sie Ihren Kanal geklont haben, ist es kein Problem, wenn Ihr "Heimat-Hub" einmal ausfällt oder nicht korrekt funktioniert. Sie können übergangslos mit einem Kanal-Klon, welcher auf einem anderen Hub liegt, weiter am Fediverse teilnehmen.
Sämtliche Kanal-Klone werden automatisch im Hintergrund synchronisiert.
Um einen Klon Ihres Kanals anzulegen, benötigen sie einen Account auf einem weiteren (anderen) Hubzilla-Hub.
Es gibt nun mehrere Möglichkeiten, auf diesem anderen Hub, einen Klon Ihres Kanals anzulegen.
Sie können mit der App "Kanalexport" den Kanal auf Ihrem "Heimat-Hub" exportieren.
Durch einen Klick auf den Button "Kanal exportieren", exportieren Sie Ihre Identität und Ihren sozialen Graph in eine Datei, welche sie herunterladen können.
Da Dateien, Webseiten, Wikis, Kalender und Chaträume immer lokal auf den eigenen Hub (also den jeweiligen Server) beschränkt sind, können sie mit der App "Kanalexport" auch Archive dieser Daten lokal herunterladen.
Loggen Sie sich nun auf dem neuen Hub ein und wählen Sie entweder im Hauptmenü (Ihr Profilbild; links oben) den Menüpunkt "Kanäle" und auf der erscheinenden Kanalauswahl-Seite den Button "+ Neu anlegen" oder rufen Sie direkt die Kanalerstellungs-Seite unter <URL-Ihres-Hubs>/new_channel
auf.
Auf dieser Seite geben Sie nun aber keine Informationen für das Erstellen eines neuen Kanals ein, sondern wählen am unteren Ende des Dialogs den Link "importiere einen bestehenden Kanal von einem anderen Server".
Nun öffnet sich der Dialog für den Kanal-Import.
Mit dem Button "Hochzuladende Datei: Durchsuchen..." öffnen Sie einen Dateidialog, mit welchem Sie die zuvor gespeicherte Kanal-Datei auswählen können.
Alternativ zu dieser Methode können Sie Ihren Kanal auch direkt von der Quelle, also dem Ursprungs-Hub klonen. Dafür müssen Sie im Kanal-Import-Dialog das Handle des zu klonenden Kanals, die Mailadresse für den Login beim Ursprungs-Hub, sowie das dazugehörige Passwort angeben. Zusätzlich können sie per Schalter auswählen, ob Dateien und Objekte des Ursprungs-Hubs mit importiert werden sollen (sofern Ihr neuer Hub das zulässt und das Speicherlimit ausreicht).
Im Dialog können Sie außerdem noch festlegen, ob der neue Hub Ihr "primärer Hub sein soll". Das bedeutet, dass der neue Kanal (also der nun anzulegende) Ihr primärer Kanal wird. Das hat Auswirkungen auf das Handle Ihres Kanals, welches damit künftig mit der URL des neuen Hubs endet.
In der Regel, sofern man nicht komplett auf einen anderen Hub umziehen möchte, lässt man den Schalter bei "Nein" und der Primäre Hub bleibt derjenige, der es aktuell ist (das Handle bleibt unverändert).
Sollten Sie eine veränderte Kanalbezeichnung (Kurzname) wünschen, können Sie diese in einem weiteren Eingabefeld eingeben. Lassen Sie das Feld leer, bleibt der Kanal-Kurzname unverändert.
Hinweis: Sollte der Kanal-Kurzname auf dem neuen Hub bereits vergeben sein (oder gesperrt, weil ein gleichlautender Kanal dort bereits existierte, aber wieder gelöscht wurde), wird der Kurzname vom System automatisch modifiziert.
Schließlich klicken Sie auf "Absenden" und verlassen Sie die Seite NICHT, bis der Import abgeschlossen ist. Dies kann, je nach Umfang des Ursprungskanals einige Zeit in Anspruch nehmen.
Über Einstellungen → Klon-Adressen verwalten können Sie jederzeit Ihre Klone verwalten. Sie können festlegen, welches der "primäre Hub" ist und Sie können Klone löschen, wobei empfohlen wird, geklonte Kanäle besser direkt auf dem jeweiligen Hub zu löschen.
Webseiten
Mit der App "Webseiten" ist es Ihnen möglich, statische Webseiten in Ihrem Kanal zu erstellen. Webseiten verbleiben auf Ihren Hub und werden nicht föderiert. Sie können aber den Link zur Webseite teilen und es allen Nutzern im Fediverse ermöglichen, Ihre Webseite zu besuchen.
Wenn Sie die App aufrufen, gelangen Sie zur Webseiten-Übersicht. Die Seiten werden unter <URL-Ihrer-Instanz>/page/<Ihr-Kanalname>/<Seiten-Link-Titel>
zugänglich sein.
In der linken Seitenleiste befindet sich ein Widget mit den Gestaltungswerkzeugen für "Blöcke", "Menüs", "Layouts" und "Seiten".
Darunter ist ein weiteres Widget vorhanden, mit der Möglichkeit Webseiten zu ex- und importieren.
In der Mitte werden die vorhandenen Webseiten aufgeführt. Sie können diese bearbeiten, teilen und löschen. Außerdem ist dort ein Button vorhanden, um eine neue Webseite zu erstellen: "Erstelle".
Wenn Sie auf diesen Button klicken, öffnet sich der Webseiten-Editor.
Sie haben nun die Wahl, auf welche Art Sie die Webseite gestalten wollen: mit bbCode, mit HTML, mit Markdown, mit reinem Text oder mit der Comanche-Layout-Sprache.
Sie können außerdem festlegen, welches Layout (sofern Sie eines oder Mehrere mit dem Layout-Gestaltungswerkzeug erstellt haben) für die Darstellung der Webseite verwendet werden soll.
Es folgt das Eingabefeld für den optionalen Seitentitel, sowie (ebenfalls optional) eine Zusammenfassung, sowie (Pflichtfeld) die Seiten-URL.
Darunter befindet sich der Texteditor für den Inhalt der Webseite.
Möchte man lediglich eine ganz einfache Webseite mit Formatierungen und anderen Auszeichnungselementen erstellen, genügt es, diese im Website-Editor mittel reinem Text, HTML, bbCode oder Markdown zu erstellen. Sie erhalten damit eine Webseite ohne besonderes Layout (ohne Seitenleisten, ohne Menüs etc.).
Für anspruchsvollere Webseiten, empfiehlt es sich, dass Sie mit Blöcken, Layouts und Menüs arbeiten.
Blöcke
Blöcke können Teile von Webseiten sein. Der grundlegende HTML-Code eines Blocks sieht wie folgt aus
<div>
Block-Inhalt
</div>
Wenn ein Block den Inhaltstyp text/html hat, kann er auch Menüelemente enthalten. Der Beispielinhalt von
<p>HTML Block-Inhalt</p>
[menu]menuname[/menu]
wird HTML wie dieses erzeugen
<div>
<p>HTML Block-Inhalt</p>
<div>
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
</ul>
</div>
</div>
Über das Makro $content
kann ein Block auch den eigentlichen Inhalt der Webseite enthalten.
Erstellen Sie dazu einen Block nur mit
$content
als Inhalt.
Damit ein Block auf der Webseite erscheint, muss er im Seitenlayout innerhalb einer Region definiert werden.
[region=aside]
[block]blockname[/block]
[/region]
Das Aussehen des Blocks kann im Seitenlayout manipuliert werden.
Es können eigene Klassen zugewiesen werden
[region=aside]
[block=myclass]blockname[/block]
[/region]
wird folgendes HTML erzeugen
<div class="myclass">
Block Content
</div>
Über die wrap-Variable kann ein Block von seinem umschließenden <div></div>
-Tag befreit werden
[region=aside]
[block][var=wrap]none[/var]blockname[/block]
[/region]
wird dieses HTML erzeugt
Blockinhalt
Mit dem Block-Editor können Blöcke ebenso einfach erzeugt werden, wie Webseiten.
Menüs
Der Menüeditor dient zum einfachen Erstellen von Navigations-Menüs.
Dem Menü muss ein eindeutiger Name gegeben werden (mit diesem kann es später in der Webseite und in Blöcken referenziert werden). Die Vergabe des Titels ist optional. Außerdem kann man wählen, ob das Menü für das Hinzufügen von Bookmarks zur Verfügung steht. Mit diesem Feature ist es möglich, als Bookmarks markierte Links aus dem Stream mit einem Klick zum Menü hinzuzufügen.
Klicken Sie auf "Absenden und fortfahren", wird das Menü erstellt.
Nun öffnet sich der Dialog für das Hinzufügen eines Menüeintrags. Es muss eine Bezeichnung für den Menüeintrag eingegeben werden ("Name des Links") und das Ziel des Links. Dies kann eine URL oder der Name eines anderen Menüs sein (welches dann als Untermenü eingebunden wird).
Über die Eingabe einer Zahl bei "Reihenfolge in der Liste" kann man die Sortierung der Menüeinträge beeinflussen.
Handelt es sich bei der URL um einen externen Link zu einer Quelle auf einem anderen Hub, so kann durch setzen des Schalters "Magic-Auth verwenden, falls verfügbar" dafür gesorgt werden, dass man beim Ziel authentifiziert wird und ggf. eingeschränkte Inhalte verfügbar sind.
Außerdem können Sie festlegen, ob Links in einem neuen Fenster/Tab geöffnet werden sollen.
Mit Klick auf "Absenden und fortfahren" kann man weitere Einträge erstellen. "Absenden und fertigstellen" beendet die Eingabe von Menüeinträgen. Menüs können aber jederzeit nachträglich bearbeitet und ergänzt werden.
Layouts
Mit den Layouts kann man den generellen Aufbau von Webseiten festlegen. Die Gestaltung erfolgt mit der Comanche Seitenbeschriebungssprache, einer Variante von bbCode. Man muss einen Namen für das Layout vergeben. Im Textfeld erfolgt dann die Definition des Layouts. Hier können auch die Inhalte der verschiedenen Regionen festgelegt werden.
Comanche Seitenbeschreibungssprache
Comanche ist eine bbCode-ähnliche Auszeichnungssprache, mit der aufwendige und komplexe Webseiten erstellt werden können, indem sie aus einer Reihe von Komponenten zusammengesetzt werden, von denen einige vorgefertigt sind und andere spontan definiert werden können. Comanche verwendet eine Seitenbeschreibungssprache, um diese Seiten zu erstellen.
Comanche wählt in erster Linie aus, welche Inhalte in den verschiedenen Bereichen der Seite erscheinen sollen. Die verschiedenen Bereiche haben Namen, und diese Namen können sich je nach gewählter Layoutvorlage ändern.
Seitenvorlagen
Derzeit gibt es fünf Layout-Vorlagen, es sei denn, Ihre Website bietet zusätzliche Layouts.
Standardvorlage
Die Standardvorlage definiert einen "nav"-Bereich am oberen Rand, "aside" als Seitenleiste mit fester Breite, "content" für den Hauptinhaltsbereich und "footer" für einen Seitenfuß.
Vollständig
Die vollständige Vorlage entspricht der Standardvorlage mit der Ausnahme, dass es keinen "aside"-Bereich gibt.
Choklet
Die Choklet-Vorlage bietet eine Reihe von fließenden Layoutstilen, die nach Geschmack festgelegt werden können:
- (default flavour) - ein zweispaltiges Layout, das der "default"-Vorlage ähnelt, aber flexibler ist
- bannertwo - ein zweispaltiges Layout mit einem Bannerbereich, kompatibel mit der "default"-Vorlage auf kleinen Displays
- three - dreispaltiges Layout (ergänzt die Standardvorlage um einen "right_aside"-Bereich)
- edgestwo - zweispaltiges Layout mit festen Seitenrändern
- edgesthree - dreispaltiges Layout mit festen Seitenrändern
- full - dreispaltiges Layout mit festen Seitenrändern und Hinzufügen eines "Header"-Bereichs unter der Navigationsleiste
Redable
Eine Vorlage zum Lesen längerer Texte im Vollbildmodus (also ohne Navigationsleiste). Drei Spalten: aside, content und right_aside.
Für maximale Lesbarkeit ist es ratsam, nur die mittlere Inhaltsspalte zu verwenden.
Zen
Gibt Ihnen die Freiheit, alles selbst zu machen. Nur eine leere Seite mit einem Inhaltsbereich.
Um eine Layout-Vorlage auszuwählen, verwenden Sie den Tag 'template'.
[template]full[/template]
So wählen Sie die Vorlage "choklet" mit der Geschmacksrichtung "three":
[template=three]choklet[/template]
Die Standardvorlage wird verwendet, wenn keine andere Vorlage angegeben wird. Die Vorlage kann beliebige Namen für die Inhaltsbereiche verwenden. Sie werden "region"-Tags verwenden, um zu entscheiden, welche Inhalte in den jeweiligen Regionen platziert werden sollen.
Es wurden drei "Makros" für Ihre Verwendung definiert.
$htmlhead - replaced with the site head content.
$nav - replaced with the site navigation bar content.
$content - replaced with the main page content.
Standardmäßig wird $nav
in den Seitenbereich "nav" und $content
in den Bereich "content" eingefügt. Sie brauchen diese Makros nur zu verwenden, wenn Sie die Reihenfolge der Elemente ändern oder sie in andere Bereiche verschieben möchten.
Um ein Thema für Ihre Seite auszuwählen, verwenden Sie den Tag "theme".
[theme]suckerberg[/theme]
Dadurch wird das Thema "suckerberg" ausgewählt. Standardmäßig wird das von Ihrem Kanal bevorzugte Thema verwendet.
[theme=passion]suckerberg[/theme]
Dadurch wird das Thema mit dem Namen "suckerberg" ausgewählt und das Schema "passion" (Themenvariante) gewählt. Alternativ ist es auch möglich, eine komprimierte Themennotation zu verwenden.
[theme]suckerberg:passion[/theme]
Die komprimierte Notation ist nicht Teil von Comanche selbst, wird aber von der Hubzilla-Plattform als Themenspezifizierer erkannt.
Navbar
[navbar]tucson[/navbar]
Verwenden Sie die Vorlage "tucson" für die Navigationsleiste und die CSS-Regeln. Standardmäßig wird die Vorlage "default" für die Navigationsleiste verwendet.
Regions
Jede Region hat, wie oben erwähnt, einen Namen. Sie spezifizieren die Region, die Sie interessiert, mit einem "region"-Tag, der den Namen enthält. Alle Inhalte, die Sie in diesem Bereich platzieren möchten, sollten zwischen dem öffnenden Region-Tag und dem schließenden Tag platziert werden.
[region=htmlhead]....content goes here....[/region]
[region=aside]....content goes here....[/region]
[region=nav]....content goes here....[/region]
[region=content]....content goes here....[/region]
CSS und Javascript
Wir haben die Möglichkeit, Javascript- und CSS-Bibliotheken in den htmlhead-Bereich einzubinden. Zurzeit verwenden wir jquery (js), bootstrap (css/js) und foundation (css/js).
Dies überschreibt den htmlhead des ausgewählten Themas.
[region=htmlhead]
[css]bootstrap[/css]
[js]jquery[/js]
[js]bootstrap[/js]
[/region]
Menüs und Blöcke
Mit den Werkzeugen zur Erstellung von Webseiten können Sie neben dem Seiteninhalt auch Menüs und Blöcke erstellen. Diese bieten einen Teil des vorhandenen Inhalts, der in den von Ihnen festgelegten Bereichen und in der von Ihnen festgelegten Reihenfolge platziert werden kann. Jedes dieser Elemente hat einen Namen, den Sie bei der Erstellung des Menüs oder Blocks festlegen.
[menu]mymenu[/menu]
Dadurch wird das Menü "mymenu" an dieser Stelle auf der Seite platziert, die sich innerhalb eines Bereichs befinden muss.
[menu=horizontal]mymenu[/menu]
Dadurch wird das Menü mit dem Namen "mymenu" an dieser Stelle auf der Seite platziert, die sich innerhalb eines Bereichs befinden muss. Außerdem wird dem Menü die Klasse "horizontal" zugewiesen. Die Klasse "horizontal" ist im redbasic-Theme definiert. Sie kann in anderen Themes verfügbar sein, muss es aber nicht.
[menu][var=wrap]none[/var]mymenu[/menu]
Die Variable [var=wrap]none[/var]
in einem Block entfernt das umschließende div-Element aus dem Menü.
[block]contributors[/block]
Dadurch wird ein Block mit dem Namen "contributors" in dieser Region platziert.
[block=someclass]contributors[/block]
Dadurch wird ein Block mit dem Namen "contributors" in dieser Region platziert. Zusätzlich wird die Klasse "someclass" auf den Block angewendet. Dies ersetzt die Standard-Blockklassen "bblock widget".
[block][var=wrap]none[/var]contributors[/block]
Die Variable [var=wrap]none[/var]
in einem Block entfernt das umschließende div-Element aus dem Block.
Widgets
Widgets sind ausführbare Anwendungen, die vom System bereitgestellt werden und die Sie auf Ihrer Seite platzieren können. Einige Widgets benötigen Argumente, mit denen Sie das Widget an Ihren Zweck anpassen können. System-Widgets sind hier aufgelistet. Widgets können auch von Plugins, Themes oder Ihrem Website-Administrator erstellt werden, um zusätzliche Funktionen bereitzustellen.
Widgets und Argumente werden mit den Tags "widget" und "var" angegeben.
[widget=recent_visitors][var=count]24[/var][/widget]
Damit wird das Widget "recent_visitors" geladen und mit dem Argument "count" auf "24" gesetzt.
Kommentare
Das Tag "comment" wird zur Abgrenzung von Kommentaren verwendet. Diese Kommentare werden auf der gerenderten Seite nicht angezeigt.
[comment]This is a comment[/comment]
Bedingte Ausführung
Sie können ein 'if'-Konstrukt verwenden, um Entscheidungen zu treffen. Diese basieren derzeit auf der Systemkonfigurationsvariable oder dem aktuellen Beobachter.
[if $config.system.foo]
... the configuration variable system.foo evaluates to 'true'.
[else]
... the configuration variable system.foo evaluates to 'false'.
[/if]
[if $observer]
... this content will only be show to authenticated viewers
[/if]
Die 'else'-Klausel ist optional.
Neben der booleschen Auswertung werden mehrere Tests unterstützt.
[if $config.system.foo == bar]
... the configuration variable system.foo is equal to the string 'bar'
[/if]
[if $config.system.foo != bar]
... the configuration variable system.foo is not equal to the string 'bar'
[/if]
[if $config.system.foo {} bar ]
... the configuration variable system.foo is a simple array containing a value 'bar'
[/if]
[if $config.system.foo {*} bar]
... the configuration variable system.foo is a simple array containing a key named 'bar'
[/if]
Komplexes Beispiel
[comment]use an existing page template which provides a banner region plus 3 columns beneath it[/comment]
[template]3-column-with-header[/template]
[comment]Use the "darknight" theme[/comment]
[theme]darkknight[/theme]
[comment]Use the existing site navigation menu[/comment]
[region=nav]$nav[/region]
[region=side]
[comment]Use my chosen menu and a couple of widgets[/comment]
[menu]myfavouritemenu[/menu]
[widget=recent_visitors]
[var=count]24[/var]
[var=names_only]1[/var]
[/widget]
[widget=tagcloud][/widget]
[block]donate[/block]
[/region]
[region=middle]
[comment]Show the normal page content[/comment]
$content
[/region]
[region=right]
[comment]Show my condensed channel "wall" feed and allow interaction if the observer is allowed to interact[/comment]
[widget]channel[/widget]
[/region]
Eingebaute automatische Verschlüsselung
Vollständige Offenlegung: Die Verschlüsselung, die hubzilla standardmäßig verwendet, ist nicht absolut wasserdicht. Es gibt bekannte Verfahren, um sie zu umgehen. Das istaber sehr aufwändig und muss für jeden Kanal einzeln durchgeführt werden. Und um das klarzustellen: Andere Dienste speichern Ihre Nachrichten im Klartext, daher sehen wir diesen Ansatz als eine deutliche Verbesserung für Ihre Privatsphäre an. Außerdem steht es Ihnen jederzeit frei, weitere Verschlüsselungen und Passwortschutz zu verwenden, wenn Sie dies wünschen. Um dies näher zu erläutern:
- jeder Kanal hat sein Schlüsselpaar
- jeder nicht-öffentliche Beitrag wird automatisch verschlüsselt
- optionaler Passwortschutz für Inhalte über Krypto-Javascript, Browser-zu-Browser-Verschlüsselung (muss in den Einstellungen aktiviert werden) Vollständige Offenlegung: Ein böswilliger Hub-Administrator könnte bösartigen Javascript-Code (z.B. Keylogging-Fähigkeiten) in den Code einschleusen. Verschlüsseln Sie unsere Daten mit GPG, werden Sie selbst Hub-Administrator oder verwenden Sie andere Kommunikationsmittel, wenn Sie das stört.
Was ist also der Umfang der Sicherheit? Um es ganz offen zu sagen: Das mag toll sein, aber es ist nicht perfekt.
- Jeder nicht öffentliche Beitrag wird automatisch verschlüsselt, aber Personen, die Zugriff auf die Datenbank und die Dateien der Website haben , können mit Hilfe dieser Schlüssel, die natürlich auf dem Server gespeichert werden müssen, alles entschlüsseln. Um es klar zu sagen: Die Verschlüsselungsschlüssel sind für jeden Kanal unterschiedlich und es ist ein ziemlicher Aufwand, dies zu tun. Und nochmals: Andere Dienste speichern Ihre Nachrichten im Klartext und unverschlüsselt. Das ist also ein ganz erheblicher Gewinn für Ihre Privatsphäre.
Wir glauben, dass eine Massenüberwachung auf NSA-Niveau mit Klartextextraktion aufgrund des Designs des zot-Protokolls wahrscheinlich nicht möglich ist. Gezielte Angriffe, wie z. B. das Hacken eines Hubs, um an die Serverprotokolle und die Datenbank zu gelangen, geben nur teilweise Aufschluss darüber, was zwischen der Kommunikation von Personen zwischen verschiedenen Hubs vor sich geht. Wir glauben, dass dies es für Angreifer auf staatlicher Ebene viel teurer macht, auf Ihre Inhalte in hubzilla zuzugreifen. Wir nehmen gerne Hilfe an, um die Sicherheit des Systems zu verbessern und es auch zu überprüfen.
Tipps zum Schutz der Privatsphäre
Wenn Sie großen Wert auf Ihre Privatsphäre legen und trotzdem am Fediverse teilnehmen möchten, ist es erforderlich, dass Sie sich vor und während der Erstellung eines persönlichen Kanals konkrete Gedanken darüber machen, was Sie von sich preisgeben wollen. Das ist bei jedem Fediverse-Dienst so. Bei Hubzilla kommt aber ein anderer, wesentlicher Aspekt dazu. Sie müssen sich nicht nur die Frage über das "Was?" stellen, sonder auch noch über das "Wem?" und das "Welche?".
Mit Hubzilla legen Sie also nicht nur fest, was Sie von sich preisgeben, sondern auch, wem Sie es erlauben, die Informationen und Inhalte zu sehen. Und wem Sie welche Interaktion erlauben.
Der Vorteil ist, dass Sie nicht auf einen "Regelsatz" angewiesen sind, sondern verschiedene Regeln für verschiedene Anwendungszwecke und verschiedenen Kontakte festlegen können.
Ein typischer Anwendungsfall wäre, dass Sie am Fediverse ganz normal so teilnehmen möchten,wie man es von anderen Sozialen Netzwerken kennt.
Beim Erstellen eines Kanals müssen Sie die erste relevante Entscheidung treffen: die Kanalrolle.
Hier haben Sie die Wahl zwischen "Öffentlich", "Persönlich", "Community Forum" und "Benutzerdefiniert".
Abgesehen vom "Community Forum", das für andere Anwendungszwecke gedacht ist, haben Sie also die Wahl zwischen drei Rollen.
Bei der Rolle "Öffentlich" erlauben Sie, dass andere
- Ihren Kanal-Stream (also die Beiträge, welche Sie öffentlich teilen) und allgemein Ihre Beiträge sehen können,
- Ihr Standard-Profil sehen können,
- Ihre Verbindungen sehen können,
- Ihre Datei- und Bilderordner sehen können,
- die Webseiten Ihres Kanals sehen können,
- die Wiki-Seiten Ihres Kanals sehen können,
- Ihre Beiträge kommentieren, liken oder disliken dürfen,
- Ihnen Direktnachrichten schicken dürfen,
- Ihre Profile und Profilinhalte liken oder disliken dürfen und
- mit Ihnen chatten dürfen.
Diese rollenbasierten Regeln bilden recht gut die "normale" Nutzung eines Sozialen Netwerks ab.
Die Rolle "Persönlich" ist ähnlich und verweigert nur einige Erlaubnisse der Rolle "Öffentlich". Sie erlaubt, dass andere
- Ihren Kanal-Stream (also die Beiträge, welche Sie öffentlich teilen) und allgemein Ihre Beiträge sehen können,
- Ihr Standard-Profil sehen können,
- ./.
- Ihre Datei- und Bilderordner sehen können,
- die Webseiten Ihres Kanals sehen können,
- die Wiki-Seiten Ihres Kanals sehen können,
- ./.
- ./.
- ./.
- ./.
Mit diesem Profil ist die Interaktion durch andere Nutzer eingeschränkt, denn diese dürfen Ihre Beiträge nicht kommentieren, liken, disliken (letzteres auch nicht in Bezug auf Ihre Profile/Profilinhalte). Sie dürfen Ihnen auch keine Direktnachrichten schicken oder mit Ihnen chatten.
Die Rolle "Benutzerdefiniert" erlaubt es Ihnen, sämtliche Berechtigungen einzeln festzulegen. Hier ist Vorsicht geboten, weil unpassende Regeln einen Kanal halbwegs "unbenutzbar" machen können.
Für die angedachte Nutzung als "typischer Social Network Account" empfiehlt sich die Wahl der Rolle "Öffentlich" oder "Persönlich".
Wenn Sie sich nun eher für die Rolle "persönlich" entscheiden würden, aber trotzdem gerne weitergehende Interaktion mit bestimmten Nutzern (Freund, Familie, Kollegen, o.ä.) erlauben würden, müssen Sie deshalb nicht auf die Rolle "Öffentlich" zurückgreifen.
Hubzilla funktioniert bei den Berechtigungen mit Whitelists (Erlaubnislisten). Die Kanalrolle legt also die grundsätzlichen Berechtigungen fest. Diese können Sie nachträglich (abgesehen von der Festlegung von Zugriffsrechten im speziellen Einzelfall eines Inhalts) nicht mit anderen Mechanismen wieder entziehen.
Sie können aber mittels verschiedener Kontaktrollen die Whitelist um verschiedene Berechtigungen erweitern. So könnten Sie z.B. eine Kontaktrolle "Familie" erstellen, in welcher - zusätzlich zu den Berechtigungen, welche die Rolle "Persönlich" einräumt - weitere Berechtigungen (z.B. das Kommentieren, Linke, Disliken und das Senden von Direktnachrichten) gewährt werden. Wenn Sie nun n diesem Beispiel Ihren Kontakten, die Sie als "Familie" definieren, diese Kontaktrolle zuordnen, können Ihre Familienmitglieder - im Gegensatz zu allen anderen - Kommentare verfassen, den Daumen nach oben oder unten zeigen lassen und nicht-öffentlich (Direktnachricht) mit Ihnen kommunizieren.
Sie können beliebig viele Kontaktrollen für die verschiedensten Zwecke und Kontakte anlegen und dort weitere Berechtigungen, zusätzlich zu denen der Kanalrolle, erteilen. Aber(!): Sie können keine Berechtigung aus der Kanalrolle dort entziehen.
Es empfiehlt sich also, bei der Kanalrolle nicht zu großzügig zu sein und diese - je nach dem Nutzungszweck des Kanals - entsprechend auszuwählen. Mit der Auswahl "Benutzerdefiniert" könnten Sie z.B. eine noch restriktivere Kanalrolle als die "Persönlich" festlegen und dann für bestimmte Nutzer weitere Berechtigungen mit den Kontaktrollen festlegen (empfehlenswert erst, wenn Sie mit dem Berechtigungssystem wirklich vertraut sind).
Ein weiterer Aspekt bezüglich der Privatsphäre sind die Profil-Informationen. Für eine "typische" Nutzung als Social Network Account, sollten im Profil einige Informationen preisgegeben werden. Ansonsten werden andere Nutzer nicht auf die Idee kommen, sich mit Ihnen zu verbinden. Oder sie wollen eine Verbindung zu einem anderen Nutzer herstellen, doch dieser lehnt dies ab, weil er keinerlei Informationen zu Ihnen hat (es sei denn, er kennt Sie und ihren Kanalnamen). Einige Informationen sollten dort also hinein.
So viele wie nötig, so wenige wie möglich.
Genau nach diesem Prinzip sollten sie Ihr Standard-Profil, über welches jeder Kanal verfügt, mit Informationen bestücken.
Hubzilla erlaubt es aber, mehrere Profile anzulegen. In solchen Profilen können Sie dann weitergehende Informationen angeben, die für bestimmte Verbindungen interessant sein könnten. Sie haben dann die Möglichkeit solche spezielle Profile für bestimmte Verbindungen freizugeben. Die Informationen tauchen also nicht für jeden sichtbar und öffentlich auf, sondern sie sind nur für die ausgewählten Nutzer verfügbar.
Kanal löschen
Möchten Sie Ihren Kanal löschen, nutzen Sie die Einstellungen im Hauptmenü (oben links; Pofilbild): Einstellungen → Kanal-Einstellungen.
Dort befindet sich ganz oben ein Button mit der Beschriftung "Kanal löschen". Ein Klick darauf und Ihr Kanal wird, nach Eingabe Ihres Account-Passworts (zur Absicherung) inklusive aller Inhalte gelöscht.
Beachte: Es ist nun nicht mehr möglich, einen neuen Kanal mit der selben Kanalbezeichnung auf diesem Hub anzulegen. Der Grund dafür ist, dass der Kanal-Kurzname in der Datenbank gesperrt ist, um eine Identitätsübernahme durch dritte zu verhindern. Sollte es aber dennoch erforderlich sein, den alten Kanal (durch Klonen) auf dem Hub wiederherzustellen, müssen Sie den Administrator darum bitte, den gesperrten Kurznamen aus der Hubzilla-Datenbank zu löschen.
Account löschen
Möchten Sie Ihren Account, also den gesamten Zugang zum Hub, löschen, nutzen Sie die Einstellungen im Hauptmenü (oben links; Pofilbild): Einstellungen → Konto-Einstellungen.
Dort befindet sich ganz oben ein Button mit der Beschriftung "Konto entfernen". Ein Klick darauf und Ihr Account (Konto) wird, nach Eingabe Ihres Account-Passworts (zur Absicherung) inklusive aller Inhalte gelöscht.
Tutorials
Hubzilla optisch anpassen
Mit Hubzilla Schritt für Schritt ins Fediverse
Mit Hubzilla Schritt für Schritt ins Fediverse
Der Einstieg
Wie bei jedem anderen Fediverse-Dienst steht am Anfang die Wahl des Servers (Hub). Das ist im Fediverse so und essenzieller Teil der dortigen Freiheit.
Um Hubs zu finden können Sie die üblichen Wege beschreiben: dieNutzung entsprechende Datenbanken oder Listen.
Z.B.
Liste öffentlicher Hubs bei einem Hubzilla-Server
Haben Sie sich für einen Hub entschieden, dann rufen Sie die URL auf. Damit gelangen Sie auf eine Standard-Seite. Diese kann von Hub zu Hub etwas variieren, aber in der Regel finden Sie am oberen Rand des Bildschirms zwei Menüeinträge: „Anmelden“ und „Registrieren“.
Ein Klick auf den Link führt zu einem Registrierungsformular. Hier gibt es mehrere mögliche Szenarien. Manche Hubs sind so eingestellt, dass man schon bei der Registrierung gleich einen Kanal mit erstellt (man kann – noch so eine Besonderheit von Hubzilla – mit einem Account mehrere Kanäle betreiben). Bei anderen Hubs legt man mit dem Formular zunächst nur einen Account an. Wenn man diesen erstellt hat und sich erstmalig einloggt, dann wird man auf das Formular zur Kanalerstellung geleitet.
Um einen Account anzulegen, brauchen Sie eine (funktionierende) E-Mail-Adresse und Sie müssen sich ein Passwort ausdenken. Außerdem müssen Sie noch Ihr Alter bestätigen und können dann die eingegebenen Informationen abschicken.
Nun landen Sie (meist, es soll auch Hubs geben, die diesen Schritt aussparen… halte ich für riskant) bei einer Eingabemaske, bei welcher man einen Verifizierungscode eingeben muss. Den bekommen Sie nach dem Absenden des Registrierungs-Formulars per E-Mail zugeschickt.
Mussten Sie bei der Registrierung noch keinen Kanal anlegen, so werden Sie zu diesem Zeitpunkt zur Seite „Erstelle einen Kanal“ weitergeleitet. Hier müssen Sie sich nun einen Namen für die eigene Identität ausdenken. Und zusätzlich eine Kurzbezeichnung („Spitzname“) für den Kanal (ein Vorschlag wird automatisch aus dem Kanalnamen erzeugt). Diese Kurzbezeichnung wird der wesentliche Bestandteil des Fediverse-Handles (also der eigenen „Fediverse-Adresse“).
Hinweis zum Handle bei Hubzilla: |
---|
Hubzilla macht beim Handle im Vergleich zu anderen Fediverse-Diensten eine Ausnahme. Während beinahe überall vor das Handle ein „@“ gesetzt wird, entfällt dies bei Hubzilla. Das verinnerlicht man aber schnell. Sucht man mit Hubzilla z.B. einen Nutzer, der ein Mastodon-Konto hat, über dessen Handle, dann lässt man das führende „@“ einfach weg. Will man hingegen von einem anderen Fediverse-Dienst aus einem Hubzilla-Nutzer folgen oder diesen suchen, stellt man dem Hubzilla-Handle einfach ein „@“ voran. |
Nach dem Anlegen das Kanals sind Sie dann auch endlich „drin“. Als Standard landet man bei Hubzilla im „Headquarter“ („HQ“), einer Übersichtsseite über den eigenen Kanal.
Und es ist, wie immer beim Einstieg im Fediverse, ziemlich leer dort. In der linken Seitenleiste finden Sie Tabs mit verschiedenen Informationen:
- Öffentliche (oder eingeschränkte) Nachrichten: Das ist eine kompakte Ansicht der persönlichen Timeline (bei Hubzilla „Stream“ genannt)
- Direktnachrichten: Postings, die nur unter ausgewählten Teilnehmern ausgetauscht werden.
- Favorisierte Postings: Man kann ein Posting mit einem „Sternchen“ versehen, um sie zu markieren. Solchermaßen markierte Beiträge landen hier.
- Benachrichtigungen
In der Mitte wird der persönliche Stream (Timeline) angezeigt. In der rechten Seitenleiste werden wichtige Informationen (Mitteilung über neue Kontakte, neue Beiträge etc.) angezeigt. Bei einem neu erzeugten Kanal erscheint hier auch eine Auflistung für die ersten Schritte bei Hubzilla und Links, die zu den entsprechenden Funktionen führen.
Benötigt man diese Einsteiger-Hilfe nicht mehr, lässt sie sich unter Einstellungen → Anzeige-Einstellungen → Inhaltseinstellungen per Schalter abschalten.
Zunächst sollten Sie Ihr Profil sinnvoll befüllen… wie bei jedem Fediverse-Dienst. Keine schwarze Magie!
Am oberen Bildschirmrand befindet sich die Navigationsleiste. Links ist das Menü zur Kanalauswahl, für das eigene Profil und für die Einstellungen zu sehen. Rechts befinden sich Icons für einige Funktionen und das sogenannte „App-Menü“ (⋮), über welches man zu den installierten Apps gelangt. Als Standard werden dort die wichtigsten Anwendungen bereits zur Verfügung gestellt:
- Dateien: Zugang zur eigenen Cloud
- Fotos: Zugang zum eigenen Fotoalbum
- Hilfe
- Kalender
- Kanal: Die Seite des eigenen Kanals mit den Kanalinformationen. Hier werden im Stream nur die eigenen Beiträge angezeigt.
- Stream: Es wird zur föderierten Streamansicht gewechselt.
- Verbindungen: Hier werden die vorhandenen Verbindungen aufgeführt („Follower“ und „Gefolgte“). Außerdem kann man im Verbindungsverzeichnis neue Verbindungen hinzufügen.
- Verzeichnis: Das Benutzerverzeichnis wird angezeigt. Beachte: Man kann das globale Verzeichnis anschauen oder auch nur ein Verzeichnis mit den Nutzern der eigenen Instanz. Auch hier kann man neue Verbindungen herstellen.
Ich empfehle dringend, noch einige weitere Apps zu installieren und zu aktivieren: ActivityPub, Superblock und Öffentlicher Beitragsstream.
Die App ActivityPub ist essenziell, wenn man am Fediverse teilnehmen möchte. Diese App ist ein MUSS und erfordert lediglich die Installation und Aktivierung. Weitere Einstellungen sind nicht erforderlich.
Superblock ist ebenfalls sehr wichtig, denn damit ist es möglich, Postings von (auch nicht gefolgten) Nutzern aus dem Stream auszuschließen.
Bei vielen (leider, aber auch verständlicher Weise, nicht bei allen) Hubs steht außerdem die App „Öffentlicher Beitragsstream“ zur Verfügung. Diese stellt die öffentliche Zeitleiste aller Fediverse-Instanzen, die mit dem eigenen Hub föderieren, zur Verfügung. Ein guter Ort, sich zu orientieren und neue Kontakte zu finden.
Apps zu installieren und zu aktivieren ist kein Problem. Man wählt im App-Menü den letzten Eintrag „+ Apps“ um zur App-Verwaltung zu gelangen.
Hier können Sie sich die installierten Apps (also die voreingestellten Apps) und die generell verfügbaren Apps (alle, auch die nicht installierten) anzeigen lassen.
ActivityPub, Superblock und Öffentlicher Beitragsstream befinden sich noch ausschließlich unter „Verfügbare Apps“. Ein Klick auf „Installieren“ installiert diese und sie stehen dann auch bei „Installierte Apps“ zur Verfügung.
Die neu installierten Apps müssen noch „aktiviert“, also auch durch das Menü nutzbar gemacht werden. Man findet in der Box der App ein „Sternchen-Symbol“. Klickt man darauf, färbt sich der Stern gelb und die App ist aktiv und erscheint nun auch im App-Menü.
Es gibt auch noch ein Pinnadel-Symbol. Klicken Sie dies an, so erscheint die App dauerhaft auch in der Navigationsleiste oben rechts.
Es ist außerdem empfehlenswert, bei dieser Gelegenheit die Apps“Kanal“ und „Stream“ an die Navigationsleiste anzupinnen, weil diese oft benötigt werden.
Wichtig noch, wie man Kontakte hinzufügt…
Haben Sie z.B. im öffentlichen Stream einen interessanten Nutzer gefunden, können Sie einfach auf das Profilbild des Nutzers klicken und im aufklappenden Menü „Verbinden“ auswählen. Sie können aber auch auf das Handle des Nutzer klicken worauf Sie auf eine Seite mit einem Button „Verbinden“ geleitet werden..
Kennt man das Handle eines Fediverse-Nutzers, dann kann man auch einfach auf die App „Verbindungen“ klicken. Es öffnet sich das Verbindungs-Verzeichnis. Ganz oben befindet sich ein Button „+ Add“. Klicken Sie auf diesen, öffnet sich ein Eingabefeld, in welches Sie das Handle eingeben können (dran denken: ohne führendes „@“). Ein Klick auf das daneben befindliche „+“ und der Kontakt wird hinzugefügt.
Schließlich können Sie auch das Verzeichnis aufrufen (am besten „nur dieser Hub“ in der linken Seitenleiste deaktivieren, um das globale Verzeichnis zu nutzen). Hier können Sie einfach durchscrollen oder auch gezielt nach Namen oder Interessen suchen, oder auch nach Tags (Schnellzugriff auch über eine Schlagwörterwolke in der linken Seitenleiste). Das Verbinden erfolgt hier durch Klick auf den Button „Verbinden“.
Haben Sie Kontakte, die Apps installiert und Ihr Profil vervollständigt, können Sie Hubzilla nun ganz einfach wie jeden anderen Fediversedienst nutzen.
Gibt es eine App?
Jein…
Grundsätzlich benötigt man keine. Man kann auf dem mobilen Endgerät einfach im Webbrowser den Hub aufrufen. Das responsive Design erlaubt eine ordentliche Bedienung.
Allerdings gibt es für Android eine ältere App, die aber auch heute noch sehr gut funktioniert. Man findet sie z.B. bei F-Droid unter dem Namen Nomad. Ich verwende sie noch immer, wenn ich mal (was selten ist) auf dem Smartphone mit Hubzilla arbeiten möchte.
Hubzilla optisch anpassen
Nach dem Anlegen eines Kanals, ist dessen Optik nicht besonders ansprechend.
Apps anpinnen
Als erstes pinnen Sie die wichtigsten Apps an die obere Navigationsleiste: „Beitrag schreiben“, „Kanal“, „Stream“, „Verbindungen“ und „Öffentlicher Beitrags-Stream“.
Dazu wählen Sie im App-Menü (⋮ oben rechts) den untersten Menüeintrag „+ Apps“. Damit gelangen Sie in die App-Einstellung und sofort bei den bereits installierten Apps. Auf dieser Seite klicken Sie nun bei jeder gewünschten App auf das kleine Pin-Nadel-Symbol und sehen dann auch sofort, wie das jeweilige Icon oben in der Navigationsleiste erscheint.
Anzeige-Einstellungen
Jetzt geht es an die Einstellungen für die Anzeige. Dafür klicken Sie im Hauptmenü (oben links, wo das eigene Avatarbild zu sehen ist) auf den Eintrag „Einstellungen“. In der linken Seitenleiste sind nun die verschiedenen Einstellungskategorien zu sehen. Hier wählen Sie „Anzeige-Einstellungen“.
Die Seite für die Anzeige-Einstellungen wird angezeigt. Da Sie das Design anpassen wollen, ist der Tab „Benutzerdefinierte Design-Einstellungen“ die richtige Wahl.
Die Eingabemaske weist zunächst aber nur wenige Möglichkeiten auf (fünf Einstellungen). Die letzte Einstellung ist diejenige, bei der Sie den Schalter als erstes einschalten müssen: „Erweiterte Einstellungen anzeigen“. Auf „Absenden“ klicken und erneut den Tab „Benutzerdefinierte Design-Einstellungen“ aufrufen. Nun sind viel mehr Einstellungen zu sehen.
Als Beispiel werden hier einmal die Farben abgeändert, die Größe der Avatare im Stream angepasst und ein Hintergrundbild festgelegt.
Unter den Haupteinstellungen finden Sie die Einstellungen für die Farben des Farbschemas. Unter jedem Eingabefeld ist als kleiner Kreis die Standard-Farbe angezeigt. Bei der Wahl einer eigenen Farbe, ist es sinnvoll sich zumindest bezüglich der Helligkeit ungefähr an der Standard-Farbe zu orientieren. Klickt man in eines der Eingabefelder, öffnet sich ein Farbwahl-Dialog, über welchen man nun die Farbe festlegen kann. Als Beispiel hier ein grünes Farbschema bei welchem die grundlegenden Farben geändert werden: „Primary theme color“, also die Grundfarbe des Themes, „Success theme color“, das ist die Farbe z.B. für anklickbare Links, „Info theme color“, die z.B. als Farbe für markierte Menüeinträge als Hintergrundfarbe angezeigt wird, sowie die „Hintergrundfarbe der Navigationsleiste“. Alle anderen Farben werden im Beispiel nicht verändert. Die Farbwahl ist natürlich jedem selbst überlassen.
Schließlich die „Größe der Avatare von Themenstartern“ auf 48 Pixel festlegen.
Fehlt noch das Hintergrundbild. Dieses sollte relativ groß sein, ungefähr der Größe des hauptsächlich genutzten Bildschirms entsprechend. Außerdem ist es empfehlenswert, ein eher helles bzw. blasses Bild zu verwenden (ggf. mit dem Grafikprogramm aufhellen und den Kontrast verringern), damit es die eigentlichen Inhalte nicht „erschlägt“.
Das Hintergrundbild muss irgendwo über eine URL erreichbar sein. Da bietet es sich an, das Bild in die Dateien (Cloud) des eigenen Kanals hochzuladen und von dort aus zu verwenden.
Dafür öffnet man im App-Menü die App „Dateien“. Hier kann man sich, wenn man mag, einen extra Ordner anlegen (bitte beachten, dass der Ordner und auch das dort hochgeladene Bild öffentlich zugreifbar sind… dafür die Zugriffsrechte mit dem kleinen Vorhangschloss, dem Privacy Tool, evtl. anpassen) und anschließend das Bild hochladen.
Nach dem Hochladen wird das Bild in der Dateiliste angezeigt. Ein Rechtsklick auf den Eintrag und die Auswahl, die URL zu kopieren befördert die URL für das Bild in die Zwischenablage.
Zurück bei „Benutzerdefinierte Design-Einstellungen“ kann man nun die URL in das Eingabefeld „Hintergrundbild“ einfügen.
Ein letzter Klick und Hubzilla erstrahlt in der neuen Optik.
PDL-Editor
Grundlagen
Verschiedene Apps und Grundfunktionen von Hubzilla basieren auf eigens dafür gestalteten Webseiten. Der Nutzer kommt mit den dahinter liegenden Mechanismen nicht in Berührung, er nutzt diese Seiten einfach.
Ruft man beispielsweise die App „Kanal“ auf, so wird einem der eigene Kanal angezeigt.
Ganz oben kann man das Banner des Kanals sehen. In dieses Banner sind der Kanalname und die Kanaladresse (Handle) eingebettet.
Darunter befindet sich die Navigationsleiste mit dem Hauptmenü, dem Titel des Hub, ggf. angepinnten Apps und dem App-Menü.
Interessant wird es dann aber im Bereich unter der Navigationsleiste. Hier sind bei den verschiedenen Apps die größten Unterschiede festzustellen. Bei der Kanal-Seite findet sich in der linken Seitenleiste (im unveränderten Standard-Zustand) zuoberst eine Karte mit den Kanalinformationen (Banner, Profilbild, Kurzbeschreibung, Profilinfos).
In der Mitte, im Inhaltsbereich, werden die von diesem Kanal erstellten Inhalte angezeigt.
Unter der Profilinfo-Karte befindet sich in der linken Seitenleiste eine Karte mit einem Teil der Verbindungen (beim Aufruf fremder Kanäle werden hier die gemeinsamen Kontakte angezeigt).
Darunter wiederum befindet sich eine Karte mit den Archiven der Inhalte (oberste Ebene sind die Jahre, eine Gliederungsebene darunter die Monate). Wählt man ein Archiv aus, so werden im Inhaltsbereich nur die Inhalte angezeigt, die im gewählten Archivzeitraum veröffentlicht wurden.
Unter der Archivkarte befindet sich dann die Karte der Kategorien. Hier werden sämtliche Kategorien, unter welchen Inhalte veröffentlicht wurden, aufgeführt. Ein Klick auf eine solche Kategorie führt dazu, dass im Inhaltsbereich sämtliche Inhalte angezeigt werden, die von dem Kanal unter der entsprechenden Kategorie veröffentlicht wurden.
Unter der Archiv-Karte befindet sich die Karte mit der Schlagwörter-Wolke, welche die genutzten Hashtags anzeigt und mit denen man den Inhalt des Inhaltsbereichs (Artikel des Kanals) filtern kann.
In der rechten Seitenleiste werden, sofern ungesehene Benachrichtigungen vorhanden sind, diese in einer weiteren Karte gezeigt.
So ist der "Normalzustand".
Module mit dem PDL-Editor bearbeiten
Die verschiedenen Seiten, die man über Apps erreichen kann, werden auch als "Module" bezeichnet.
Das Aussehen dieser Seiten kann man nun als Nutzer in großen Teilen anpassen und gestalten. Intern wird der Aufbau einer solchen Seite durch eine PDL-Datei bestimmt. Diese Dateien sind Layout-Dateien, welche die Comanche Seitenbeschreibungssprache nutzen.
Damit sich der Nutzer nicht mit einer solchen Sprache auseinandersetzen muss, gibt es die App "PDL Editor", mit welchem man den Seitenaufbau mit einem GUI verändern / erstellen kann.
Die App muss man zunächst installieren und aktivieren. Dann kann man sie aus dem App-Menü heraus aufrufen.
Ruft man den PDL-Editor auf, so wird als Standard die Seitenstruktur des HQ angezeigt.
Zentral am unteren Bildschirmrand findet man das Hauptmenü des PDL-Editors. Hier gibt es die Einträge
"MODULES", "TEMPLATES", "ITEMS", "SOURCE" und "APPLY".
Aus dem Menü "MODULES" kann man das zu bearbeitende Modul (das entspricht der zu bearbeitenden Seite) auswählen.
Angenommen, Sie möchten die Kanal-Seite (wie sie einem selbst, aber auch Besuchern angezeigt wird) anpassen, so wählt man hier das Modul "channel" aus.
Die PDL-Datei für die Kanalseite wird geladen und man sieht die entsprechenden, gerade beschriebenen Bestandteile ("ITEMS") dieser Seite.
Angenommen, Sie möchten nun unsere Kanalseite mit einer Anzeige der Uhrzeit in der rechten Seitenleiste "verfeinern", so wählt man unter "ITEMS" das Item "CLOCK" aus, "ergreift" es mit dem Mauszeiger am Kreuzpfeil-Symbol und zieht es nach rechts in die Seitenleiste.
Damit die Änderungen auch übernommen werden, klickt man anschließend auf "APPLY" im Hauptmenü.
Ruft man nun die Kanalseite auf, so erscheint eine Karte mit der aktuellen Uhrzeit in der rechten Seitenleiste.
Auf diese Weise kann man alle Seiten, die man unter "MODULES" findet, nach dem eigenen Geschmack anpassen.
Hat man seine Seite angepasst und sie ist irgendwie "so völlig zerhackstückt": Kein Grund zur Panik! Im Hauptmenü findet man bei geänderten Layoutseiten den zusätzlichen Eintrag "RESET". Ein Klick darauf setzt das Seitenlayout auf den Hubzilla-Standard zurück.
Hier werden jetzt aber nicht sämtliche Items vorgestellt... jeder darf ein wenig experimentieren. Die meisten haben einen erklärenden Titel.
Klickt man im PDL-Hauptmenü auf "SOURCE", so wird einem der Quelltext des aktuellen Layouts angezeigt. Ein Blick hier hinein hilft, mit PDL vertraut zu werden. Außerdem sind hier auch Änderungen direkt im Quelltext möglich... falls irgendwas nicht über die "ITEMS" erreichbar ist. Hierfür sollte man sich aber mit der Seitenauszeichnungssprache, den Blöcken und Modulen vorher vertraut machen.
PDL-Editor für Fortgeschrittene
Angenommen, man hat ein paar Artikel erstellt und möchte einige davon über ein Menü in der rechten Seitenleiste der Kanalseite zugänglich machen.
Das ist durchaus machbar.
Doch dafür benötigt man zunächst einmal ein Menü. Um Menüs zu erstellen, muss man allerdings die App "Webseiten" installieren und aktivieren, denn das Erstellen von Menüs ist Teil der Webseiten-Funktionalität. Also selbst wenn man keine Webseiten in seinem Kanal erstellen möchte, braucht man zum Erstellen von Menüs die App "Webseiten". Wobei... so ganz stimmt das nicht. Man kann den Menüeditor auch anders erreichen, als über die App "Webseiten". Dafür gibt man <url-des-hub>/menu/<kanalname>
ein. Nun landet man auch in der Menü-"App". Einfacher ist es allerdings mit der Webseiten-App.
Ein Klick auf "Erstelle" öffnet den Menü-Editor.
Hier muss man nun einen passenden Namen (über den man das Menü später ansprechen kann) und (optional) einen Titel für das Menü eingeben (dieser ist später auf der Webseite zu sehen).
Danach klickt man auf "Absenden und fortfahren".
Nun landet man im Link-Editor des gerade erstellten Menüs. Hier gibt man den Titel des Menüeintrags und die dazugehörige URL ein. Man kann auch die Reihenfolge der Sortierung der Menüeinträge über das Feld "Reihenfolge in der Liste" festlegen. Hat man die Eingabe erledigt und klickt auf "Absenden und fortfahren", kann man anschließend einen weiteren Menüeintrag eingeben. Ein Klick auf "Absenden und fertigstellen", fügt den Eintrag hinzu und beendet den Menüeditor (man kann Menüs selbstverständlich auch im nachhinein noch bearbeiten).
Jetzt erscheint das neue Menü in der Liste der Menüs.
Jetzt zurück zum PDL-Editor und dort das Kanal-Modul aufrufen.
Nun gibt es wieder zwei Möglichkeiten. Entweder, man öffnet den Quelltexteditor "SOURCE" und gibt den Eintrag für die Menükarte an der passenden Stelle per Hand ein...
Hier wählt man, wenn das Menü in der rechten Seitenleiste erscheinen soll, die Region "right_aside" und gibt dort als neue Zeile [menu]artikelmenu[/menu]
ein.
Nun noch auf "Submit" klicken und schon erscheint die neue Karte im visuellen PDL-Editor.
Mit "APPLY" übernehmen... und dann ist das Menü auf der Kanal-Webseite.
Die zweite Methode (mit der man nicht die richtige Stelle im Quelltext suchen muss) ist es, im PDL-Editor einfach ein beliebiges Item an die Stelle zu ziehen, wo das Menü erscheinen soll. Dann klickt man auf den "Edit"-Button bei diesem Item, ändert den vorhandenen Eintrag auf [menu]artikelmenu[/menu]
und klickt auf "Submit". Dann noch ein "APPLY" und man hat das selbe Ergebnis.
Viel Spaß beim Experimentieren!
Ein abgeleitetes Thema erstellen
Lektion 1 Ein abgeleitetes Thema übernimmt die meisten Einstellungen des „übergeordneten“ Themas und ermöglicht es Ihnen, einige Dinge nach Ihren Wünschen zu ändern, ohne ein ganzes Themenpaket zu erstellen. Um ein abgeleitetes Thema zu erstellen, wählen Sie zunächst einen Namen. In unserem Beispiel nennen wir unser Thema „mytheme“. Hoffentlich werden Sie etwas kreativer sein. Wo immer Sie in diesem Dokument „mytheme“ sehen, ersetzen Sie es durch den von Ihnen gewählten Namen.
Verzeichnisstruktur
Zuerst müssen Sie eine Verzeichnisstruktur für das Thema erstellen. Wir werden es einfach halten. Wir brauchen ein php-Verzeichnis und ein css-Verzeichnis. Hier sind die Unix/Linux-Befehle, um dies zu tun. Gehen Sie davon aus, dass 'mywebsite' Ihr oberster Hubzilla-Ordner ist.
cd mywebsite
mkdir view/theme/mytheme
mkdir view/theme/mytheme/css
mkdir view/theme/mytheme/php
Sehr gut. Jetzt brauchen wir noch ein paar Dateien. Die erste ist Ihre Theme-Info-Datei, die das Theme beschreibt. Sie heißt view/theme/mytheme/php/theme.php (cleverer Name, oder?) Fügen Sie darin die folgenden Informationen ein - bearbeiten Sie sie nach Bedarf
<?php
/**
* * Name: Mytheme
* * Description: Beispiel Abgeleitetes Thema
* * Version: 1.0
* * Author: Ihr Name
* * Compat: Red [*]
*
*/
Funktion mytheme_init(&$a) {
App::$theme_info['extends'] = 'redbasic';
}
Denken Sie daran, die Funktion mytheme_init mit dem Namen Ihres Themas zu benennen. In diesem Fall werden wir das Thema 'redbasic' erweitern.
Erstellen Sie nun eine weitere Datei. Wir nennen dies eine PCSS-Datei, aber in Wirklichkeit ist es eine PHP-Datei.
Die Datei heißt view/theme/mytheme/php/style.php Fügen Sie darin Folgendes ein:
<?php
require_once('view/theme/redbasic/php/style.php');
echo @file_get_contents('view/theme/mytheme/css/style.css');
Das war's. Dies weist die Software an, zuerst die PCSS-Informationen für das redbasic-Theme zu lesen und dann unsere CSS-Datei zu lesen, die nur aus den Änderungen besteht, die wir an unserem übergeordneten Thema (redbasic) vornehmen wollen.
Erstellen Sie nun die eigentliche CSS-Datei für Ihr Thema. Legen Sie sie in view/theme/mytheme/css/style.css ab (wo wir der Software gerade gesagt haben, dass sie danach suchen soll). In unserem Beispiel ändern wir nur die Hintergrundfarbe des Körpers, damit Sie sehen können, dass es funktioniert. Sie können jedes CSS verwenden, das Sie möchten.
body {
background-color: #DDD;
}
Sie haben soeben erfolgreich ein abgeleitetes Thema erstellt. Dieses muss im Adminbereich „Themen“ aktiviert werden und kann dann von jedem auf der Website verwendet werden, indem es unter Einstellungen->Anzeigeeinstellungen als Standardthema ausgewählt wird.
Lektion 2
Wenn Sie die redbasic-Schemata für Ihr abgeleitetes Thema verwenden möchten, müssen Sie etwas mehr tun.
Machen Sie alles wie oben, aber erstellen Sie nicht view/theme/mytheme/php/style.php, sondern kopieren Sie stattdessen view/theme/redbasic/php/style.php nach view/theme/mytheme/php/style.php. Ändern Sie diese Datei und entfernen Sie diese beiden Zeilen (oder kommentieren Sie sie aus):
if(local_channel() && App::$channel && App::$channel['channel_theme'] != 'redbasic')
set_pconfig(local_channel(), 'redbasic', 'schema', '---');
Fügen Sie außerdem diese Zeile am Ende ein:
echo @file_get_contents('view/theme/mytheme/css/style.css');
Um den Schemaselektor anzuzeigen, müssen Sie view/theme/redbasic/tpl/theme_settings.tpl nach view/theme/mytheme/tpl/theme_settings.tpl kopieren. Ändern Sie diese Datei und ersetzen Sie die Zeilen:
{{if $theme == redbasic}}
{{include file=„field_select.tpl“ field=$schema}}
{{/if}}
mit:
{{include file=„field_select.tpl“ field=$schema}}
Handbuch für Administratoren
Hubzilla ist mehr als eine einfache Webanwendung. Es handelt sich um ein komplexes Kommunikationssystem, das eher einem E-Mail-Server als einem Webserver ähnelt. Aus Gründen der Zuverlässigkeit und Leistung werden Nachrichten im Hintergrund zugestellt und für eine spätere Zustellung in eine Warteschlange gestellt, wenn Websites nicht erreichbar sind. Diese Art von Funktionalität erfordert etwas mehr vom Hostsystem als der typische Blog. Nicht jeder PHP/MySQL-Hosting-Anbieter ist in der Lage, Hubzilla zu unterstützen. Viele können es, aber bitte prüfen Sie die Anforderungen und bestätigen Sie diese mit Ihrem Hosting-Anbieter vor der Installation.
Wir haben uns sehr bemüht, sicherzustellen, dass Hubzilla auf Standard-Hosting-Plattformen läuft, wie sie für Wordpress-Blogs und Drupal-Websites verwendet werden. Es läuft auf den meisten Linux-Systemen.
Wo Sie weitere Hilfe finden
Wenn Sie auf Probleme stoßen oder Fragen haben, die in dieser Dokumentation nicht behandelt werden, lassen Sie es uns bitte über den Issue Tracker wissen. Bitte beschreiben Sie Ihre Betriebsumgebung so genau wie möglich und geben Sie so viele Details wie möglich zu den Fehlermeldungen an, die Sie sehen, damit wir diese in Zukunft vermeiden können. Aufgrund der großen Vielfalt an Betriebssystemen und PHP-Plattformen haben wir nur begrenzte Möglichkeiten, Ihre PHP-Installation zu debuggen oder fehlende Module zu beschaffen, aber wir werden unser Bestes tun, um allgemeine Code-Probleme zu lösen.
Bevor Sie beginnen
Wählen Sie einen Domänennamen oder einen Subdomänennamen für Ihren Server.
Die Software kann nur im Stammverzeichnis einer Domäne oder Subdomäne installiert werden und kann nicht über alternative TCP-Ports installiert werden. Diese Beschränkungen können in Zukunft gelockert werden, sind aber unbequem, so dass wir Ihnen weiterhin DRINGEND empfehlen, sich daran zu halten.
Entscheiden Sie, ob Sie SSL verwenden wollen, und besorgen Sie sich vor der Softwareinstallation ein SSL-Zertifikat. Sie SOLLTEN SSL verwenden. Wenn Sie SSL verwenden, MÜSSEN Sie ein „browsergültiges“ Zertifikat verwenden. Sie KÖNNEN KEINE selbstsignierten Zertifikate verwenden!
Bitte testen Sie Ihr Zertifikat vor der Installation. Ein Webtool zum Testen Ihres Zertifikats finden Sie unter „http://www.digicert.com/help/“. Wenn Sie Ihre Website zum ersten Mal besuchen, verwenden Sie bitte die SSL-URL („https://“), wenn SSL verfügbar ist. Dadurch werden spätere Probleme vermieden. Die Installationsroutine erlaubt es Ihnen nicht, ein nicht browsergültiges Zertifikat zu verwenden.
Diese Einschränkung wird vorgenommen, weil öffentliche Beiträge von Ihnen Verweise auf Bilder in Ihrem eigenen Hub enthalten können. Andere Mitglieder, die ihren Stream auf anderen Hubs betrachten, erhalten Warnungen, wenn Ihr Zertifikat von ihrem Webbrowser nicht als vertrauenswürdig eingestuft wird. Dies wird viele Leute verwirren, da es sich um ein dezentralisiertes Netzwerk handelt, und sie werden die Warnung über Ihren Hub erhalten, während sie ihren eigenen Hub ansehen, und könnten denken, dass ihr eigener Hub ein Problem hat. Diese Warnungen sind sehr technisch und beängstigend für einige Leute, von denen viele nicht wissen, wie sie weiter vorgehen sollen, außer den Ratschlägen des Browsers zu folgen. Das ist für die Gemeinschaft störend. Abgesehen davon erkennen wir die Probleme im Zusammenhang mit der derzeitigen Zertifikatsinfrastruktur an und stimmen zu, dass es viele Probleme gibt, aber das ändert nichts an der Anforderung.
Kostenlose „browsergültige“ Zertifikate gibt es von Anbietern wie ZeroSSL, LetsEncrypt und einigen anderen.
Wenn Sie NICHT SSL verwenden, kann es beim ersten Installationsskript zu einer Verzögerung von bis zu einer Minute kommen - während wir den SSL-Port überprüfen, um zu sehen, ob dort etwas antwortet. Bei der Kommunikation mit neuen Sites versucht Hubzilla immer zuerst eine Verbindung über den SSL-Port herzustellen, bevor es auf eine weniger sichere Verbindung zurückgreift. Wenn Sie kein SSL verwenden, MUSS Ihr Webserver überhaupt nicht auf Port 443 lauschen.
Wenn Sie LetsEncrypt für die Bereitstellung von Zertifikaten verwenden und eine Datei unter .well-known/acme-challenge erstellen, damit LetsEncrypt Ihre Domaineigentümerschaft überprüfen kann, entfernen Sie bitte das Verzeichnis .well-known oder benennen Sie es um, sobald das Zertifikat generiert wurde. Die Software stellt bei der Installation einen eigenen Handler für „.well-known“-Dienste zur Verfügung, und ein bestehendes Verzeichnis an diesem Ort kann verhindern, dass einige dieser Dienste korrekt funktionieren. Dies sollte bei Apache kein Problem sein, kann aber bei nginx oder anderen Webserver-Plattformen ein Problem darstellen.
Installation
Es gibt mehrere Möglichkeiten, einen neuen Hub zu installieren.
- Manuelle Installation auf einem bestehenden Server
- Automatisierte Installation auf einem bestehenden Server mit einem Shell-Skript
- Automatisierte Bereitstellung über einen OpenShift Virtual Private Server (VPS)
- Verwendung eines Docker-Containers
Anforderungen
- Apache mit aktiviertem mod-rewrite und „AllowOverride All“, damit Sie eine lokale .htaccess-Datei verwenden können. Einige Leute haben erfolgreich nginx und lighttpd verwendet. Beispielkonfigurations-Skripte sind für diese Plattformen in doc/install verfügbar. Apache und nginx haben die meiste Unterstützung.
- PHP 8.1 oder höher. Beachten Sie, dass in einigen Shared-Hosting-Umgebungen die Kommandozeilenversion von PHP von der Webserverversion abweichen kann
- PHP-Befehlszeilenzugriff, wenn register_argc_argv in der Datei php.ini auf true gesetzt ist und der Hosting-Provider keine Einschränkungen für die Verwendung von exec() und proc_open() hat.
- curl, gd (mit mindestens jpeg und png Unterstützung), pdo-mysql (oder pdo-postgres), mbstring, zip und openssl Erweiterungen. Die imagick-Erweiterung ist nicht erforderlich, wird aber empfohlen.
- Die xml-Erweiterung ist erforderlich, wenn Sie webdav verwenden möchten.
- eine Art von E-Mail-Server oder E-Mail-Gateway, so dass PHP mail() funktioniert.
- Ein unterstützter Datenbankserver. Die unterstützten Datenbanken sind:
- Mysql Version 8.0.22 oder höher
- MariaDB Version 10.4 oder höher
- PostgreSQL Version 12 oder höher
- Fähigkeit, Aufträge mit Cron zu planen.
- Die Installation in einer Top-Level-Domain oder Sub-Domain (ohne Verzeichnis/Pfad-Komponente in der URL) ist ERFORDERLICH.
Manuelle Installation
Entpacken Sie die Hubzilla-Dateien in das Stammverzeichnis Ihres Webserver-Dokumentbereichs
Wenn Sie den Verzeichnisbaum auf Ihren Webserver kopieren, stellen Sie sicher, dass Sie die versteckten Dateien wie .htaccess mit einbeziehen.
Wenn Sie dazu in der Lage sind, empfehlen wir, das Quellcode-Repository mit git zu klonen, anstatt eine gepackte tar- oder zip-Datei zu verwenden. Dadurch lässt sich die Software viel einfacher aktualisieren. Der Linux-Befehl zum Klonen des Repositorys in ein Verzeichnis „mywebsite“ lautet wie folgt:
git clone https://framagit.org/hubzilla/core.git mywebsite
und dann können Sie die neuesten Änderungen jederzeit mit:
git pull
Stellen Sie sicher, dass die Ordner store/[data]/smarty3
und store
existieren und vom Webserver beschreibbar sind:
mkdir -p „store/[data]/smarty3“
chmod -R 777 store
Diese Berechtigung (777) ist sehr gefährlich und wenn Sie über ausreichende Privilegien und Kenntnisse haben, sollten Sie diese Verzeichnisse nur für den Webserver und, falls abweichend, für den Benutzer, der den cron-Job ausführt (siehe unten). In vielen Shared-Hosting-Umgebungen kann dies schwierig sein, ohne ein Trouble-Ticket bei Ihrem Provider zu eröffnen. Die obigen Berechtigungen ermöglichen das Funktionieren der Software, sind aber nicht optimal.
Die folgenden Verzeichnisse müssen ebenfalls vom Webserver beschreibbar sein, damit bestimmte webbasierte Verwaltungstools funktionieren:
addon
extend
view/theme
widget
Offizielle Addons
Installation
Navigieren Sie zu Ihrer Website. Dann sollten Sie das Addon-Repository klonen (separat). Wir geben diesem Repository den Spitznamen 'hzaddons'. Du kannst andere Hubzilla-Addon-Repositories einbinden, indem du ihnen andere Nicknames gibst:
cd mywebsite
util/add_addon_repo https://framagit.org/hubzilla/addons.git hzaddons
Aktualisieren
Um den Addon-Baum auf dem neuesten Stand zu halten, sollten Sie sich auf der obersten Ebene des Website-Verzeichnisses befinden und einen Update-Befehl für dieses Repository eingeben::
cd mywebsite
util/update_addon_repo hzaddons
Erstellen Sie durchsuchbare Darstellungen der Online-Dokumentation. Sie können dies jedes Mal tun, wenn die Dokumentation aktualisiert wird:
cd mywebsite
util/importdoc
Automatisierte Installation über das Shell-Skript .homeinstall
Es gibt ein Shell-Skript in (.homeinstall/hubzilla-setup.sh
), das Hubzilla und seine Abhängigkeiten auf einer frischen Installation von Debian stable installiert. Es sollte auf ähnlichen Linux-Systemen funktionieren, aber Ihre Ergebnisse können variieren.
Anforderungen
Das Installationsskript wurde ursprünglich für einen kleinen Hardwareserver hinter Ihrem Heimrouter entwickelt. Es wurde jedoch auf mehreren Systemen mit Debian 9 getestet:
- Home-PC (Debian-9.2-amd64) und Rapberry-Pi 3 (Rasbian = Debian 9.3)
- Internetanschluss und Router zu Hause
- Mini-PC / Raspi an den Router angeschlossen
- USB-Laufwerk für Backups
- Frische Installation von Debian auf Ihrem Mini-PC
- Router mit offenen Ports 80 und 443 für Ihr Debian
Überblick über die Installationsschritte
apt-get install git
mkdir -p /var/www/html
cd /var/www/html
git clone https://framagit.org/hubzilla/core.git .
nano .homeeinstall/hubzilla-config.txt
cd .homeeinstall/
./hubzilla-setup.sh
service apache2 neu laden
- Öffnen Sie Ihre Domain mit einem Browser und gehen Sie durch die anfängliche Konfiguration von Hubzilla.
Installation mittels Docker
Es besteht die Möglichkeit, Hubzilla komfortabel und bequem als Docker-Container zu installieren. Dafür bietet Saiwal (sk@hub.utsukta.org) ein vorkonfigurierte Umgebung für einen Hubzilla-Container an.
Hauptfeatures sind:
- Einfache Bereitstellung: Verwenden Sie Docker Compose, um eine voll funktionsfähige Hubzilla-Instanz mit nur wenigen Befehlen einzurichten.
- Benutzerdefinierte Konfiguration: Passen Sie Ihre Hubzilla-Installation ganz einfach mit Umgebungsvariablen für SMTP, Datenbank und mehr an.
- Kontinuierliche Updates: Das Docker-Image ist so aufgebaut, dass es einfach aktualisiert werden kann, wenn neue Änderungen am Hubzilla-Kern oder seinen Abhängigkeiten vorgenommen werden.
- SMTP-Integration: Integrierte Unterstützung für den Versand von E-Mails mit ssmtp, wodurch die Konfiguration von E-Mail-Benachrichtigungen für Ihre Hubzilla-Instanz erleichtert wird.
Das Repository für den Container befindet sich hier: skprg/hubzilla-docker
Das Image von Grund auf neu erstellen
- Klonen Sie das Repository:
git clone https://github.com/skprg/hubzilla-docker.git
cd hubzilla-docker
- Konfigurieren Sie Ihre Umgebung: Aktualisieren Sie die Datei
docker-compose.yml
mit Ihren SMTP- und anderen Einstellungen. - Erstellen und führen Sie den Container aus:
docker-compose up --build -d
Vorgefertigtes Image verwenden
- Ersetzen Sie die folgenden Zeilen in
docker-compose.yml
build:
context: .
Dockerfile: Dockerfile
mit
image: ghcr.io/skprg/hubzilla-docker:latest
- Starten Sie den Container:
docker compose up -d
Greifen Sie auf Ihre Hubzilla-Instanz zu: Navigieren Sie zu http://localhost (oder der entsprechenden URL), um Ihre Hubzilla-Instanz anzuzeigen.
Weitere Hinweise / Update / Tipps
Weitere Hinweise, Upgrade-Anweisungen und Tipps finden Sie im oben verlinkten Repository.
Empfohlene Addons
Wir empfehlen, die folgenden Addons auf allen öffentlichen Seiten zu installieren:
nsfw - unangemessene Beiträge/Kommentare ausblenden
superblock - blockiert Inhalte von anstößigen Kanälen
Föderations Addons
Verschiedene Web-Communities haben begonnen, sich unter Verwendung gemeinsamer Protokolle zusammenzuschließen. Die beteiligten Protokolle sind in ihren Möglichkeiten etwas eingeschränkt. Das Diaspora-Protokoll ist etwas restriktiv, was die erlaubten Kommunikationsarten angeht. Alle Kommentare müssen vom ursprünglichen Autor auf eine sehr eindeutige Weise signiert werden. Das ActivityPub-Protokoll wird ebenfalls unterstützt. Kein anderes existierendes Protokoll unterstützt nomadische Standorte (es gibt inzwischen die Unterstützung nomadischer Identitäten bei ActivityPub), wie sie in diesem Projekt verwendet werden. Dies stellt einige Herausforderungen an die Unterstützung, da einige Funktionen mit einigen Netzen funktionieren und mit anderen nicht. Nichtsdestotrotz ermöglichen die Föderationsprotokolle die Herstellung von Verbindungen zu einer viel größeren Gemeinschaft von Menschen weltweit. Sie werden als Addons bereitgestellt.
- Diaspora Protocol - Das Diaspora-Protokoll wird von Diaspora und Friendica verwendet. Sie sollten zuerst 'Diaspora Statistics' (Statistiken) aktivieren, um alle verfügbaren Funktionen zu nutzen.
- PubCrawl - Das ActivityPub-Protokoll, das von Mastodon, MIsskey, Friendica und allen Fediverse-Diensten unterstützt wird.
Jedes Mitglied Ihrer Website muss selbst entscheiden, ob es diese Protokolle zulassen will oder nicht, da sie mit einigen wünschenswerten Kernfunktionen und Fähigkeiten dieser Software (wie z.B. Channel-Migration und Klonen) in Konflikt geraten können. Sie tun dies auf ihrer Seite „Einstellungen -> Feature/Addon-Einstellungen“.
Probleme nach einer Aktualisierung
Gut 90 % aller Fehler, die unmittelbar nach der Aktualisierung des Codes auf die neueste Version auftreten, sind einfache Cache-Fehler der einen oder anderen Art. Wenn Sie ein Update durchführen und feststellen, dass etwas sehr Offensichtliches kaputt ist - z. B. dass Ihre Matrix-Seite nicht geladen wird, dass Benachrichtigungen fehlen oder dass Kommentarboxen fehlen - dann ist es wahrscheinlich gar kein Fehler. Das Brechen grundlegender Funktionen ist die Art von Dingen, die Entwickler eher bemerken. Wenn Ihnen das passiert, können Sie einige einfache Schritte unternehmen, bevor Sie sich an die Support-Foren wenden:
Browser-Cache Symptome: Menüs lassen sich nicht ausklappen, die ACL-Auswahl öffnet sich nicht, die Fortschrittsanzeige wird nicht angezeigt (oder läuft in einer Endlosschleife), Matrix- und Kanalseiten werden nicht geladen. Erzwingen Sie das Neuladen der Seite. Gelegentlich, aber sehr, sehr selten, müssen Sie auch die Sitzungsdaten löschen, was durch einen Neustart des Browsers erreicht wird.
FastCGI Symptome: Falsche Variablen. Die grundlegende Benutzeroberfläche funktioniert meistens, zeigt aber falsche Inhalte an oder es fehlen ganz Inhalte. Wenn Sie php-fpm verwenden, lässt sich dieses Problem in der Regel beheben mit
service php-fpm neu starten
Smarty-Cache Die Symptome:
- Weißer Bildschirm des Todes. Dies tritt vor allem auf den Einstellungs- und Verwaltungsseiten auf.
- Fehlende Icons, Registerkarten, Menüs oder Funktionen.
Wir verwenden die Smarty3-Vorlagen-Engine, um Seiten zu generieren. Diese Vorlagen werden kompiliert, bevor sie angezeigt werden. Es kann vorkommen, dass eine neue oder geänderte Vorlage die alte kompilierte Version nicht überschreibt. Um den Smarty-Cache zu löschen, löschen Sie alle Dateien in store/[data]/smarty3/compiled , aber nicht das Verzeichnis selbst. Die Vorlagen werden dann bei ihrem nächsten Zugriff neu kompiliert.
Theme-Probleme Es gibt viele Themes für Hubzilla. Nur Redbasic wird offiziell von den Kernentwicklern unterstützt. Dies gilt auch dann, wenn ein Kernentwickler zufällig ein weiteres Theme unterstützt. Das bedeutet, dass neue Funktionen garantiert nur in Redbasic funktionieren.
Redbasic verwendet einige Javascript-Bibliotheken, die in anderen Themes anders oder gar nicht verwendet werden. Dies bedeutet, dass neue Funktionen möglicherweise nur in Redbasic richtig funktionieren. Bevor Sie ein Problem melden, sollten Sie daher zu Redbasic wechseln, um zu sehen, ob das Problem dort existiert. Wenn das Problem verschwindet, handelt es sich nicht um einen Fehler, sondern um ein Theme, das nicht auf dem neuesten Stand ist.
Sollten Sie das Problem dann den Theme-Entwicklern melden? Nein. Theme-Entwickler verwenden ihre Themes. Die Chancen stehen gut, dass sie es wissen. Geben Sie ihnen zwei oder drei Tage Zeit, um sich auf den neuesten Stand zu bringen, und melden Sie das Problem, wenn es dann immer noch nicht behoben ist. Für diese Situation gibt es zwei Lösungsmöglichkeiten. Erstens können Sie vorübergehend Redbasic verwenden. Zweitens sind die meisten Themes auch Open Source - öffnen Sie einen Pull Request und machen Sie sich einen Freund.
Service-Klassen
Mit Hilfe von Dienstklassen können Sie die Systemressourcen begrenzen, indem Sie die Möglichkeiten einzelner Konten einschränken, z. B. die Speicherung von Dateien und die Begrenzung von Posts auf der obersten Ebene. Definieren Sie benutzerdefinierte Serviceklassen entsprechend Ihren Anforderungen in der Datei .htconfig.php
. Erstellen Sie zum Beispiel eine Standard- und eine Premiumklasse mit den folgenden Zeilen:
// Dienstklassen
App::$config['system']['default_service_class']='standard'; // dies ist die Standard-Serviceklasse, die mit jedem neuen Konto verbunden wird
// Konfiguration für die Standard-Serviceklasse
App::$config['service_class']['standard'] =
array('photo_upload_limit'=>2097152, // Gesamtspeichergrenze für Fotos pro Kanal (hier 2MB)
'total_identities' =>1, // Anzahl der Kanäle, die ein Konto erstellen kann
'total_items' =>0, // Anzahl der Beiträge der obersten Ebene, die ein Kanal erstellen kann. Gilt nur für Top-Level-Posts des Channel-Benutzers, andere Posts und Kommentare sind davon nicht betroffen
'total_pages' =>100, // Anzahl der Seiten, die ein Channel erstellen kann
'total_channels' =>100, // Anzahl der Channels, die der Benutzer hinzufügen kann, andere Benutzer können diesen Channel immer noch hinzufügen, auch wenn das Limit erreicht ist
attach_upload_limit' =>2097152, // Gesamtspeicherplatz für Anhänge pro Kanal (hier 2MB)
'chatters_inroom' =>20);
// Konfiguration für Premium-Dienstklasse
App::$config['service_class']['premium'] =
array('photo_upload_limit'=>20000000000, // Gesamtspeichergrenze für Fotos pro Kanal (hier 20GB)
'total_identities' =>20, // Anzahl der Kanäle, die ein Konto erstellen kann
'total_items' =>20000, // Anzahl der Beiträge der obersten Ebene, die ein Kanal erstellen kann. Gilt nur für Beiträge der obersten Ebene des Kanalbenutzers, andere Beiträge und Kommentare sind davon nicht betroffen
'total_pages' =>400, // Anzahl der Seiten, die ein Channel erstellen kann
'total_channels' =>2000, // Anzahl der Channels, die der Nutzer hinzufügen kann, andere Nutzer können diesen Channel immer noch hinzufügen, auch wenn das Limit erreicht ist
attach_upload_limit' =>20000000000, // Gesamtspeicherplatz für Anhänge pro Kanal (hier 20GB)
'chatters_inroom' =>100);
Um eine Serviceklasse auf ein bestehendes Konto anzuwenden, verwenden Sie das Befehlszeilendienstprogramm aus dem Web-Root:
util/service_class
list service classes
util/config system default_service_class firstclass
setzt die Standarddienstklasse auf 'firstclass'
util/service_class firstclass
listet die Dienste auf, die Teil der Dienstklasse „firstclass“ sind
util/service_class firstclass photo_upload_limit 10000000
setzt die gesamte Fotoplattennutzung der firstclass auf 10 Millionen Bytes
util/service_class --account=5 firstclass
setzt die Konto-ID 5 auf die Serviceklasse 'firstclass' (mit Bestätigung)
util/service_class --channel=blogchan firstclass
setzt das Konto, dem der Kanal „blogchan“ gehört, auf die Serviceklasse „firstclass“ (mit Bestätigung)
Optionen zur Begrenzung der Dienstklasse
- photo_upload_limit - maximale Gesamtzahl an Bytes für Fotos
- total_items - maximale Gesamtzahl an Beiträgen auf oberster Ebene
- total_pages - maximale Anzahl von Seiten für Comanche
- total_identities - maximale Anzahl von Kanälen im Besitz des Kontos
- total_channels - maximale Anzahl von Verbindungen
- total_feeds - Maximale Anzahl von RSS-Feed-Verbindungen
- attach_upload_limit - maximaler Datei-Upload-Speicherplatz (Bytes)
- minimum_feedcheck_minutes - niedrigste zulässige Einstellung für die Abfrage von RSS-Feeds
- chatrooms - maximale Anzahl von Chaträumen
- chatters_inroom - maximale Anzahl Chatter pro Raum
- access_tokens - maximale Anzahl von Gastzugangstoken pro Kanal
Verwaltung der Themen
Beispiel für die Repo-Verwaltung
-
Navigieren Sie zu Ihrem Hub-Web rootroot@hub
:/root# cd /var/www
-
Fügen Sie das Theme-Repo hinzu und geben Sie ihm einen nameroot@hub
:/var/www# util/add_theme_repo https://github.com/DeadSuperHero/redmatrix-themes.git DeadSuperHero
Erstellen von Seitenvorlagen
Für eine Seitenvorlage zur Verwendung mit Comanche sind zwei Dateien erforderlich - eine PHP-Vorlage und eine CSS-Datei. Die Seitenvorlagen müssen vom Systemadministrator Ihrer Website installiert werden. Wählen Sie zunächst einen Namen. In diesem Fall werden wir eine Vorlage erstellen und sie „demo“ nennen. Sie müssen die Dateien „view/php/demo.php“ und „view/css/demo.css“ erstellen, um die PHP-Vorlage bzw. das CSS zu speichern. Um eine bessere Vorstellung von diesem Prozess zu bekommen, schauen wir uns eine bestehende Vorlage an - die „Standard“-Vorlage. Diese wird standardmäßig in der gesamten Anwendung verwendet.
view/php/default.php
<!DOCTYPE html >
<html>
<head>
<title><?php if(x($page,'title')) echo $page['title'] ?></title>
<script>var baseurl=„<?php echo z_root() ?>“;</script>
<?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
</head>
<body>
<?php if(x($page,'nav')) echo $page['nav']; ?>
<aside id=„region_1“><?php if(x($page,'aside')) echo $page['aside']; ?></aside>
<section id=„region_2“><?php if(x($page,'content')) echo $page['content']; ?>
<div id=„page-footer“></div>
<div id=„pause“></div>
</abschnitt>
<aside id=„region_3“><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></aside>
<footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>
</body>
</html>
Hier ist die entsprechende CSS-Datei
view/php/default.css
aside#region_1 {
Anzeige: block;
Breite: 210px;
Position: absolut;
oben: 65px;
links: 0;
margin-left: 10px;
}
beiseite input[type='text'] {
Breite: 174px;
}
section {
Position: absolut;
top: 65px;
links: 250px;
Anzeige: block;
rechts: 15px;
padding-bottom: 350px;
}
Wenn Sie sich diese Definitionen ansehen, fallen Ihnen vielleicht einige Dinge auf:
- Wir haben kein CSS für die Bereiche „nav“, „right_aside“ oder „footer“ angegeben. In dieser Vorlage werden „nav“ und „footer“ die volle Seitenbreite einnehmen, und wir lassen die Größe und Platzierung dieser Elemente durch das Thema steuern. „right_aside“ wird derzeit nicht verwendet.
- Es gibt Elemente auf der Seite wie „page-footer“ und „pause“, für die es keinen sichtbaren Inhalt gibt. Dieser Inhalt wird von Javascript-Elementen stammen.
- Unsere Standardvorlage verwendet eine absolute Positionierung. Modernes Webdesign verwendet häufig „float“-Div-Container, so dass bei der Anzeige auf Geräten mit kleinen Bildschirmen in der Regel keine Bildlaufleisten erforderlich sind.
Um eine neue Vorlage zu entwerfen, ist es am besten, mit einer bestehenden Vorlage zu beginnen und sie nach Wunsch zu ändern. Genau das werden wir hier tun. Die Art und Weise, wie Comanche Inhalte innerhalb einer bestimmten Region bereitstellt, ist die Verwendung eines Region-Tags.
[region=aside][widget=profile][/widget][/region]
In diesem Beispiel wird ein „Profil“-Widget in der Region „aside“ platziert. In Wirklichkeit wird jedoch der HTML-Code für das Widget in der Code-Variablen $page['aside'] abgelegt. Unsere Standardseitenvorlage definiert einen Bereich auf der Seite (das CSS positioniert diesen als absolute Seitenleiste) und fügt dann den Inhalt von $page['aside'] ein (falls vorhanden). Wenn Sie also eine Vorlage mit einem Bereich namens „foo“ erstellen wollten, würden Sie einen Platz dafür auf der Seite vorsehen, dann den Inhalt von $page['foo'] dort einfügen, wo Sie ihn verwenden wollen, und dann mit Comanche angeben
[region=foo][widget=profile][/widget][/region]
und dies würde ein Profil-Widget in der von Ihnen erstellten „foo“-Region platzieren. Verwenden Sie die CSS-Datei, um den Bereich an der gewünschten Stelle auf der Seite zu positionieren und optional seine Größe zu steuern.
Hubzilla-Entwicklung - ein Leitfaden für das Schemasystem
Ein Schema ist, kurz gesagt, eine Sammlung von Einstellungen für eine Reihe von Variablen, die bestimmte Elemente eines Themes definieren. Ein Schema wird so geladen, als wäre es Teil der config.php und hat Zugang zu allen Informationen. Das bedeutet, dass es identitätsbewusst ist und für einige interessante Dinge verwendet werden kann. Man könnte z. B. die Optionen nach Dienstklassen einschränken oder verschiedenen Mitgliedern unterschiedliche Optionen anbieten.
Standardmäßig filtern wir nur danach, ob der Expertenmodus aktiviert ist oder nicht. Wenn der Expertenmodus aktiviert ist, werden dem Mitglied alle Optionen angezeigt. Ist dies nicht der Fall, stehen nur Schema, Hintergrundbild, Schriftart und Iconset zur Auswahl.
Ein Schema wird erst nach den persönlichen Einstellungen des Mitglieds geladen. Um einem Mitglied die Möglichkeit zu geben, einen bestimmten Aspekt eines Schemas zu überschreiben, würden Sie daher die folgende Syntax verwenden:
if (! $foo)
$foo = 'bar';
Es gibt jedoch Umstände - insbesondere bei positionalen Elementen -, unter denen es wünschenswert (oder notwendig) sein kann, die Einstellungen eines Mitglieds zu überschreiben. In diesem Fall ist die Syntax noch einfacher:
$foo = 'bar';
Die Mitglieder werden Ihnen dies jedoch nicht danken, also verwenden Sie es nur, wenn es erforderlich ist. Wenn keine persönlichen Optionen eingestellt sind und kein Schema ausgewählt ist, wird zunächst versucht, ein Schema mit dem Dateinamen „default.php“ zu laden. Diese Datei sollte niemals in ein Thema eingebunden werden. Wenn dies der Fall ist, wird es zu Konflikten kommen, wenn andere ihren Code aktualisieren. Vielmehr sollte dies von den Administratoren für jede Seite einzeln festgelegt werden. default.php und default.css MÜSSEN Symlinks zu bestehenden Schemadateien sein.
Ihr Schema muss - und sollte - nicht alle diese Werte enthalten. Nur die Werte, die von den Standardwerten abweichen, sollten aufgeführt werden. Dies gibt Ihnen einige sehr mächtige Optionen mit sehr wenigen Zeilen Code.
Beachten Sie, dass die verfügbaren Optionen von Thema zu Thema unterschiedlich sind. Für das Redbasic-Theme sind folgende Optionen verfügbar:
- nav_colour Die Farbe der Navigationsleiste. Die Optionen sind rot, schwarz und silber. Alternativ kann man $nav_bg_1, $nav_bg_2, $nav_bg_3 und $nav_bg_4 einstellen, um Farbverläufe und Hover-Effekte zu erzielen.
- banner_colour Die Schriftfarbe des Bannerelements. Akzeptiert einen RGB- oder Hex-Wert.
- bgcolour Legt die Hintergrundfarbe des Körpers fest. Akzeptiert einen RGB- oder Hex-Wert.
- background_image Legt ein Hintergrundbild fest. Akzeptiert eine URL oder einen Pfad.
- item_colour Legt die Hintergrundfarbe von Elementen fest. Akzeptiert einen RGB- oder Hex-Wert.
- item_opacity Legt die Deckkraft der Elemente fest. Akzeptiert einen Wert von 0,01 bis 1
- toolicon_colour Legt die Farbe der Werkzeugsymbole fest. Akzeptiert einen RGB- oder Hex-Wert.
- toolicon_activecolour Legt die Farbe der aktiven oder mit dem Mauszeiger gehaltenen Werkzeugsymbole fest.
- font_size Legt die Größe der Schriftarten in Artikeln und Beiträgen fest. Akzeptiert px oder em.
- body_font_size Legt die Größe der Schriftarten auf der Body-Ebene fest. Akzeptiert px oder em.
- font_colour Legt die Farbe der Schrift fest. Akzeptiert einen RGB- oder Hex-Wert.
- radius Legt den Radius der Ecken fest. Akzeptiert einen Zahlenwert und ist immer in px.
- shadow Legt die Größe der Schatten fest, die bei Inline-Bildern angezeigt werden. Akzeptiert einen numerischen Wert. Hinweis: Schatten werden nicht auf Smileys angewendet.
- converse_width Legt die maximale Breite des Inhaltsbereichs in px fest.
- nav_min_opacity
- top_photo
- antwort_foto
Wenn eine Datei your_schema_name.css gefunden wird, wird der Inhalt dieser Datei an das Ende von style.css angehängt. Dies gibt dem Schema-Entwickler die Möglichkeit, jede Style-Komponente zu überschreiben.
Grundlegende Widgets
Einige/viele dieser Widgets haben Einschränkungen, die die Art der Seite, auf der sie erscheinen können, einschränken oder eine Anmeldung erfordern können
-
clock - zeigt die aktuelle Zeit an
- args: military (1 oder 0) - verwendet 24-Stunden-Zeit anstelle von AM/PM
-
profile - zeigt eine Profil-Seitenleiste auf Seiten an, die Profile laden (Seiten mit Nickname in der URL)
-
tagcloud - zeigt eine Tagcloud von Webseiten-Elementen an
- args: count - Anzahl der Elemente, die zurückgegeben werden sollen (Standardwert 24)
-
collections - Auswahl der Privatsphärengruppe für den aktuell eingeloggten Kanal
- args: mode - eine der Optionen „conversation“, „group“, „abook“ je nach Modul
-
suggestions - Freundesvorschläge für den aktuell angemeldeten Kanal
-
follow - zeigt ein Textfeld zum Folgen eines anderen Channels an
-
notes - privater Notizbereich für den aktuell eingeloggten Kanal, wenn die Funktion private_notes aktiviert ist
-
savedsearch - Netzwerk-/Matrixsuche mit Speicherung - muss eingeloggt und die savedsearch-Funktion aktiviert sein
-
filer - Auswahl abgelegter Elemente aus dem Netzwerk/Matrix-Stream - muss eingeloggt sein
-
archive - Datumsbereichswähler für Netzwerk- und Kanalseiten
- args: 'wall' - 1 oder 0, Begrenzung auf Wall-Posts oder Netzwerk-/Matrix-Posts (Standard)
-
fullprofile - wie das aktuelle Profil
-
categories - Kategorien-Filter (Channel-Seite)
-
tagcloud_wall - Tagcloud nur für Channelseite
- args: 'limit' - Anzahl der Tags, die zurückgegeben werden sollen (Standardwert 50)
-
catcloud_wall - Tagcloud für die Kategorien der Kanalseite
- args: 'limit' - Anzahl der zurückzugebenden Kategorien (Standardwert 50)
-
affinity - Affinitäts-Schieberegler für die Netzwerk-Seite - muss eingeloggt sein
-
settings_menu - Seitenleistenmenü für die Einstellungsseite, muss eingeloggt sein
-
mailmenu - Seitenleistenmenü für die Seite mit den privaten Nachrichten - muss eingeloggt sein
-
design_tools - Menü für Design-Tools für Seiten zur Erstellung von Webseiten, muss eingeloggt sein
-
findpeople - Werkzeuge, um andere Kanäle zu finden
-
photo_albums - Liste der Fotoalben des aktuellen Seitenbesitzers mit einem Auswahlmenü
-
vcard - Mini-Profil-Seitenleiste für die Person von Interesse (Seitenbesitzer, was auch immer)
-
dirsafemode - Werkzeug zur Verzeichnisauswahl - nur auf Verzeichnisseiten
-
dirsort - Werkzeug zur Verzeichnisauswahl - nur auf Verzeichnisseiten
-
dirtags - Verzeichnis-Werkzeug - nur auf Verzeichnisseiten
-
menu_preview - Vorschau eines Menüs - nur auf Menübearbeitungsseiten
-
chatroom_list - Liste der Chaträume für den Seitenbesitzer
-
bookmarkedchats - Liste der Chaträume mit Lesezeichen, die auf dieser Seite für den aktuellen Betrachter gesammelt wurden
-
suggestedchats - „interessante“ Chaträume für den aktuellen Betrachter ausgewählt
-
item - zeigt ein einzelnes Webpage-Element nach Mitte oder Seitentitel an
- args:
- channel_id - Kanal, dem der Inhalt gehört, Standard ist die profile_uid
- mid - message_id der anzuzeigenden Webseite (muss eine Webseite sein, kein Konversationselement)
- title - URL-Seitentitel der Webseite (muss entweder title oder mid enthalten)
-
photo - Anzeige eines einzelnen Fotos
- args:
- src - URL des Fotos, muss http oder https sein
- zrl - zid-authentifizierter Link verwenden
- style - CSS-Style-String
-
cover_photo - zeigt das Titelbild für den ausgewählten Kanal an
- args:
- channel_id - zu verwendender Kanal, Standard ist die profile_uid
- style - CSS-Style-String (standardmäßig wird die Größe dynamisch an die Breite des Bereichs angepasst)
-
photo_rand - zeigt ein zufälliges Foto aus einem Ihrer Fotoalben an. Fotoberechtigungen werden beachtet
- args:
- album - Name des Albums (sehr zu empfehlen, wenn Sie viele Fotos haben)
- scale - typischerweise 0 (Originalgröße), 1 (1024px), 2, (640px) oder 3 (320px)
- style - CSS-Style-String
- channel_id - wenn nicht Ihre eigene
-
random_block - zeigt ein zufälliges Blockelement aus Ihrer Sammlung von Webpage Design Tools an. Erlaubnisse werden beachtet.
- args:
- contains - gibt nur Blöcke zurück, die den String contains im Blocknamen enthalten
- channel_id - wenn nicht Ihre eigene
-
tasklist - liefert eine Aufgaben- oder To-Do-Liste für den aktuell eingeloggten Channel.
- args:
- all - zeigt erledigte Aufgaben an, wenn all ungleich Null ist.
-
forums - liefert eine Liste der verbundenen öffentlichen Foren mit ungesehenen Beiträgen für den aktuell eingeloggten Channel.
-
activity - liefert eine Liste der Autoren von ungelesenen Netzwerkinhalten für den aktuell eingeloggten Channel.
-
album - stellt ein Widget zur Verfügung, das ein komplettes Fotoalbum aus den Alben des Seitenbesitzers enthält; dies kann zu groß sein, um in einem Seitenleistenbereich dargestellt zu werden, und wird am besten als Widget für einen Inhaltsbereich implementiert.
- args:
- album - Name des Albums
- title - optionaler Titel, wenn nicht vorhanden wird der Albumname verwendet
Neue Widgets erstellen
Klassen-Widgets
Um ein klassenbasiertes Widget namens 'slugfish' zu erstellen, erstellen Sie eine Datei mit folgendem Inhalt:
<?php
namespace Zotlabs\Widget;
class Slugfish {
function widget($args) {
... der Widget-Code kommt hier hin.
... Die Funktion gibt einen String zurück, der den HTML-Inhalt des Widgets darstellt.
... $args ist ein benanntes Array, dem alle [var]-Variablen aus dem Layout-Editor übergeben werden
... Zum Beispiel füllt [widget=slugfish][var=count]3[/var][/widget] $args mit
... [ 'count' => 3 ]
}
Die resultierende Datei kann in widget/Slugfish/Slugfish.php oder Zotlabs/SiteWidgets/Slugfish.php abgelegt werden. Sie kann auch von einem Git-Repository mit util/add_widget_repo verlinkt werden. Traditionelles funktionsbasiertes Widget: Wenn Sie ein Widget mit dem Namen „slugfish“ wünschen, erstellen Sie widget/widget_slugfish.php mit
<?php
function widget_slugfish($args) {
... Der Widget-Code kommt hier hin. Siehe obige Informationen für klassenbasierte Widgets für Details.
}
Kanal-Verzeichnis
Schlüsselwörter
Es gibt eine „Schlagwortwolke“ mit Schlüsselwörtern, die auf der Kanalverzeichnisseite erscheinen können. Wenn Sie diese Schlüsselwörter, die vom Verzeichnisserver bezogen werden, ausblenden möchten, können Sie das Konfigurationswerkzeug verwenden:
util/config system disable_directory_keywords 1
Wenn sich Ihr Hub im Standalone-Modus befindet, weil Sie sich nicht mit dem globalen Netz verbinden möchten, können Sie stattdessen sicherstellen, dass die Option directory_server system leer ist:
util/config system directory_server „“
Primäres Verzeichnis
Standardmäßig verwendet Hubzilla verfügbare Verzeichnisse im Internet, die Ihnen weltweit verfügbare Kanäle anzeigen.
Es gibt bestimmte Szenarien, in denen Sie Ihren eigenen Verzeichnis-Server benötigen, mit dem Sie mehrere Hubs verbinden können. Dadurch werden die Kanäle, die in allen Ihren Hubs erscheinen, auf die Kanäle der Hubs beschränkt, die mit Ihrem Verzeichnis-Server verbunden sind.
Anleitungen zum Einrichten eines Hubs als primäres Verzeichnis für eine Reihe von privaten Hubs.
- Öffnen Sie auf dem Hub, der der Directory Server sein wird, die Datei .htconfig.php und setzen Sie
App::$config['system']['directory_mode'] = DIRECTORY_MODE_PRIMARY;
Standardmäßig sollte dies bereits **DIRECTORY_MODE_NORMAL** sein, also ändern Sie diese Zeile einfach in **DIRECTORY_MODE_PRIMARY**.
-
Als Nächstes gehen Sie für jeden Hub (einschließlich des Verzeichnisservers) von einem Terminal aus in den Ordner, in dem er installiert ist, und führen Folgendes aus:
util/config system directory_realm YOURREALMNAME
(YOURREALMNAME kann jeder beliebige Name für Ihren Realm sein)dann:
util/config system realm_token THEPASSWORD
(THEPASSWORD ist das Passwort, das Sie für Ihren Realm verwenden möchten) HINWEIS: Verwenden Sie für jeden Hub denselben Realm-Namen und dasselbe Passwort. -
Führen Sie schließlich für jeden „Client“-Hub (von einem Terminal aus) aus:
util/config system directory_server https://theaddressofyourdirectoryserver.com
Wenn Sie sich nun das Verzeichnis jedes Hubs ansehen, sollten nur die Kanäle angezeigt werden, die auf den Hubs in Ihrem Realm existieren. Ich habe bisher mit zwei Hubs getestet, und es scheint gut zu funktionieren. Channels, die in jedem Hub erstellt wurden, werden im Primärverzeichnis und anschließend im Verzeichnis aller Client-Hubs angezeigt.
Probleme
Als ich den ersten Hub erstellte, lief er etwa eine Stunde lang, bevor ich ihn auf PRIMARY_MODE umstellte, und nachdem ich ihn umgestellt hatte, waren noch einige Kanäle aus der gesamten Matrix im Verzeichnis vorhanden. Ich habe sie aus der xchan-Tabelle gelöscht, und das scheint das Problem behoben zu haben.
Administration
Website-Verwaltung
Die Verwaltung der Website erfolgt in der Regel über die Verwaltungsseite, die sich unter /admin auf Ihrer Website befindet. Um auf diese Seite zugreifen zu können, müssen Sie über Verwaltungsrechte für den Server verfügen. Administrationsrechte werden dem ersten Konto gewährt, das sich auf Ihrer Website registriert, vorausgesetzt, die E-Mail-Adresse dieses Kontos stimmt genau mit der E-Mail-Adresse überein, die Sie bei der Einrichtung als E-Mail-Adresse des Administrators angegeben haben.
Es gibt mehrere Möglichkeiten, wie dies fehlschlagen und das System ohne ein Administratorkonto bleiben kann, z. B. wenn das erste Konto, das erstellt wurde, eine andere E-Mail-Adresse als die bei der Einrichtung angegebene Administrator-E-Mail-Adresse angegeben hat.
Aus Sicherheitsgründen gibt es auf dem System keine Webseite oder Schnittstelle, die Ihnen Administratorrechte verleiht. Wenn Sie eine Situation korrigieren müssen, in der ein System kein Administratorkonto hat, muss dies durch Bearbeiten der Kontotabelle in der Datenbank geschehen. Es gibt keine andere Möglichkeit. Dazu müssen Sie den Eintrag in der Kontotabelle finden, der zu dem gewünschten Administrator gehört, und „account_roles“ für diesen Eintrag auf 4096 setzen. Anschließend können Sie die Administratorseite über das Profilmenü Ihres Systems oder direkt über /admin aufrufen.
Ein Hub kann mehrere Administratoren haben und die Anzahl der Administratoren ist nicht begrenzt. Wiederholen Sie den obigen Vorgang für jedes Konto, das Sie mit Administrationsrechten ausstatten möchten.
Fehlersuche
Logdateien
Die Systemprotokolldatei ist eine äußerst nützliche Ressource, um Fehler aufzuspüren. Dies kann auf der Konfigurationsseite admin/log aktiviert werden. Eine Loglevel-Einstellung von LOGGER_DEBUG
wird für stabile Produktionsstandorte bevorzugt. Die meisten Probleme bei der Kommunikation oder der Speicherung werden hier aufgelistet. Eine Einstellung von LOGGER_DATA bietet viel mehr Details, kann aber Ihre Festplatte füllen. In jedem Fall empfehlen wir die Verwendung von logrotate auf Ihrem Betriebssystem, um die Protokolle zu überprüfen und ältere Einträge zu löschen.
Am Ende der Datei .htconfig.php befinden sich mehrere (auskommentierte) Zeilen, die die PHP-Fehlerprotokollierung aktivieren. Dies meldet Probleme mit der Codesyntax und der Ausführung des Codes und ist die erste Stelle, an der Sie nach Problemen suchen sollten, die zu einem „weißen Bildschirm“ oder einer leeren Seite führen. Dies ist in der Regel das Ergebnis von Code-/Syntaxproblemen. Datenbankfehler werden in der Systemprotokolldatei gemeldet, aber wir haben es als nützlich empfunden, in Ihrem Hauptverzeichnis eine Datei namens dbfail.out anzulegen, in der nur datenbankbezogene Probleme gesammelt werden. Wenn die Datei existiert und beschreibbar ist, werden Datenbankfehler sowohl in dieser Datei als auch in der Systemprotokolldatei protokolliert.
Im Falle von „500“-Fehlern werden die Probleme oft in den Protokollen Ihres Webservers protokolliert, oft in /var/log/apache2/error.log oder ähnlichem. Konsultieren Sie die Dokumentation Ihres Betriebssystems.
Es gibt drei verschiedene Protokollierungsmöglichkeiten.
Die erste ist das Datenbankfehlerprotokoll. Dieses wird nur verwendet, wenn Sie eine Datei mit dem Namen dbfail.out
im Stammverzeichnis Ihrer Website anlegen und sie für den Webserver schreibbar machen. Wenn Datenbankabfragen fehlgeschlagen sind, werden sie hier gemeldet. Sie weisen im Allgemeinen auf Tippfehler in unseren Abfragen hin, treten aber auch auf, wenn der Datenbankserver die Verbindung unterbricht oder Tabellen beschädigt werden. In seltenen Fällen werden hier Race Conditions angezeigt, wenn zwei Prozesse versuchen, einen xchan- oder Cache-Eintrag mit derselben ID zu erstellen. Alle anderen Fehler (insbesondere anhaltende Fehler) sollten untersucht werden.
Der zweite Bereich ist das PHP-Fehlerprotokoll. Dieses wird vom Sprachprozessor erstellt und meldet nur Probleme in der Sprachumgebung. Auch hier kann es sich um Syntax- oder Programmierfehler handeln, die jedoch in der Regel fatal sind und zu einem „weißen Bildschirm des Todes“ führen, d. h. PHP wird beendet. Sie sollten sich diese Datei ansehen, wenn etwas schief läuft, das nicht zu einem weißen Bildschirm führt, aber es ist nicht ungewöhnlich, dass diese Datei tagelang leer ist.
Am Ende der mitgelieferten Datei .htconfig.php
befinden sich einige Zeilen, die, wenn sie nicht auskommentiert werden, ein PHP-Fehlerprotokoll aktivieren (äußerst nützlich, um die Ursache von Fehlern beim weißen Bildschirm zu finden). Dies ist standardmäßig nicht der Fall, da es Probleme mit dem Eigentum an der Logdatei und den Schreibrechten geben könnte und die Logdatei standardmäßig nicht rotiert.
Die dritte Datei ist das „Anwendungsprotokoll“. Dieses wird von Hubzilla verwendet, um zu berichten, was im Programm vor sich geht und meldet normalerweise alle Schwierigkeiten oder unerwarteten Daten, die wir erhalten haben. Gelegentlich werden auch „Heartbeat“-Statusmeldungen ausgegeben, um anzuzeigen, dass wir einen bestimmten Punkt in einem Skript erreicht haben. Dies ist die wichtigste Protokolldatei für uns, da wir sie selbst nur zu dem Zweck erstellen, den Status von Hintergrundaufgaben und alles, was seltsam oder fehl am Platz erscheint, zu melden. Es muss nicht unbedingt etwas Schlimmes sein, aber vielleicht einfach nur unerwartet. Wenn Sie eine Aufgabe ausführen und ein Problem auftritt, lassen Sie uns wissen, was in dieser Datei steht, wenn das Problem auftritt. (Bitte schicken Sie mir keine 100M-Dumps, das würde mich nur verärgern). Nur ein paar relevante Zeilen, damit ich ein paar hunderttausend Codezeilen ausschließen und mich darauf konzentrieren kann, wo das Problem auftritt.
Dies sind Ihre Website-Protokolle, nicht meine. Wir melden ernsthafte Probleme auf jeder Protokollebene. Für die meisten Websites empfehle ich die Log-Ebene DEBUG
- sie liefert ein paar zusätzliche Informationen und erzeugt keine riesigen Logdateien. Wenn ein Problem auftritt, das sich allen Versuchen entzieht, es zu verfolgen, sollten Sie für einen kurzen Zeitraum die Protokollebene DATA
verwenden, um alle Details der Strukturen zu erfassen, mit denen wir es zu diesem Zeitpunkt zu tun hatten. Diese Protokollebene verbraucht sehr viel Speicherplatz und wird daher nur für kurze Zeiträume oder für Test-Sites von Entwicklern empfohlen.
Ich empfehle die Konfiguration von logrotate sowohl für das php-Protokoll als auch für das Anwendungsprotokoll. Normalerweise werfe ich alle ein bis zwei Wochen einen Blick auf dbfail.out, behebe alle gemeldeten Probleme und beginne dann mit einer neuen Datei. Das Gleiche gilt für die PHP-Protokolldatei. Ich schaue darin ab und zu nach, ob es etwas gibt, das behoben werden muss.
Wenn etwas schief läuft und es sich nicht um einen schwerwiegenden Fehler handelt, schaue ich mir die Anwendungsprotokolldatei an. Oft werde ich
tail -f logfile.out
während ich einen Vorgang wiederhole, bei dem es Probleme gibt. Oft füge ich zusätzliche Logging-Anweisungen in den Code ein, wenn es keinen Hinweis darauf gibt, was schief läuft. Selbst so etwas Einfaches wie „got here“ oder der Ausdruck des Wertes einer Variable, die verdächtig sein könnte. Auch das können Sie tun - ich möchte Sie sogar dazu ermutigen, dies zu tun. Sobald Sie gefunden haben, was Sie suchen müssen, können Sie
git checkout file.php
um sofort alle zusätzlichen Protokollierungsdaten, die Sie hinzugefügt haben, zu löschen. Verwenden Sie die Informationen aus diesem Protokoll und alle Details, die Sie aus Ihrer Untersuchung des Problems liefern können, um Ihren Fehlerbericht einzureichen - es sei denn, Ihre Analyse weist auf die Quelle des Problems hin. In diesem Fall beheben Sie es einfach.
Rotierende Protokolldateien
- Aktiviere das logrot Addon im offiziellen hubzilla-addons repo
- Legen Sie in Ihrem Web-Root ein Verzeichnis namens
log
mit Schreibrechten für den Webserver an - Gehen Sie zu den logrot-Administrationseinstellungen und geben Sie diesen Ordnernamen sowie die maximale Größe und Anzahl der aufbewahrten Protokolldateien ein.
Probleme melden
Wenn Sie Probleme melden, versuchen Sie bitte, so viele Details wie nötig anzugeben, damit die Entwickler das Problem reproduzieren können, und geben Sie den vollständigen Text aller Fehlermeldungen an.
Wir ermutigen Sie, diese Protokolle zusammen mit dem Quellcode, den Sie besitzen, so gut wie möglich zu nutzen, um Probleme zu beheben und ihre Ursache zu finden. Die Community kann oft helfen, aber nur Sie haben Zugang zu den Logdateien Ihrer Website, und es wird als Sicherheitsrisiko angesehen, sie weiterzugeben.
Wenn ein Code-Problem aufgedeckt wurde, melden Sie es bitte im Bugtracker des Projekts (https://framagit.org/hubzilla/core/issues). Geben Sie auch hier so viele Details wie möglich an, damit wir nicht immer wieder Fragen zu Ihrer Konfiguration stellen oder das Problem duplizieren müssen, damit wir das Problem direkt angehen und herausfinden können, was zu tun ist. Sie können auch gerne Ihre eigenen Lösungen anbieten und Patches einreichen. Wir ermutigen Sie sogar dazu, da wir alle Freiwillige sind und nur wenig Zeit zur Verfügung haben. Je mehr Leute mithelfen, desto leichter wird die Arbeit für alle. Es ist in Ordnung, wenn Ihre Lösung nicht perfekt ist. Jedes bisschen hilft, und vielleicht können wir es ja noch verbessern.
Hub-Snapshot-Tools
Hubzilla-Entwickler müssen häufig zwischen Zweigen wechseln, die möglicherweise inkompatible Datenbankschemata oder Inhalte haben. Die folgenden beiden Skripte erstellen und restaurieren komplette Snapshots einer Hubzilla-Instanz, einschließlich des Hub-Web-Root und des gesamten Datenbankstatus. Jedes Skript benötigt eine Konfigurationsdatei namens hub-snapshot.conf
, die sich im selben Ordner befindet und die spezifischen Verzeichnisse und Datenbankdetails Ihres Hubs enthält.
Konfiguration
Das Format der Konfigurationsdatei ist sehr streng. Es dürfen keine Leerzeichen zwischen dem Variablennamen und dem Wert stehen. Ersetzen Sie nur den Inhalt innerhalb der Anführungszeichen durch Ihre Konfiguration. Speichern Sie diese Datei als hub-snapshot.conf
zusammen mit den Skripten.
# Ort des Hub-Root. Normalerweise ist dies der Speicherort des Hubzilla Repo-Klons.
HUBROOT=„/var/www/“
# Name der MySQL-Datenbank
DBNAME=„hubzilla“
# MySQL-Datenbank-Benutzer
DBUSER=„hubzilla“
# MySQL-Datenbank-Passwort
DBPWD=„akeufajeuwfb“
# Der Ziel-Snapshot-Ordner, in dem das Git-Repository initialisiert werden soll
SNAPSHOTROOT=„/root/snapshots/hubzilla/“
Snapshot
Beispiel für die Verwendung:
sh hub-snapshot.sh my-hub.conf „Commit-Meldung für den Snapshot“
hub-snapshot.sh:
#!/bin/bash
if ! [ -f "$1" ]; then
echo "$1 is not a valid file. Aborting..."
exit 1
fi
source "$1"
#echo "$DBNAME"
#echo "$DBUSER"
#echo "$DBPWD"
#echo "$HUBROOT"
#echo "$SNAPSHOTROOT"
MESSAGE="snapshot: $2"
if [ "$DBPWD" == "" -o "$SNAPSHOTROOT" == "" -o "$DBNAME" == "" -o "$DBUSER" == "" -o "$HUBROOT" == "" ]; then
echo "Required variable is not set. Aborting..."
exit 1
fi
if [ ! -d "$SNAPSHOTROOT"/db/ ]; then
mkdir -p "$SNAPSHOTROOT"/db/
fi
if [ ! -d "$SNAPSHOTROOT"/www/ ]; then
mkdir -p "$SNAPSHOTROOT"/www/
fi
if [ ! -d "$SNAPSHOTROOT"/www/ ] || [ ! -d "$SNAPSHOTROOT"/db/ ]; then
echo "Error creating snapshot directories. Aborting..."
exit 1
fi
echo "Export database..."
mysqldump -u "$DBUSER" -p"$DBPWD" "$DBNAME" > "$SNAPSHOTROOT"/db/"$DBNAME".sql
echo "Copy hub root files..."
rsync -va --delete --exclude=.git* "$HUBROOT"/ "$SNAPSHOTROOT"/www/
cd "$SNAPSHOTROOT"
if [ ! -d ".git" ]; then
git init
fi
if [ ! -d ".git" ]; then
echo "Cannot initialize git repo. Aborting..."
exit 1
fi
git add -A
echo "Commit hub snapshot..."
git commit -a -m "$MESSAGE"
exit 0
Restore
#!/bin/bash
# Restore hub to a previous state. Input hub config and commit hash
if ! [ -f "$1" ]; then
echo "$1 is not a valid file. Aborting..."
exit 1
fi
source "$1"
COMMIT=$2
if [ "$DBPWD" == "" -o "$SNAPSHOTROOT" == "" -o "$DBNAME" == "" -o "$DBUSER" == "" -o "$HUBROOT" == "" ]; then
echo "Required variable is not set. Aborting..."
exit 1
fi
RESTOREDIR="$(mktemp -d)/"
if [ ! -d "$RESTOREDIR" ]; then
echo "Cannot create restore directory. Aborting..."
exit 1
fi
echo "Cloning the snapshot repo..."
git clone "$SNAPSHOTROOT" "$RESTOREDIR"
cd "$RESTOREDIR"
echo "Checkout requested snapshot..."
git checkout "$COMMIT"
echo "Restore hub root files..."
rsync -a --delete --exclude=.git* "$RESTOREDIR"/www/ "$HUBROOT"/
echo "Restore hub database..."
mysql -u "$DBUSER" -p"$DBPWD" "$DBNAME" < "$RESTOREDIR"/db/"$DBNAME".sql
chown -R www-data:www-data "$HUBROOT"/{store,extend,addon,.htlog,.htconfig.php}
echo "Restored hub to snapshot $COMMIT"
echo "Removing temporary files..."
rm -rf "$RESTOREDIR"
exit 0
Datenbank
Datenbank-Updates
Auf der Seite https://hub.hubzilla.hu/admin/dbsync kann der Administrator überprüfen, ob eine Aktualisierung fehlgeschlagen ist, und sie gegebenenfalls erneut versuchen.
Wenn eine Aktualisierung fehlgeschlagen ist, aber aus irgendeinem Grund nicht als fehlgeschlagen registriert wird, kann der Administrator versuchen, die Aktualisierung erneut auszuführen. Zum Beispiel für die DB-Aktualisierung #1999, indem er die Webseite besucht:
https://hubzilla.com.bradmin/dbsync/1999
Datenbank-Tabellen
Tabelle | Beschreibung |
---|---|
abconfig | beliebiger Speicherplatz für Verbindungen von lokalen Kanälen |
abook | Verbindungen der lokalen Kanäle |
account | Dienstanbieterkonto |
addon | registrierte Plugins |
app | persönliche App-Daten |
attach | Dateianhänge |
auth_codes | OAuth Benutzung |
cache | OEmbed Cache |
cal | CalDAV-Container für Ereignisse |
channel | lokale Kanäle |
chat | Chatraum-Inhalte |
chatpresence | Kanalpräsenzinformationen für den Chat |
chatroom | Daten für den eigentlichen Chatraum |
clients | OAuth Benutzung |
config | Hauptkonfigurationsspeicher |
conv | Meta-Konversationsstruktur für private Nachrichten in Diaspora |
event | Events |
pgrp_member | Datenschutzgruppen (Sammlungen), Gruppeninformationen |
pgrp | Datenschutzgruppen (Sammlungen), Mitgliederinformationen |
hook | Plugin-Hook-Register |
hubloc | xchan-Standortspeicher, verknüpft einen Hub-Standort mit einem xchan |
iconfig | erweiterbarer, beliebiger Speicher für Elemente |
issue | künftige Fehler-/Problemdatenbank |
item | alle Beiträge und Webseiten |
item_id | (veraltet durch iconfig) andere Identifikatoren in anderen Diensten für Beiträge |
likes | "Dinge“ mögen |
private Nachrichten | |
menu | Webseiten-Menü-Daten |
menu_item | Einträge für Menüs auf Webseiten |
notify | Benachrichtigungen |
obj | Objektdaten für Dinge (x hat y) |
outq | Ausgangswarteschlange |
pconfig | persönlicher (pro Kanal) Konfigurationsspeicher |
photo | Fotospeicher |
poll | Daten für Umfragen |
poll_elm | Daten für Abfrageelemente |
profdef | Definitionen für benutzerdefinierte Profilfelder |
profext | benutzerdefinierte Profilfelddaten |
profile | Kanalprofile |
profile_check | DFRN-Fernautorisierung, kann veraltet sein |
register | Registrierungen, die eine Verwaltungsgenehmigung erfordern |
session | Speicherung von Websitzungen |
shares | Informationen über gemeinsame Elemente |
sign | Diaspora-Unterschriften. Wird schrittweise abgebaut. |
site | Standorttabelle zum Auffinden von Verzeichnis-Peers |
source | Daten aus Kanalquellen |
sys_perms | erweiterbare Berechtigungen für OAuth |
term | Tabelle der Artikeltaxonomie (Kategorien, Tags usw.) |
tokens | OAuth Benutzung |
updates | Verzeichnis-Synchronisations-Updates |
verify | allgemeine Verifikationsstruktur |
vote | Abstimmungsdaten für Umfragen |
xchan | Liste der bekannten Kanäle im Universum |
xchat | Chaträume mit Lesezeichen |
xconfig | wie pconfig, aber für Kanäle ohne lokales Konto |
xign | von Freundschaftsvorschlägen ignorierte Kanäle |
xlink | von poco abgeleitete „Freunde von Freunden“-Verknüpfungen, auch Speicherung von Bewertungen |
xperm | OAuth/OpenID-Connect erweiterbare Berechtigungen Berechtigungsspeicher |
xprof | wenn dieser Knotenpunkt ein Verzeichnisserver ist, enthält er grundlegende öffentliche Profilinformationen über jeden im Netz |
xtag | wenn dieser Hub ein Verzeichnisserver ist, enthält er Tags oder Interessen von jedem im Netzwerk |
Erweiterte Konfigurationen für Administratoren
Dieses Dokument setzt voraus, dass Sie ein Administrator sind.
Hubzilla enthält viele Konfigurationsoptionen, die im Hauptverwaltungsbereich verborgen sind. Im Allgemeinen handelt es sich dabei um Optionen, die als zu nischenartig, fortgeschritten oder verwirrend angesehen werden.
Diese Einstellungen können über die Shell vom Webverzeichnis der obersten Ebene aus mit folgender Syntax geändert werden
util/config cat key value
für eine Website-Konfiguration, oder
util/pconfig channel_id cat key value
für eine Mitgliedskonfiguration.
Für eine Site-Konfiguration ist eine weitere Möglichkeit, eine Zeile in .htconfig.php einzufügen, mit der Syntax:
App::$config['cat']['Schlüssel'] = 'Wert';
Mitgliederkonfiguration (pconfig)
-
system.always_my_theme
Verwende immer dein eigenes Theme, wenn du Kanäle im selben Hub anschaust. Dies führt zu einigen recht einfallsreichen Problemen, wenn Kanäle mit themenabhängigen Comanche angezeigt werden.
-
system.blocked
Ein Array von Xchans, die von diesem Channel blockiert werden. Technisch gesehen ist dies eine versteckte Konfiguration und gehört hierher, aber Addons (insbesondere Superblock) haben dies in der Benutzeroberfläche verfügbar gemacht.
-
system.default_cipher
Setzt den Standardchiffre, der für E2EE-Elemente verwendet wird.
-
system.display_friend_count
Legt die Anzahl der Verbindungen fest, die im Widget des Verbindungsprofils angezeigt werden sollen.
-
system.do_not_track
Wie der Browser-Header. Dies wird viele identitätsbasierte Funktionen unterbrechen. Sie sollten wirklich nur Berechtigungen setzen, die Sinn machen.
-
system.forcepublicuploads
Erzwingt, dass hochgeladene Fotos öffentlich sind, wenn sie als Wandelemente hochgeladen werden. Es ist viel sinnvoller, die Berechtigungen von vornherein richtig zu setzen. Tun Sie das stattdessen.
-
system.network_page_default
Legt die Standardparameter für die Anzeige der Netzwerkseite fest. Dies sollte den gleichen Querystring enthalten wie die manuelle Filterung.
-
system.paranoia
Legt die Sicherheitsstufe der IP-Überprüfung fest. Wenn sich die IP-Adresse einer angemeldeten Sitzung ändert, wird diese Stufe angewendet, um festzustellen, ob das Konto als Sicherheitsverletzung abgemeldet werden sollte. Die Optionen sind: 0 - keine IP-Überprüfung 1 - 3 Oktette prüfen 2 - 2 Oktette prüfen 3 - Prüfung auf alle Unterschiede
-
system.prevent_tag_hijacking
Verhindert, dass fremde Netzwerke Hashtags in Ihren Beiträgen klauen und sie auf ihre eigenen Ressourcen leiten.
-
system.startpage
Eine weitere dieser technisch versteckten Konfigurationen, die von Addons zur Verfügung gestellt werden. Legt die Standardseite fest, die beim Einloggen angezeigt wird. Diese wird der Benutzeroberfläche durch das startpage-Addon zur Verfügung gestellt.
-
system.taganyone
Erfordert, dass die gleichnamige Konfiguration aktiviert ist. Erlaubt das @mention tagging von jedem, egal ob man verbunden ist oder nicht. Dies skaliert nicht.
-
system.anonymous_kommentare
Standardmäßig oder wenn auf 1 gesetzt, können benutzerdefinierte Berechtigungen gesetzt werden, um anonyme (moderierte) Kommentare wie bei WordPress zu erlauben, die vom Channel-Besitzer moderiert werden. Ist der Wert auf 0 gesetzt, kann kein Mitglied Ihrer Website dies auswählen oder aktivieren.
-
system.user_scalable
Bestimmt, ob die App auf Touchscreens skalierbar ist. Standardmäßig auf on, zum Deaktivieren auf zero setzen - real zero, nicht nur false.
Konfiguration der Website
-
randprofile.check
Bei der Anforderung eines Zufallsprofils zuerst prüfen, ob es tatsächlich existiert
-
randprofile.retry
Anzahl der Versuche, ein zufälliges Profil zu erhalten
-
system.admin_email
Gibt die E-Mail-Adresse des Administrators für diese Site an. Diese wird bei der Installation festgelegt.
-
system.authlog
Logdatei, die für die Protokollierung von Authentifizierungsfehlern verwendet wird. Wird verwendet, um eine Verbindung zu serverseitiger Software wie fail2ban herzustellen. Auth-Fehler werden auch in den Hauptprotokollen protokolliert.
-
system.auto_channel_create
Fügt die notwendigen Formularelemente hinzu, um den ersten Kanal auf der Kontoregistrierungsseite zu erstellen, und erstellt ihn (möglicherweise nach einer E-Mail-Validierung oder der Genehmigung des Administrators). Dies schließt die Möglichkeit aus, einen Channel von einer anderen Website als ersten auf dieser Website für ein neues Konto erstellten Channel zu importieren. Verwendung mit system.default_permissions_role zur Rationalisierung der Registrierung.
-
system.auto_follow
Der erste Channel eines Accounts folgt automatisch den hier aufgelisteten Channels - kommagetrennte Liste von Webbies (member@hub Adressen).
-
system.blacklisted_sites
Ein Array spezifischer Hubs, die von diesem Hub komplett blockiert werden sollen.
-
system.block_public_search
Ähnlich wie block_public, mit dem Unterschied, dass nur der öffentliche Zugang zu den Suchfunktionen blockiert wird. Nützlich für Seiten, die öffentlich sein wollen, aber von Suchmaschinen überrannt werden.
-
system.cron_hour
Geben Sie eine Stunde an, in der cron_daily ausgeführt werden soll. Standardmäßig, ohne Konfiguration, wird dies um Mitternacht UTC ausgeführt.
-
system.default_permissions_role
Wenn dieser Wert auf einen gültigen Namen für eine Berechtigungsrolle gesetzt ist, wird diese Rolle für den ersten Channel verwendet, der von einem neuen Konto erstellt wird, und es wird nicht nach dem „Channel-Typ“ im Formular zur Channel-Erstellung gefragt. Beispiele für gültige Namen sind: 'social', 'social_restricted', 'social_private', 'forum', 'forum_restricted' und 'forum_private'. Lesen Sie hier mehr über Berechtigungsrollen.
-
system.default_profile_photo
Legt das Profilfoto fest, mit dem neue Channels beginnen. Dies sollte den Namen eines Verzeichnisses enthalten, das sich unter images/default_profile_photos/ befindet, oder es sollte nicht gesetzt werden. Wenn es nicht gesetzt ist, wird 'rainbow_man' angenommen.
-
system.directorytags
Legt die Anzahl der Schlüsselwort-Tags fest, die auf der Verzeichnisseite angezeigt werden. Die Voreinstellung ist 50, wenn sie nicht auf eine positive ganze Zahl gesetzt wird.
-
system.disable_directory_keywords
Wenn '1', werden keine Verzeichnisschlüsselwörter angezeigt. Wenn der Hub ein Verzeichnisserver ist, verhindern Sie die Rückgabe von Schlüsselwörtern an alle Verzeichnis-Clients. Bitte setzen Sie dies nicht für Verzeichnisserver im Bereich RED_GLOBAL.
-
system.disable_discover_tab
Hiermit können Sie die Fähigkeit, öffentliche Inhalte von externen Sites zu entdecken, vollständig deaktivieren.
-
system.disable_dreport
Wenn '1', werden keine Zustellungsberichte gespeichert oder verlinkt.
-
system.dlogfile
Logdatei, die für die Protokollierung von Entwicklungsfehlern verwendet wird. Genau dasselbe wie logger sonst. Dies ist keine Magie und erfordert Ihre eigenen Logging-Anweisungen. Entwickler-Tool.
-
system.email_notify_icon_url
URL des Bildes (32x32), das in E-Mail-Benachrichtigungen (HTML-Bodies) angezeigt werden soll.
-
system.expire_delivery_reports
Verfallsdatum in Tagen für Zustellungsberichte - Standardwert 10
-
system.expire_limit
Nicht mehr als diese Anzahl von Beiträgen pro Kanal pro Ablauflauf ablaufen lassen, um den Speicher nicht zu erschöpfen. Voreinstellung 5000.
-
system.photo_storage_type
Wenn '1', wird das Dateisystem anstelle der SQL-Datenbank zum Speichern der Thumbnails verwendet. Voreinstellung ist '0'. Eingeführt in 4.2
-
system.hidden_version_siteinfo
Wenn 'true', wird die Softwareversion nicht auf den Seiten von siteinfo angezeigt (system.hide_version verbirgt die Version auch auf diesen Seiten, diese Einstellung verbirgt nur die Version auf den Seiten von siteinfo).
-
system.hide_help
Link zur Hilfedokumentation nicht in der Navigationsleiste anzeigen
-
system.hide_in_statistiken
Weist die roten Statistikserver an, diesen Hub in Hublisten komplett auszublenden.
-
system.hide_version
Wenn true, wird die Softwareversion auf Webseiten und Tools nicht angezeigt. (*) Muss in .htconfig.php eingestellt werden.
-
system.ignore_imagick
Ignoriert imagick und verwendet GD, auch wenn imagick auf dem Server installiert ist. Verhindert einige Probleme mit PNG-Dateien in älteren Versionen von imagick.
-
system.max_daily_registrations
Legt die maximale Anzahl der an einem Tag erlaubten Neuanmeldungen fest. Nützlich, um eine Überzeichnung zu verhindern, wenn das Projekt in der Öffentlichkeit bekannt gemacht wird.
-
system.max_import_size
Falls konfiguriert, die maximale Länge einer importierten Textnachricht. Diese wird normalerweise auf 200 KByte oder mehr belassen, um private Friendica-Fotos, die eingebettet sind, unterzubringen.
-
system.max_tagged_forums
Spam-Schutz. Begrenzt die Anzahl der getaggten Foren, die in jedem Beitrag erkannt werden. Standard ist 2. Nur die ersten 'n' Tags werden als Foren zugestellt, die anderen verursachen keine Zustellung.
-
system.minimum_feedcheck_minutes
Das minimale Intervall zwischen der Abfrage von RSS-Feeds. Wenn dieses Intervall kleiner als das Cron-Intervall ist, werden die Feeds bei jedem Cronjob abgefragt. Der Standardwert ist 60, wenn er nicht festgelegt wurde. Die Site-Einstellung kann auch für jeden einzelnen Kanal durch eine Serviceklassen-Einstellung mit dem treffenden Namen „minimum_feedcheck_minutes“ außer Kraft gesetzt werden.
-
system.no_age_restriction
Beschränken Sie die Registrierung nicht auf Personen über 13 Jahren. In vielen Ländern ist es gesetzlich vorgeschrieben, dass das Alter angegeben werden muss und dass alle persönlichen Daten von Minderjährigen gesperrt werden müssen.
-
system.object_cache_days
Legt fest, wie lange zwischengespeicherte eingebettete Inhalte ohne erneutes Abrufen verwendet werden können. Die Voreinstellung ist 30 Tage.
-
system.openssl_conf_file
Geben Sie eine Datei an, die die OpenSSL-Konfiguration enthält. Wird in einigen Windows-Installationen benötigt, um die openssl-Konfigurationsdatei auf dem System zu finden. Lesen Sie zuerst den Code. Wenn Sie den Code nicht lesen können, spielen Sie nicht mit ihm.
-
system.openssl_encrypt
Verschlüsselungs-Engine von openssl verwenden, Standard ist false (verwendet mcrypt für AES-Verschlüsselung)
-
system.optimize_items
Führt optimise_table während einiger Aufgaben aus, um Ihre Datenbank sauber und defragmentiert zu halten. Dies geht zu Lasten der Leistung, während die Operationen laufen, sorgt aber auch dafür, dass die Dinge etwas schneller laufen, wenn sie nicht laufen. Es gibt auch CLI-Hilfsprogramme zur Durchführung dieser Operation, die Sie vielleicht bevorzugen, besonders wenn Sie eine große Site haben.
-
system.override_poll_lockfile
Ignoriert die Sperrdatei im Poller-Prozess, damit mehr als ein Prozess gleichzeitig laufen kann.
-
system.paranoia
Wie pconfig, aber auf einer site-weiten Basis. Kann durch Mitgliedereinstellungen überschrieben werden.
-
system.pin_types
Array der zulässigen Elementtypen für die Anheftung. Die Standardwerte hängen vom Modul ab, können aber hier geändert werden.
-
system.photo_cache_time
Wie lange die Fotos zwischengespeichert werden sollen, in Sekunden. Standardwert ist 86400 (1 Tag). Eine längere Zeit erhöht die Leistung, bedeutet aber auch, dass es länger dauert, bis geänderte Berechtigungen gelten.
-
system.plattform_name
Was als Plattformname auf Webseiten und in Statistiken angezeigt werden soll. (*) Muss in .htconfig.php eingestellt werden.
-
system.rating_enabled
Verteilte Reputationsberichte und Datenerfassung. Diese Funktion wird derzeit überarbeitet.
-
system.poke_basic
Reduziert die Anzahl der poke-Verben auf genau 1 („poke“). Deaktivieren Sie andere Verben.
-
system.proc_run_use_exec
Wenn 1, wird der Systemaufruf exec in proc_run verwendet, um Hintergrundaufgaben auszuführen. Standardmäßig verwenden wir proc_open und proc_close. Auf einigen (derzeit seltenen) Systemen funktioniert dies nicht gut.
-
system.projecthome
Zeigt die Projektseite auf Ihrer Homepage für abgemeldete Betrachter an.
-
system.projekthome
Legt die Projekthomepage als Startseite des Hubs fest. (Veraltet)
-
system.pubstream_bestellung
Legt die Pubstream-Reihenfolge fest. Mögliche Werte 'commented' (Standard), 'created' und 'edited'.
-
system.register_link
Pfad, auf den der „register“-Link im Anmeldeformular verweisen soll. Bei geschlossenen Sites wird dies auf 'pubsites' verweisen. Bei offenen Sites wird er normalerweise auf 'register' umgeleitet, aber Sie können dies auf eine benutzerdefinierte Site-Seite ändern, die Abonnements oder ähnliches anbietet.
-
system.reserved_channels
Erlaube den Mitgliedern nicht, Kanäle mit dieser durch Kommata getrennten Liste von Namen (keine Leerzeichen) zu registrieren.
-
system.sellpage
Eine URL, die in der Liste der öffentlichen Sites angezeigt wird, um Ihren Hub zu verkaufen - Serviceklassen anzeigen, usw.
-
system.startpage
Legt die Standardseite fest, die nach einer Anmeldung für alle Channels auf dieser Website angezeigt wird. Kann durch Benutzereinstellungen überschrieben werden.
-
system.sys_expire_days
Wie viele Tage sollen entdeckte öffentliche Inhalte von anderen Websites aufbewahrt werden?
-
system.taganyone
Erlaubt das @mention-Tagging von jedem, egal ob Sie verbunden sind oder nicht.
-
system.tempdir
Ort, an dem temporäre Dateien gespeichert werden (derzeit unbenutzt), Standard ist in der PHP-Konfiguration definiert.
-
system.tos_url
Setzt einen alternativen Link für den ToS-Speicherort.
-
system.transport_security_header
wenn ungleich Null und SSL verwendet wird, wird ein strict-transport-security-Header auf den Webseiten eingefügt
-
system.uploaddir
Speicherort für das Hochladen von Dateien (Standard ist system.tempdir, derzeit nur vom js_upload-Plugin verwendet)
-
system.workflow_channel_next
Die Seite, zu der neue Mitglieder unmittelbar nach der Erstellung eines Channels weitergeleitet werden sollen.
-
system.arbeitsablauf_register_next
Die Seite, auf die Mitglieder direkt nach dem Erstellen eines Kontos geleitet werden (nur wenn auto_channel_create oder UNO aktiviert ist).
Verzeichnis-Konfiguration
Standardwerte für die Verzeichnissuche
-
directory.globaldir
0 oder 1. Standardwert 0. Wenn Sie das Verzeichnis auf einer Site besuchen, sehen Sie standardmäßig nur die Mitglieder dieser Site. Man muss einen zusätzlichen Schritt machen, um die Leute im Rest des Netzwerks zu sehen; und indem man das tut, gibt es eine klare Abgrenzung, dass diese Leute nicht Mitglieder dieser Site sind, sondern eines größeren Netzwerks.
-
directory.pubforums
0 oder 1. Öffentliche Foren sollten standardmäßig 0 sein.
-
directory.safemode
0 oder 1.
Konfiguration des Verzeichnisservers
- system.directory_mode
- system.directory_primary
- system.directory_realm
- system.verzeichnis_server
- system.realm_token
Datei-Synchronisation und Klonen
Das Klonen von Dateien über mehrere Instanzen eines Channels hinweg ist aufgrund der Natur der PHP-Speicherzuweisung ein sehr schwieriges Problem. Dies muss völlig anders gehandhabt werden als das Klonen oder Synchronisieren anderer Informationen. (Die Verarbeitung einer großen Videodatei oder von 40-50 Fotos kann den Speicher voll auslasten). Daher können wir nicht einfach alle Daten in eine Speicherauszugsdatei auslagern und sie dann sequentiell verarbeiten. Das Laden der Speicherauszugsdatei selbst wird wahrscheinlich den Speicherplatz erschöpfen.
Außerdem gibt es zwei Hauptoperationen, die wir in Betracht ziehen. Die erste ist die schwierigste - das Speichern und anschließende Importieren aller Kanalinformationen in einen neuen Kanal-Klon. Der zweite ist die Synchronisierung von Datei-Änderungen, die in zwei oder mehr „aktiven“ Klonen auftreten. Beim ersten Versuch mit diesem Tool werden wir uns auf den zweiten Fall konzentrieren, während wir versuchen, ein gewisses Maß an Kompatibilität mit dem ersten Fall aufrechtzuerhalten, damit wir dieselben Tools wiederverwenden können.
Metadaten
Zunächst benötigen wir die Metadaten der Datei, um ihre Struktur auf einer anderen Website genau rekonstruieren zu können. Dazu sind die folgenden Informationen erforderlich: die „attach“-Struktur (ohne Dateiinhalt - das ist die Standardeinstellung) für die Datei selbst und ihre übergeordneten Verzeichnisse, damit wir ihren genauen Platz im Dateisystem wiederherstellen können, da wir nicht wissen, ob das übergeordnete Verzeichnis schon einmal importiert worden ist oder nicht. Foto"-Struktur für alle Fotoelemente, die durch das Hochladen dieser Datei in das System erstellt wurden. Diese enthält in der Regel mehrere verschiedene „Skalen“ oder Miniaturbilder, von denen einige für die Verwendung als Profilfoto oder Titelbild beschnitten werden können. Wir müssen die Informationen über den Bildausschnitt aufbewahren, die nicht in den Metadaten, sondern nur in den gespeicherten Daten enthalten sind. Die eigentlichen Miniaturbilddaten können in den Metadaten enthalten sein, müssen es aber nicht. Ein großformatiges Titelbild (Maßstab #7) könnte möglicherweise zu Speicherproblemen führen. Es ist zwar nicht so schlimm wie ein 100-Meter-Video, aber wenn Sie mehrere davon haben, können sie sich summieren.
Objekteinträge, die mit dieser Datei verknüpft sind. Dabei kann es sich um Dateifreigabeaktivitäten, das „übergeordnete Element“, das mit Fotos verknüpft ist, und angehängte Konversationselemente (Foto-Likes, Kommentare usw.) handeln.
Für alle diese Elemente muss die URL ersetzt und das Element neu signiert werden, wenn es auf eine andere Website verschoben wird.
Dateidaten
Dann haben wir die eigentlichen Dateidaten, die wir für die Rekonstruktion der Datei benötigen. Diese müssen getrennt von den Metadaten gespeichert werden, damit der Speicher bei der Verarbeitung nicht überlastet wird. Die eigentlichen Dateidaten können zur Rekonstruktion der Anhangsstruktur und der ersten vier Fotoskalen verwendet werden. Wenn es sich um ein Foto handelt, benötigen wir Zugriff auf die Skala „#4“ (Profilfoto) und die Skala #7 (Titelbild), so wie sie ursprünglich beschnitten wurden. Alle anderen Miniaturansichten können aus diesen generiert werden.
Dateiabgleich
Wir werden diesen Vorgang zuerst betrachten, weil er wahrscheinlich am einfachsten zu implementieren ist. Wenn ein Foto zum Quellsystem hinzugefügt, entfernt oder geändert wird, senden wir ein Klon-Synchronisierungspaket an alle bekannten Klone, das die Metadaten, aber keine Dateidaten enthält. Wir können nur ein Sync-Paket pro zu synchronisierendem Dateivorgang senden.
Die empfangende Seite erstellt alle Metadatenstrukturen, führt eine URL-Übersetzung durch und speichert sie. Dann muss es die eigentlichen Daten abrufen. Unter der Voraussetzung, dass CURL Streaming unterstützt, wird eine authentifizierte Anfrage an die ursprüngliche Website gesendet und die Originaldatei wird angefordert und direkt auf die Festplatte gestreamt (unter Umgehung aller Verarbeitungsschritte). Wenn Fotomaßstab Nr. 4 oder Maßstab Nr. 7 erforderlich ist, werden diese angefordert und in den entsprechenden Strukturen gespeichert. Wir gehen in diesem Fall davon aus, dass der große Maßstab des Titelbildes den Speicher nicht erschöpft. Wenn CURL das Streaming nicht unterstützen kann, müssen die Anforderungspakete in eine Warteschlange gestellt und an den Ursprungsort gesendet werden, um „Chunks“ der Datei zu erhalten, und wieder zusammengesetzt werden, sobald alle Chunks abgerufen wurden.
Die authentifizierte Anfrage hängt vom jeweiligen Mechanismus ab. Beim CURL-Streaming muss wahrscheinlich ein signiertes Geheimnis mit einem Zeitstempel erzeugt und an die Ursprungsseite der Datei gesendet werden. Dann können die Daten mit minimaler interner Verarbeitung abgerufen und unter Verwendung von stdio-Pufferung direkt auf die Festplatte ausgegeben werden. Im Falle einer zot-Anforderung wird das zot-Anforderungspaket validiert, aber die Planung von Chunk-Batches und deren Wiederzusammensetzung könnte sich als schwierig erweisen.
Sicherung/Wiederherstellung von Dateien
Dies ist viel komplizierter, da wir keinen authentifizierten Webserver haben, von dem wir Daten anfordern können. Die Metadaten können größtenteils identisch sein, aber wir brauchen eine Form der Signalisierung, dass wir die Datei nicht über das Web abrufen werden. Dies erfordert wahrscheinlich einen clientseitigen Prozess, um jede Metadaten-Datei zu analysieren und eine Datei auf der Festplatte zu finden, mit der sie verknüpft ist. Anschließend müssten die Daten mit einem speziellen Endpunkt, der für diese Aufgabe vorgesehen ist, an den Zielserver gestreamt werden. Eine Java-Applikation könnte hier die beste Option sein, um die Plattformneutralität zu wahren.
Eine andere Möglichkeit wäre die Verwendung von WebDAV für diesen Schritt. Die Metadaten würden zuerst hochgeladen, dann die Datendateien. Wenn eine Datendatei mit einer vorhandenen Metadaten-Datei übereinstimmt, würden die Metadaten verarbeitet, die Datei entsprechend gespeichert und die Metadaten-Datei anschließend entfernt. In diesem Fall müssten in den Metadaten Fotos der Skalen 4 und 7 bereitgestellt werden.
Optional könnte dieser Schritt auch mit einem lokalen Dateisystem auf dem Zielserver durchgeführt werden. Dies wäre die leistungsfähigste Lösung, und eine Reihe von Shell-basierten Tools (im Falle von Linux) könnte die „Client-Seite“ der Aufgabe übernehmen.
Die Komplexität dieser Aufgabe erfordert eine sorgfältige Planung, wie die Daten organisiert und gespeichert und gegebenenfalls per Fernzugriff gesichert oder von der Quellwebsite zur Sicherung übertragen werden.
Rückwärtskompatibilität
Es gibt einige offensichtliche Probleme bei der Bereitstellung von Daten für die Sicherung oder das Klonen, die auf dem System vor der Existenz von Wiederherstellungs-/Synchronisierungstools vorhanden waren. Um die Werkzeuge selbst relativ unkompliziert zu halten (soweit dies angesichts der Beschränkungen möglich ist), muss die Abwärtskompatibilität möglicherweise durch ein spezielles Plugin oder Addon hergestellt werden.
Zot - Ein Überblick auf oberer Ebene
Hier ist eine allgemeine Beschreibung der Funktionsweise von zot.
In diesem Beispiel wird „Indigo“ eine öffentliche Nachricht von seiner Website „podunk.edu“ aus versenden. „Nickordo„ ist ein Empfänger auf einer anderen Website (“example.com").
Indigo stellt seine Nachricht zuerst auf podunk.edu ein. podunk.edu schaut nach, wer die Nachricht erhalten soll und findet Nickordo. Nickordo postet normalerweise von example.com aus, also fügen wir dieses Ziel zu unserer Liste der Empfänger hinzu. Wir können auch andere Ziele für Nickordo und alle anderen, die Indigos Beiträge verfolgen, hinzufügen.
In diesem Beispiel stellen wir fest, dass wir nur einen bekannten Empfänger an einem bekannten Ort haben.
Wir senden ein Paket an example.com:
{
"type":"notify",
"sender":{
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q",
"url":"http:\/\/podunk.edu",
"url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY"
},
"callback":"\/post",
"version":1,
"secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467"
}
In diesem Paket steht das Folgende:
Ich bin Indigo und hier ist der Beweis. Ich poste von podunk.edu und hier ist der Beweis. Ich habe ein Paket für Sie. Die Kontrollnummer lautet „1eaa6613....“.
Example.com nimmt dieses Paket an und sagt: „Moment mal - ich kenne Sie nicht. Ich möchte beweisen, wer du bist.“ Example.com stellt also eine Verbindung zu podunk.edu über eine „bekannte URL“ her, die wir für diesen Zweck verwenden, und sucht nach der oben genannten „guid“. Es sollte eine Reihe von Informationen zurückgeben, darunter auch einen öffentlichen Schlüssel. Example.com verwendet diesen Schlüssel, um die Signaturen in der Nachricht zu überprüfen und festzustellen, ob es tatsächlich eine Person namens Indigo bei podunk.edu gibt. Wir müssen dies nur einmal tun. (Beachten Sie, dass Indigo von jedem Ort aus posten kann. Wir müssen nur beweisen, dass es sich um Indigo handelt und dass Indigo beweisen kann, dass er von einem anderen Standort aus postet).
Dann trennt example.com die Verbindung und weist darauf hin, dass eine Nachricht auf podunk.edu wartet. Entweder sofort oder immer dann, wenn der Drang besteht (je nachdem, wie wichtig Indigo für jemanden auf dieser Website ist), „ruft“ example.com podunk.edu an. Die Nachricht lautet in etwa so:
{
"type":"pickup",
"url":"http:\/\/example.com",
"callback_sig":"teE1_fLIqfyeCuZY4iS7sNU8jUlUuqYOYBiHLarkC99I9K-uSr8DAwVW8ZPZRK-uYdxRMuKFb6cumF_Gt9XjecCPBM8HkoXHOi_VselzJkxPwor4ZPtWYWWaFtRfcAm794LrWjdz62zdESTQd2JJIZWbrli1sUhK801BF3n0Ye6-X1MWhy9EUTVlNimOeRipcuD_srMhUcAXOEbLlrugZ8ovy2YBe6YOXkS8jj0RSFjsOduXAoVhQmNpcobSYsDvaQS3e3MvE6-oXE602zGQhuNLr7DIMt9PCdAeQo-ZM-DHlZGCkGk4O2oQFCXFzGPqLUMWDACGJfTfIWGoh_EJqT_SD5b_Yi_Wk9S1lj7vb-lmxe5JuIf7ezWzHoBT8vswnZxPYlidH2i9wapdzij9il_qqcCWWHIp7q_XkY_Zj52Z4r4gdmiqM-8y1c_1SDX7hrJFRwqL_PKFbEvyi5nMWTEzqp55Tay5Woiv19STK_H_8ufFfD9AOkYnk6rIOMsk9dn3a5tAFpDRyRndXkBWAXwiJjiND2zjue7BFu7Ty40THXcfYRh1a5XrAXcaGeYuagg-8J9tAufu9_LY3qGazFg8kRBVMOn4M8DRKSIhKj7z4MnbYL0s09gREojy4jqWO3VkaOjP2jUGzoPuUDLasudE1ehWFq0K_MTQNavgmp8",
"callback":"http:\/\/example.com\/post",
"secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467",
"secret_sig":"O7nB4_UJHBXi28Suwl9LBZF9hI_9KGVTgehnUlWF1oYMNRnBbVHB9lzUfAoalvp3STbU3xJbtD_S58tv6MfV7J5j2V_S1W5ex3dulmDGB8Pt_7Fe5mbEPmjQFcfv3Eg5dUjYIuDl0TDScfrHyImj7RZIWHbwd7wWVoMzzDa_o33klpYmKZCBvObCh55bRrlFkXZs_dRuOiPwkfX0C6_XES4OyOIYl45V30rdhmf-STrf4L9dKYy_axQ12RIwRcKychvVLwlUJn3bn9lgNXRRU_HTne-09OPcJbUOdcD3DkFoKOxMULBNKPHzsCau0ICYug7S0EP6LpCom_mW78s08LyVA1vYeFZjevBCiGecj57yIAQDYi6_rpWJfihYaWHRN0oqtScUR4Bdf0bQbEHxMs4zAtrOAxfyJCbi6U1pfnGgzXzB9ulOYGnVGNTF7Ey4K7FOZIBtk0ILY2JfvBUaVvVs8ttagOOHmhWhnbCvrnOFlkNdlce7zoJCSUJENUOCYmTRfwB_Jno5fAzRnrsYU3_Z-l1mzniU_OmUPz8mPEh7PwhkqAiVlyaM-q15gn7l2lAIDk9kp2X_iCme7v4V0ADN_DbpaI_0-6mPw5HLbKrCsA-sxlSMB4DO4lDCHYkauj0l25sbfroRWB_hax1O4Q0oWyOlVJLUqEC5nuUJCCE"
}
Was diese Nachricht aussagt, ist: Hier ist example.com, ich habe einen Beweis, und ich bin hier, um ein Paket abzuholen. Hier ist die Sendungsverfolgungsnummer, und hier ist der Beweis, dass dies die Sendungsverfolgungsnummer ist, die Sie vermutlich an example.com gesendet haben.
Gut genug. Podunk.edu überprüft die Geschichte und tatsächlich, es ist example.com, und ja, da wartet ein Paket mit dieser Kontrollnummer. Hier ist das Paket...
{
"success":1,
"pickup":{
"notify":{
"type":"notify",
"sender":{
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q",
"url":"http:\/\/z.podunk.edu",
"url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY"
},
"callback":"\/post",
"version":1,
"secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467"
},
"message":{
"message_id":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu",
"message_top":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu",
"message_parent":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu",
"created":"2012-11-20 04:04:16",
"edited":"2012-11-20 04:04:16",
"title":"",
"body":"Hi Nickordo",
"app":"",
"verb":"post",
"object_type":"",
"target_type":"",
"permalink":"",
"location":"",
"longlat":"",
"owner":{
"name":"Indigo",
"address":"indigo@podunk.edu",
"url":"http:\/\/podunk.edu",
"photo":{
"mimetype":"image\/jpeg",
"src":"http:\/\/podunk.edu\/photo\/profile\/m\/5"
},
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q"
},
"author":{
"name":"Indigo",
"address":"indigo@podunk.edu",
"url":"http:\/\/podunk.edu",
"photo":{
"mimetype":"image\/jpeg",
"src":"http:\/\/podunk.edu\/photo\/profile\/m\/5"
},
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q"
}
}
}
}
Und das ist das Paket (die ursprüngliche Nachricht). Example.com wandelt diese in eine Form um, die von Nickordo eingesehen werden kann, und benachrichtigt Nickordo, dass es eine neue Nachricht gibt. Podunk.edu könnte feststellen, dass noch andere Pakete auf example.com warten. Wenn dies der Fall ist, kann es auch alle anderen wartenden Pakete zu diesem Zeitpunkt versenden. Jedes dieser Pakete ist mit der ursprünglichen Sendungsnummer versehen.
Hubzilla FAQ
Gibt es eine Möglichkeit, das Admin-Konto zu ändern?
Gibt es eine Möglichkeit, mehrere Administratoren zu haben?
Ja, aber im Moment ist es noch etwas umständlich, da es noch nicht in der Benutzeroberfläche sichtbar ist. Um ein Konto zu einem administrativen Konto zu machen, muss man 4096 zum account_roles-Eintrag in der Kontotabelle der Datenbank hinzufügen. Um administrative Berechtigungen zu entfernen, muss man 4096 von den Kontorollen abziehen.
Ich kann mich einloggen, aber es gibt keine Beiträge oder Webseiten
Höchstwahrscheinlich ist Ihre Artikeltabelle abgestürzt. Führen Sie den MySQL-Befehl
repair table item;
Das Einloggen funktioniert nicht, sofort nach dem Einloggen wird die Seite neu geladen und ich werde ausgeloggt
Höchstwahrscheinlich ist Ihre Sitzungstabelle abgestürzt. Führen Sie den MySQL-Befehl
repair table session;
aus.
Wenn ich das Thema wechsle, werden manchmal Elemente des einen Themas über das andere gelegt
a) store/[data]/smarty3 ist für den Webserver nicht beschreibbar. Machen Sie es möglich. b) Sie verwenden Midori, oder bei bestimmten Themes Konqueror im KHTML-Modus.
Mein Netzwerk-Tab wird nicht geladen, es scheint durch ein Foto oder Video verursacht zu werden
Ihr PHP-Speicherlimit ist zu niedrig. Erhöhen Sie die Größe der memory_limit-Anweisung in Ihrer php.ini Entgegen der landläufigen Meinung hat die Anzahl der Nutzer eines Hubs keinen Einfluss auf das benötigte Speicherlimit, vielmehr zählt der Inhalt einer individuellen Matrix. Streams mit vielen Fotos und Videos benötigen mehr Speicher als Streams mit viel Text.
Ich habe keine Kommunikation mit jemandem
Sie lauschen auf Port 443, haben aber kein gültiges SSL-Zertifikat. Dies gilt auch, wenn Ihre Basisurl http lautet. Lauschen Sie nicht auf Port 443, wenn Sie ihn nicht verwenden können. Es wird dringend empfohlen, dieses Problem durch die Installation eines gültigen SSL-Zertifikats für den Browser zu lösen, anstatt Port 443 zu deaktivieren.
Wie kann ich eine Nicht-Git-Installation aktualisieren?
- Sichern Sie .htconfig.php
- Sichern Sie alles in store/
- Sichern Sie alle benutzerdefinierten Änderungen in mod/site/ und view/site
- Löschen Sie Ihre bestehende Installation
- Laden Sie die neue Version hoch.
- Laden Sie die neue Version der Themes und Addons hoch.
- Stellen Sie alles wieder her, was Sie zuvor gesichert haben.
Was muss ich tun, wenn ich meinen Hub auf einen anderen Server verschiebe?
- Erstellen Sie einen Git-Klon auf dem neuen Server. Wiederholen Sie den Vorgang für alle benutzerdefinierten Themes und Addons.
- Rsync .htconfig.php
- Rsync alles in store/
- Rsync alles in mod/site/ und view/site (diese sind nur vorhanden, wenn Sie eigene Module haben)
- Dump und Wiederherstellung der DB.
Wie installiere ich einen bestehenden Hub auf demselben Server neu?
git reset --hard HEAD
setzt alle Dateien auf ihre Upstream-Standardwerte zurück. Dabei werden keine lokalen Dateien zurückgesetzt, die nicht auch im Upstream existieren. Wenn Sie z.B. lokale Änderungen an mod/channel.php vorgenommen haben, werden diese zurückgesetzt - nicht aber die Änderungen in mod/site/channel.php.
- Wenn Sie unbedingt eine Neuinstallation durchführen müssen - z.B. wenn Sie das Betriebssystem aktualisieren müssen - befolgen Sie die Schritte für den Umzug auf einen anderen Server, aber anstatt rsync zu verwenden, erstellen Sie ein Backup und stellen Sie es auf andere Weise wieder her.
Installieren Sie einen Hub nicht mit einer neuen Datenbank und einer neuen .htconfig.php neu, es sei denn, dies ist der allerletzte Ausweg. Das Anlegen eines temporären Accounts und das Anfordern von Hilfe über einen Support-Kanal für nicht-triviale Neuinstallationen ist einer Neuinstallation vorzuziehen.
Wie kann ich die Standard-Homepage für abgemeldete Besucher festlegen?
Verwenden Sie das Addon custom_home, das im Hauptrepository für Addons verfügbar ist.
Was bedeuten die verschiedenen Einstellungen für den Verzeichnismodus?
// Konfigurieren Sie, wie wir mit Verzeichnisservern kommunizieren.
// DIRECTORY_MODE_NORMAL = Verzeichnis-Client, wir finden ein Verzeichnis (alle Abfragen Ihrer Mitglieder werden an andere Stellen geleitet)
// DIRECTORY_MODE_SECONDARY = Zwischenspeicherverzeichnis oder Mirror (hält sich synchron mit dem primären Realm [fügt erhebliche Cron-Ausführungszeit hinzu])
// DIRECTORY_MODE_PRIMARY = Hauptverzeichnisserver (dies ist nur sinnvoll, wenn Sie einen eigenen Realm betreiben. einer pro Realm)
// DIRECTORY_MODE_STANDALONE = „Off the grid“ oder private Verzeichnisdienste (nur lokale Site-Mitglieder im Verzeichnis)
- Die Voreinstellung ist NORMAL. Damit werden die meisten Verzeichnisdienste auf einen anderen Server verlagert. Der verwendete Server ist der config:system/directory_server. Diese Einstellung KANN durch den Code auf einen der Projektsekundärserver aktualisiert werden, wenn der aktuelle Server nicht erreichbar ist. Sie sollten entweder die Kontrolle über diesen anderen Server haben oder ihm vertrauen, dass er diese Einstellung verwendet.
- SEKUNDÄR. Dies ermöglicht es Ihrer lokalen Site, als Verzeichnisserver zu fungieren, ohne die Abfragen Ihrer Mitglieder einem anderen Server zu überlassen. Es erfordert zusätzliche Verarbeitungszeit während der Cron-Abfrage und wird nicht empfohlen, auf einem gemeinsam genutzten Webhost ausgeführt zu werden.
- PRIMÄR. Dies ermöglicht es Ihnen, ein komplett separates 'Netzwerk' von Verzeichnisservern mit einem eigenen Realm zu betreiben. Standardmäßig befinden sich alle Server im Realm RED_GLOBAL, es sei denn, die Einstellung config:system/directory_realm wird überschrieben. Verwenden Sie dies nicht, wenn Sie keinen eigenen directory_realm haben.
- STANDALONE. Dies ist wie primary, außer dass es sich um ein eigenständiges „Netzwerk“ handelt, das mit keinem anderen Server kommuniziert. Verwenden Sie dies, wenn Sie nur einen Server haben und von den Red#Matrix-Verzeichnislisten getrennt sein wollen.
Entwicklerhandbuch
Informationen für Hubzilla-Entwickler
Wer ist ein Hubzilla-Entwickler? Sollte ich das lesen?
Jeder, der dazu beiträgt, Hubzilla besser zu machen, ist ein Entwickler. Es gibt viele verschiedene und wichtige Möglichkeiten, wie Sie zu dieser erstaunlichen Technologie beitragen können, auch wenn Sie nicht wissen, wie man Code schreibt. Die Software selbst ist nur ein Teil des Hubzilla-Projekts. Sie können beitragen durch
- den Text in Ihre Sprache übersetzen, damit Menschen auf der ganzen Welt die Möglichkeit haben, Hubzilla zu nutzen
- für Hubzilla werben und das Bewusstsein für die Plattform durch Blogbeiträge, Artikel und Mundpropaganda verbreiten
- Erstellung von Kunstwerken und Grafiken für Projektressourcen wie Icons und Marketingmaterial
- Unterstützung der Projektinfrastruktur wie der Projektwebsite und der Demoserver
Softwareentwickler sind natürlich willkommen; es gibt so viele großartige Ideen, die umgesetzt werden können, und nicht genug Leute, um sie alle zu verwirklichen! Die Hubzilla-Codebasis ist ein fortschrittliches und ausgereiftes System, aber die Plattform ist immer noch sehr flexibel und offen für neue Ideen.
Wir sind ziemlich entspannt, wenn es um Entwickler geht. Bei uns gibt es nicht viele Regeln. Einige von uns sind überlastet, und wenn Sie helfen wollen, lassen wir Sie gerne helfen. Wenn Sie sich jedoch an ein paar Richtlinien halten, wird der Prozess reibungsloser und die Zusammenarbeit einfacher. Von allen Entwicklern wird erwartet, dass sie sich an unseren Verhaltenskodex halten. Wir haben Entwickler aus der ganzen Welt mit unterschiedlichen Fähigkeiten, unterschiedlichen kulturellen Hintergründen und unterschiedlich viel Geduld. Unsere oberste Regel ist es, andere zu respektieren. Manchmal ist das schwierig, und manchmal haben wir sehr unterschiedliche Ansichten darüber, wie die Dinge funktionieren sollten, aber wenn sich jeder bemüht, werden wir gut miteinander auskommen.
Dieses Dokument wird Ihnen dabei helfen, Hubzilla kennenzulernen und mitzugestalten.
Sie möchten Code beisteuern?
...und wissen nicht, wie Sie anfangen sollen...
- Hubzilla debuggen (php auf dem Webserver),
- Code für das Projekt beisteuern,
- optional - das alles von einer virtuellen Maschine aus zu tun
Diese Anleitung wurde für Debian (Wheezy) als virtuelle Maschine auf Lubuntu (Ubuntu 14.0) als Host getestet.
Installation einer virtuellen Maschine (KVM)
Hier die Installationsanleitung für Linux Debian. Die Zusammenfassung:
- KVM installieren
# apt-get install qemu-kvm libvirt-bin
- füge dich der Gruppe libvirt hinzu
# adduser <deinBenutzer> libvirt
- Installieren Sie die Benutzeroberfläche zur Verwaltung der virtuellen Maschinen
# apt-get install virt-manager
- Laden Sie ein Betriebssystem herunter, das in der virtuellen Maschine laufen soll (mini.iso)
- Starten Sie den Virt-Manager
- Erstellen Sie eine neue virtuelle Maschine (klicken Sie auf das Symbol)
- Wählen Sie Ihr Iso-Image (soeben heruntergeladen) als Installationsquelle
- optional: konfigurieren Sie die neue vm: ram, cpu's,...
- Virtuelle Maschine starten > Ergebnis: Linux Debian startet in einem neuen Fenster.
- (optional) Vermeiden Sie Netzwerkfehler nach dem Neustart des Host-Betriebssystems
# virsh net-start default
# virsh net-autostart standard
Apache-Webserver installieren
Öffnen Sie ein Terminal und machen Sie sich zum root
su -l
Erstellen Sie die Standardgruppe für den Apache-Webserver
groupadd www-data
könnte bereits existieren
usermod -a -G www-data www-data
Prüfen Sie, ob das System wirklich auf dem neuesten Stand ist
apt-get update
apt-get upgrade
Optionaler Neustart der Dienste nach der Installation
reboot
Wenn Sie neu gestartet haben, machen Sie sich zum root
su -l
Installieren Sie Apache:
apt-get install apache2 apache2-doc apache2-utils
Öffnen Sie den Webbrowser auf dem PC und überprüfen Sie localhost Sollte Ihnen eine Seite wie „It works“ anzeigen (Quelle http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#)
PHP, MySQL und phpMyAdmin installieren
PHP, MySQL
su -l
apt-get install libapache2-mod-php8.2 php8.2 php-pear php8.2-xcache php8.2-curl php8.2-mcrypt php8.2-xdebug
apt-get install php8.2-mysql
apt-get install mysql-server mysql-client
das mysql-Passwort eingeben und notieren Optional, da es bereits während der phpmyadmin-Einrichtung aktiviert wurde
phpenmod mcrypt
phpMyAdmin
phpMyAdmin installieren
apt-get install phpmyadmin
Konfigurieren von phpmyadmin
- Wählen Sie apache2 aus (Tipp: benutzen Sie die Tabulator-Taste zum Auswählen)
- Datenbank für phpmyadmin mit dbconfig-common? konfigurieren: Wählen Sie Ja
(Quelle #^http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#)
Aktivieren Sie Rewrite
Bei der Standardinstallation von Apache2 ist mod_rewrite bereits installiert. Um zu prüfen, ob dies der Fall ist, überprüfen Sie die Existenz von /etc/apache2/mods-available/rewrite.load
nano /etc/apache2/mods-available/rewrite.load
(Sie sollten den Inhalt finden: LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so) Um mod_rewrite zu aktivieren und zu laden, führen Sie die restlichen Schritte aus. Erstellen Sie einen symbolischen Link in /etc/apache2/mods-enabled
cd /var/www
a2enmod rewrite
Öffnen Sie dann die folgende Datei und ersetzen Sie jedes Vorkommen von „AllowOverride None“ durch „AllowOverride all“.
nano /etc/apache2/apache2.conf
oder
gedit /etc/apache2/sites-enabled/000-default
Starten Sie schließlich Apache2 neu.
service apache2 restart
Testen Sie die Installation
cd /var/www
Erstellen Sie eine php-Datei, um die php-Installation zu testen
nano phpinfo.php
In die Datei einfügen:
<?php
phpinfo();
?>
(STRG+0, ENTER, STRG+X speichern) Webbrowser auf dem PC öffnen und http://localhost/phpinfo.php ausprobieren (Seite zeigt Infos zu php) phpMyAdmin mit der MySQL-Datenbank verbinden
nano /etc/apache2/apache2.conf
- CTRL+V... bis zum Ende der Datei
- Am Ende der Datei einfügen: (CTRL+0, ENTER, CTRL+X speichern)
Einfügen von /etc/phpmyadmin/apache.conf
Apache neu starten
/etc/init.d/apache2 neu starten
apt-get update
apt-get upgrade
reboot
phpMyAdmin
Webbrowser auf dem PC öffnen und http://localhost/phpmyadmin
ausprobieren
(Quelle http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#)
Erstelle eine leere Datenbank... die später von Hubzilla verwendet wird
öffne den Webbrowser auf dem PC und probiere http://localhost/phpmyadmin Erstelle eine leere Datenbank, zum Beispiel mit dem Namen „red“. Erstelle einen Datenbankbenutzer, z.B. „red“. Erteile dem Benutzer „red“ alle Rechte für die Datenbank „red“. Notieren Sie sich die Zugangsdaten (Hostname, Benutzername, Passwort, Datenbankname).
Forken Sie das Projekt auf github
Bitte folgen Sie den Anweisungen in der offiziellen Dokumentation von git. Es ist eine gute Idee, das gesamte Handbuch zu lesen! Git unterscheidet sich in vielerlei Hinsicht von anderen Versionskontrollsystemen. Jetzt sollten Sie
- ein Konto bei github.com erstellen
- fork https://framagit.org/hubzilla/core
- fork https://framagit.org/hubzilla/addons
Wenn Sie GIT nicht von der Kommandozeile aus benutzen wollen - es gibt ein nützliches Eclipse-Plugin namens „Eclipse Mylyn to GitHub connector“.
Installieren Sie Hubzilla und seine Addons
Git auf Ihrem Computer / vm
Sie sollten ein Konto auf GitHub erstellt und die Projekte geforkt haben, bevor Sie fortfahren. Löschen Sie das Verzeichnis www
rm -R www/
Installieren Sie git (und optional git-gui, eine Client-Gui)
apt-get install git git-gui
Hubzilla und Addons herunterladen
Laden Sie das Hauptprojekt hubzilla und hubzilla-addons herunter
git clone https://github.com/yourname/hubzilla www
cd www/
git clone https://github.com/yourname/hubzilla-addons addon
Erstelle diesen zusätzlichen Ordner
mkdir -p „store/[data]/smarty3“
Erstellen Sie .htconfig.php und machen Sie sie für den Webserver schreibbar
touch .htconfig.php
chmod ou+w .htconfig.php
Machen Sie den Benutzer www-data (Webserver) zum Eigentümer aller Projektdateien
cd ..
chown -R www-data:www-data www/
Fügen Sie sich selbst („surfer“ in diesem Beispiel) zur Gruppe www-data hinzu. Warum das? Wenn Sie später Dateien in eclipse oder einem anderen Editor bearbeiten wollen. Dann machen Sie alle Dateien für die Gruppe www-data, in der Sie jetzt Mitglied sind, schreibbar.
cd www/
usermod -G www-data surfer
chmod -R g+w www/
Starten Sie den Computer (oder vm) neu Wenn Sie immer noch nicht in der Lage sind, die Projektdateien zu ändern, können Sie die Mitglieder der Gruppe www-data überprüfen mit
cat /etc/group
Melden Sie sich als Admin an
Öffnen Sie http://localhost und starten Sie die Matrix Bevor Sie einen ersten Benutzer registrieren, schalten Sie die Registrierungsmails aus. Öffnen Sie /var/www/.htconfig.php und stellen Sie sicher, dass in dieser Zeile „0“ gesetzt ist
App::$config['system']['verify_email'] = 0;
Sie sollten in der Lage sein, die Datei als „Sie selbst“ zu ändern (anstelle von root oder www-data).
Cron und der Poller
Wichtig! Lassen Sie den Poller laufen, um die jüngsten „öffentlichen“ Beiträge Ihrer Freunde zu erfassen. Richten Sie einen Cron-Job oder eine geplante Aufgabe ein, um den Poller alle 5-10 Minuten laufen zu lassen, um die jüngsten „öffentlichen“ Beiträge Ihrer Freunde zu erfassen
crontab -e
Fügen Sie hinzu.
*/10 * * * * cd /var/www/; /usr/bin/php include/poller.php
Wenn du den Pfad zu PHP nicht kennst, gib ein
which php
Debuggen Sie den Server über eclipse
Überprüfen Sie die Konfiguration von xdebug
Sie sollten xdebug bereits in den vorhergehenden Schritten installiert haben
apt-get install php-xdebug
Xdebug konfigurieren Öffnen Sie Ihr Terminal und geben Sie als root (su -l)
gedit /etc/php/mods-available/xdebug.ini
Wenn die Datei leer ist, versuchen Sie es an dieser Stelle
gedit /etc/php/conf.d/xdebug.ini
Dieser Befehl sollte den Texteditor gedit mit der Xdebug-Konfigurationsdatei öffnen Am Ende des Dateiinhalts fügen Sie den folgenden Text ein xdebug.remote_enable=on xdebug.remote_handler=dbgp xdebug.remote_host=localhost xdebug.remote_port=9000 Speichern Sie die Änderungen und schließen Sie den Editor. Geben Sie in Ihr Terminal ein, um den Webserver neu zu starten.
service apache2 neustart
Eclipse installieren und Debugging starten
Installieren Sie Eclipse. Starten Sie Eclipse mit dem Standard-Arbeitsbereich (oder wie Sie möchten) Installieren Sie das PHP-Plugin Menü > Hilfe > Neue Software installieren... Installieren Sie „PHP-Entwicklungswerkzeuge ...“ Optional - Installieren Sie das GitHub Connector Plugin Menü > Hilfe > Neue Software installieren... Installieren Sie „Eclipse Mylyn zu GitHub Connector“. Konfigurieren Sie das PHP-Plugin Menü > Fenster > Präferenzen...
Allgemein > Webbrowser > Ändern Sie auf „Externen Webbrowser verwenden“ PHP > Debug > Debug-Einstellungen > PHP Debugger > Ändern Sie auf „XDebug“.
Erstellen Sie ein neues PHP-Projekt Menü > Datei > Neues Projekt > Wählen Sie PHP > „PHP-Projekt“.
Wählen Sie „Projekt an bestehendem Ort erstellen“ und „/var/www“.
Debugging starten Öffnen Sie index.php und „Debuggen als...“. Wählen Sie als Start-URL: „http://localhost/“ Erwartet:
- Der Webbrowser startet
- Der Debugger wird bei der ersten php-Zeile anhalten
Stellen Sie Ihre Änderungen über github zur Verfügung
Vorbereitungen
Es gibt eine entsprechende Seite in dieser Dokumentation: [zrl=[baseurl]/help/git_for_non_developers]Git for Non-Developers[/zrl]. Wie bereits erwähnt, ist es empfehlenswert, die offizielle Dokumentation GitHub-Contributing-to-a-Project von Git zu lesen. Eclipse hat ein nützliches Plugin für GIT: „Eclipse Mylyn to GitHub connector“. Stellen Sie sicher, dass Sie Ihre Daten eingestellt haben
git config --global user.name „Ihr Name“
git config --global user.email „your@mail.com“
Dein erster Beitrag
Erstelle einen beschreibenden Themenzweig
git checkout -b dev_beginning
Stellen Sie sicher, dass Ihr lokales Repository mit dem Hauptprojekt auf dem neuesten Stand ist. Fügen Sie das ursprüngliche Repository als Remote-Repository mit dem Namen „upstream“ hinzu, falls noch nicht geschehen
git remote add upstream https://framagit.org/hubzilla/core/
Holen Sie sich die neueste Arbeit von dieser Remote
git fetch upstream
git merge upstream/master
Tipp: Sie können die Zweige auflisten
git branch -v
Nehmen Sie Ihre Änderungen vor. In diesem Beispiel ist es eine neue Doc-Datei. Prüfen Sie Ihre Änderungen
git status
Fügen Sie die neue Datei hinzu (stage)
git add doc/dev_beginner.bb
Übertragen Sie die Änderungen in Ihren lokalen Zweig. Dadurch wird ein Editor geöffnet, um eine Nachricht zu übermitteln.
git commit -a
Pushen Sie online zurück in den gleichen Themenzweig
git push
Nun können Sie zu Ihrem (Online-)Konto bei github gehen und den Pull Request erstellen.
Folgende Beiträge
Für den Fall, dass die Hauptentwickler wollen, dass du etwas änderst. Holen Sie sich die neueste Arbeit aus dem entfernten Upstream/Master, um sicher zu sein, dass Sie die neuesten Änderungen haben.
git fetch upstream
git merge upstream/master
Nehmen Sie Ihre Änderungen vor, testen Sie sie, committen Sie (in das lokale Repository), pushen Sie (in das Online-Repository)
git status
git commit -a -m „Änderung des Zweigs hinzugefügt“
git push
Versionen und Releases
Hubzilla verwendet derzeit eine Standard-Versionsnummerierungssequenz von $x.$y(.$z), zum Beispiel '1.12' oder '1.12.1'. Die erste Ziffer ist die Hauptversionsnummer. Hauptversionen werden „ungefähr“ einmal pro Jahr veröffentlicht, oft im Dezember.
Die zweite Ziffer ist die Nummer der Nebenversion. Wenn diese Zahl ungerade ist, handelt es sich um eine Entwicklungsversion. Ist die Zahl gerade, handelt es sich um eine freigegebene Version. Nebenversionen werden in der Regel einmal pro Monat freigegeben (von der Entwicklungs- in die Hauptversion verschoben), wenn die Entwicklung „stabil“ ist, aber das wird wahrscheinlich zunehmen. Zukünftig werden kleinere Versionen zwischen einem und drei Monaten veröffentlicht; das entspricht einem stabilen Codepunkt und wenn es einen allgemeinen Konsens in der Gemeinschaft gibt, dass die aktuelle Codebasis stabil genug ist, um eine Veröffentlichung in Betracht zu ziehen.
Die letzte Ziffer ist eine Schnittstellen- oder Patch-Kennung.
Der Freigabeprozess beinhaltet die Änderung der Versionsnummer (per Definition ist die Minor-Versionsnummer ungerade, und die Minor-Nummer wird erhöht). Einmal im Jahr wird bei einer Hauptversion die Hauptversionsnummer erhöht und die Nebenversionsnummer auf 0 zurückgesetzt.
Der Versionskandidat wird in einen neuen Zweig verschoben und die Tests beginnen bzw. werden für einen Zeitraum von 1-2 Wochen fortgesetzt, oder bis alle wichtigen Probleme behoben sind. Dieser Zweig wird in der Regel mit RC (Release Candidate) bezeichnet; beispielsweise steht 1.8RC für die bevorstehende Veröffentlichung der Version 1.8. Zu diesem Zeitpunkt wird die Versionsnummer des Entwicklungszweigs auf die nächsthöhere ungerade Zahl erhöht. (Zum Beispiel 1.9). Neue Entwicklungen können dann im Entwicklungszweig stattfinden.
Fehlerkorrekturen sollten immer auf „dev“ angewendet werden und von dort aus (in der Regel mit git cherry-pick) auf den RC-Zweig und, falls erforderlich, auf den Master- oder offiziellen Release-Zweig übertragen werden.
Zum Zeitpunkt der Erstellung eines Release Candidate wird die Sprachstring-Datei eingefroren, bis eine neue Version veröffentlicht wird. Die Übersetzungsarbeit kann fortgesetzt werden, aber alle Übersetzungen sollten an „dev“ übermittelt und in RC zusammengeführt werden.
Sobald die RC-Tests abgeschlossen sind, wird RC mit 'master' zusammengeführt und der RC-Versionsbezeichner entfernt; dies führt zu einem letzten Checkin, um die Versionsnummer zu ändern. Die CHANGELOG-Datei sollte ebenfalls zu diesem Zeitpunkt oder kurz davor aktualisiert werden. Wenn es während dieser letzten Zusammenführung Konflikte gibt, wird die Zusammenführung abgebrochen und „git merge -s ours“ angewendet. Dies führt dazu, dass der Master-Zweig durch den Inhalt des RC-Zweigs ersetzt wird. Konflikte entstehen oft durch String-Updates, die nach der letzten Veröffentlichung an master vorgenommen wurden und nicht einfach ohne manuelle Bearbeitung gelöst werden können. Da es sich hier um eine Veröffentlichung von getesteten Code handelt, wird von einer manuellen Bearbeitung abgeraten und stattdessen sollte die Strategie des Replacement Merge verwendet werden. Es wird davon ausgegangen, dass RC nun den neuesten, gut getesteten Code enthält.
Sobald die Veröffentlichung live ist und in den Master-Zweig überführt wurde, kann der RC-Zweig entfernt werden.
Nach der Veröffentlichung können Korrekturen an Master vorgenommen werden. Wenn möglich, sollten diese in dev vorgenommen werden und „git cherry-pick“ zum Zusammenführen verwendet werden; dadurch bleiben die Commit-Informationen erhalten und Konflikte beim Zusammenführen im nächsten Zyklus werden vermieden. Nur selten gilt ein Patch nur für den Master-Zweig. Falls nötig, kann das gemacht werden. Wenn die Änderung schwerwiegend ist, sollte die Versionsnummer der Schnittstelle erhöht werden. Dies liegt im Ermessen der Gemeinschaft. In jedem Fall sollte ein „git pull“ des Master-Zweigs immer zur neuesten Version führen, auf die alle Patches nach der Veröffentlichung angewendet werden.
Die Schnittstellennummer (das $z in $x.$y.$z) sollte in dev immer dann erhöht werden, wenn eine Änderung vorgenommen wird, die die Schnittstellen oder die API in inkompatibler Weise verändert, so dass alle externen Pakete (insbesondere Addons und API-Clients), die sich auf das aktuelle Verhalten verlassen, ihre eigenen Schnittstellen an dem Punkt, an dem es sich geändert hat, entdecken und entsprechend ändern können.
Git-Repository-Zweige
Es gibt zwei offizielle Zweige des Hubzilla-Git-Projektarchivs.
- Die stabile Version wird im Master-Zweig gepflegt. Die letzte Übertragung in diesem Zweig gilt als geeignet für Produktions-Hubs.
- Die experimentelle Entwicklung findet im dev-Zweig statt, der in den master-Zweig überführt wird, sobald er als getestet und stabil genug erachtet wird.
Git für Nicht-Entwickler
Sie kümmern sich um eine Übersetzung oder tragen zu einem Thema bei, und jedes Mal, wenn Sie eine Pull-Anfrage stellen, müssen Sie mit einem der Entwickler sprechen, bevor Ihre Änderungen eingefügt werden können? Wahrscheinlich haben Sie noch keine Kurzanleitung gefunden, die erklärt, wie Sie die Dinge auf Ihrer Seite synchronisieren können. Es ist wirklich sehr einfach. Nachdem Sie einen Fork des Repo erstellt haben (klicken Sie einfach auf „fork“ bei github), müssen Sie Ihre eigene Kopie klonen. Für das Beispiel nehmen wir an, dass du an einem Thema namens redexample arbeitest (das nicht existiert).
git clone https://github.com/username/red.git
Wechseln Sie anschließend in das Verzeichnis und fügen Sie einen Upstream hinzu.
cd rot
git remote add upstream https://framagit.org/hubzilla/core/
Von nun an können Sie Änderungen im Upstream mit dem Befehl
git fetch upstream
Bevor Ihre Änderungen automatisch zusammengeführt werden können, müssen Sie oft Änderungen im Upstream zusammenführen.
git merge upstream/master
Sie sollten Upstream-Änderungen immer zusammenführen, bevor Sie sie veröffentlichen, und Sie müssen Upstream-Änderungen mit allen Pull-Requests zusammenführen, damit sie automatisch zusammengeführt werden können. In 99% der Fälle wird das alles gut gehen. Das einzige Mal, dass es nicht klappt, ist, wenn jemand anderes die gleichen Dateien wie Sie bearbeitet hat - und oft nur, wenn sie die gleichen Zeilen der gleichen Dateien bearbeitet haben. In diesem Fall wäre es ein guter Zeitpunkt, um Hilfe zu bitten, bis Sie den Umgang mit Ihren eigenen Konflikten beim Zusammenführen in den Griff bekommen haben. Dann müssen Sie nur noch Ihre Änderungen hinzufügen
git add view/theme/redexample/
Dadurch werden alle Dateien in view/theme/redexample und alle Unterverzeichnisse hinzugefügt. Wenn Ihre speziellen Dateien über den gesamten Code verteilt sind, sollten Sie eine nach der anderen hinzufügen. Versuchen Sie nicht, git add -a auszuführen, da dies alles hinzufügt, einschließlich temporärer Dateien (wir fangen diese meist, aber nicht immer, mit .gitignore ab) und lokaler Änderungen, die Sie haben, aber nicht übertragen wollten. Wenn Sie alle Dateien, die Sie geändert haben, hinzugefügt haben, müssen Sie sie übertragen.
git commit
Daraufhin öffnet sich ein Editor, in dem Sie die vorgenommenen Änderungen beschreiben können. Speichern Sie diese Datei und beenden Sie den Editor. Zum Schluss pushen Sie die Änderungen auf Ihr eigenes Git
git push
Und das war's, Ihr Projektarchiv ist auf dem neuesten Stand! Alles, was Sie jetzt noch tun müssen, ist die Pull-Anfrage zu erstellen. Es gibt zwei Möglichkeiten, dies zu tun. Der einfache Weg, wenn Sie Github benutzen, ist, einfach auf den grünen Button oben in Ihrer eigenen Kopie des Repositorys zu klicken, eine Beschreibung der Änderungen einzugeben und auf „create pull request“ zu klicken. Das Haupt-Repository, Themes und Addons haben alle ihren Hauptzweig bei Github, so dass diese Methode meistens verwendet werden kann. Die meisten Leute können hier aufhören. Einige Projekte in der erweiterten RedMatrix-Ökosphäre haben keine Github-Präsenz, um für diese eine Pull-Anfrage zu stellen, ist es etwas anders - Sie müssen Ihre Pull-Anfrage manuell erstellen. Glücklicherweise ist das nicht viel schwieriger.
git request-pull -p <start> <url>
Start ist der Name eines Commits, mit dem begonnen werden soll. Dieser muss stromaufwärts existieren. Normalerweise wollen Sie nur master.
URL ist die URL Ihres Repos.
Man kann auch
git request-pull master https://example.com/project
Und senden Sie die Ausgabe einfach an den Projektbetreuer.
Tools und Arbeitsabläufe für Entwickler
Hub-Snapshots
Die Seite mit den Hub-Snapshots enthält Anweisungen und Skripte für die Erstellung vollständiger Snapshots eines Hubs, um den Wechsel zwischen konsistenten und vollständig bekannten Zuständen zu unterstützen. Dies ist nützlich, um Situationen zu vermeiden, in denen der Inhalt oder das Datenbankschema mit dem Code inkompatibel sein könnte.
Dokumentation erstellen
Um eine Dokumentation zu erstellen, müssen Sie nur ein paar Wörter in eine geschickte Reihenfolge bringen und ihre Existenz einem Entwickler bekannt geben. Sie können dies buchstäblich überall tun, solange ein Entwickler es sehen kann. Sobald Sie es bekannt gemacht haben, wird es jemand für Sie einchecken. Sie sollten versuchen, proprietäre Formate oder Orte, die eine Authentifizierung mit anderen Methoden als Zot erfordern, zu vermeiden, um einem Entwickler den Zugang zu erleichtern, aber selbst das ist keine strikte Voraussetzung. Wenn Sie direkt beitragen wollen, ist das auch in Ordnung. Um direkt beizutragen, sollte die Dokumentation in einem der folgenden Formate vorliegen:
- Markdown
- BBCode
- HTML
- Einfacher Text
- Andere Formate sind ebenfalls erlaubt, aber die Unterstützung für das Format muss zuerst zu mod/help.php hinzugefügt werden.
Wenn Sie eine reine Textdatei bearbeiten, halten Sie bitte die Spaltenbreite auf 80. Dies liegt daran, dass reiner Text in Fällen verwendet wird, in denen wir keine funktionierende Installation haben - zum Beispiel die Installationsdokumentation - und es sollte einfach sein, diese mit einem CLI-Texteditor zu lesen. Der Vorteil von Markdown ist, dass es für Menschen lesbar ist.
Der Vorteil von BBCode ist, dass es identitätsbewusst ist.
Wenn Sie also BBCode verwenden, versuchen Sie, das Beste daraus zu machen:
- Verwenden Sie gegebenenfalls ZRL-Links, um sicherzustellen, dass ein Link zu einer anderen Website die Authentifizierung beibehält und die identitätsbasierte Dokumentation funktioniert
- Verwenden Sie baseurl- oder observer.baseurl-Tags, wo es angebracht ist, anstelle von example.com für authentifizierte Betrachter.
- Unterstützen Sie nicht-authentifizierte Benutzer mit observer=0-Tags. Aufgrund historischer Versäumnisse tun wir dies derzeit nicht. Dies muss überall hinzugefügt werden.
Übersetzungen Um die Dokumentation zu übersetzen oder in anderen Sprachen als Englisch bereitzustellen:
- Erstellen Sie ein Verzeichnis in doc/ mit Ihrem zweistelligen Ländercode, falls es noch nicht existiert (z.B. doc/de/ für Deutsch oder doc/fr/ für Französisch)
- Erstellen Sie ein Dokument mit demselben Dateinamen wie die englische Version, aber mit dem Inhalt in Ihrer eigenen Sprache. So können wir auf die englische Version zurückgreifen, wenn die Übersetzung für eine bestimmte Seite nicht vorhanden ist.
Um eine Dokumentation zu erstellen, für die es keine gleichwertige Datei auf Englisch gibt, können Sie eine neue Datei mit einem Namen Ihrer Wahl erstellen - allerdings müssen Sie auch eine lokalisierte Version der Indexseite (main.bb auf Englisch) bereitstellen, damit sie über das Menü zugänglich ist.
Übersetzungen
Unsere Übersetzungen werden über Transifex verwaltet. Wenn Sie bei der Übersetzung von Hubzilla in eine andere Sprache helfen möchten, melden Sie sich auf transifex.com an, besuchen Sie Transifex und beantragen Sie die Mitgliedschaft in einem der bestehenden Sprachteams oder erstellen Sie ein neues. Benachrichtigen Sie einen der Hauptentwickler, wenn Sie ein Übersetzungsupdate haben, das zusammengeführt werden muss, oder fragen Sie, ob Sie es selbst zusammenführen können, wenn Sie mit Git und PHP vertraut sind. Wir haben eine Zeichenkettendatei namens 'messages.po', die gettext-kompatibel ist, und eine Handvoll E-Mail-Vorlagen, aus denen wir automatisch die Sprachdateien der Anwendung generieren.
Der Übersetzungsprozess
Die in der Benutzeroberfläche von Hubzilla verwendeten Strings werden bei Transifex übersetzt und dann in das Git-Repository auf github aufgenommen. Wenn Sie bei der Übersetzung helfen möchten einer Sprache helfen wollen, sei es bei der Korrektur von Begriffen oder bei der Übersetzung von Hubzilla in eine derzeit nicht unterstützte Sprache übersetzen möchten, registrieren Sie bitte ein Konto auf transifex.com und kontaktieren Sie dort das Übersetzungsteam.
Hubzilla zu übersetzen ist ganz einfach. Verwenden Sie einfach das Online-Tool auf transifex. Wenn Sie Wenn Sie sich nicht mit Git & Co. herumschlagen wollen, ist das kein Problem, wir überprüfen den Status der Übersetzungen regelmäßig und importieren sie in den Quellbaum auf github, damit andere sie nutzen können.
Wir nehmen nicht jede Übersetzung von transifex in den Quellbaum auf, um eine eine verstreute und gestörte Gesamterfahrung zu vermeiden. Als ungefähre Schätzung haben wir eine Untergrenze von 50% übersetzter Strings, bevor wir die Sprache einbeziehen. Diese Grenze richtet sich nur nach der Menge der übersetzten Zeichenfolgen, wobei wir davon ausgehen dass die wichtigsten Zeichenfolgen für die Benutzeroberfläche zuerst von einem Übersetzungsteam übersetzt Team übersetzt werden. Wenn Sie der Meinung sind, dass Ihre Übersetzung vor dieser Grenze brauchbar ist, kontaktieren Sie uns bitte und wir werden die Arbeit Ihres Teams wahrscheinlich in den Quellbaum aufnehmen.
Wenn Sie Ihre Arbeit selbst in den Quellbaum aufnehmen möchten, können Sie dies gerne tun und kontaktieren Sie uns bei allen Fragen, die sich ergeben. Der Prozess ist einfach und Hubzilla wird mit allen notwendigen Werkzeugen geliefert.
Der Speicherort der übersetzten Dateien im Quellbaum ist
/Ansicht/LNG-CODE/
wobei LNG-CODE der Code der verwendeten Sprache ist, z. B. de für Deutsch oder fr für Französisch. Für die E-Mail-Vorlagen (die *.tpl-Dateien) legen Sie sie einfach in das Verzeichnis und Sie sind fertig. Die übersetzten Strings kommen als „hmessages.po“-Datei von Transifex, die in die PHP-Datei übersetzt werden muss, die Hubzilla verwendet. Dazu Sie die Datei in das oben genannte Verzeichnis und verwenden Sie das Dienstprogramm „po2php“ aus dem aus dem Verzeichnis util Ihrer Hubzilla-Installation.
Angenommen, Sie möchten die deutsche Lokalisierung konvertieren, die sich in view/de/hmessages.po steht, würden Sie wie folgt vorgehen.
- Navigieren Sie an der Eingabeaufforderung in das Basisverzeichnis Ihrer
Hubzilla-Installation
- Führen Sie das po2php-Skript aus, das die Übersetzung
in die Datei hstrings.php einfügt, die von Hubzilla verwendet wird.
$> php util/po2php.php view/de/hmessages.po
Die Ausgabe des Skripts wird in der Datei view/de/hstrings.php platziert, wo froemdoca es erwartet, so dass Sie Ihre Übersetzung sofort testen können.
- Besuchen Sie Ihre Hubzilla-Seite und überprüfen Sie, ob sie in der Sprache ist, die Sie gerade übersetzt haben. Wenn nicht, versuchen Sie, den Fehler zu finden, wahrscheinlich gibt PHP Ihnen einen Hinweis im Log/Warnings.über den Fehler.
Zur Fehlersuche können Sie auch versuchen, die Datei mit PHP „auszuführen“. Dies sollte keine Ausgabe geben, wenn die Datei in Ordnung ist, aber vielleicht einen Hinweis für die Fehler in der Datei zu finden.
$> php view/de/hstrings.php
- Übertragen Sie die beiden Dateien mit einer aussagekräftigen Commit-Nachricht in Ihr Git Repository, pushen Sie es zu Ihrem Fork des Hubzilla Repository auf github und stellen einen Pull Request für diesen Commit.
Dienstprogramme
Zusätzlich zum po2php-Skript gibt es einige weitere Hilfsprogramme für die Übersetzung im Verzeichnis „util“ des Hubzilla-Quellbaums. Wenn Sie nur Hubzilla in eine andere Sprache übersetzen wollen, werden Sie wahrscheinlich keines dieser Werkzeuge aber es gibt Ihnen eine Vorstellung davon, wie der Übersetzungsprozess von Hubzilla funktioniert.
Weitere Informationen finden Sie in der Datei utils/README.
Bekannte Probleme
-
Hubzilla verwendet die Spracheinstellung des Browsers des Besuchers, um die Sprache für die Benutzeroberfläche. Meistens funktioniert dies, aber es gibt einige bekannte Macken.
-
Die frühen Übersetzungen basieren auf den Friendica-Übersetzungen, wenn Sie einige grobe Übersetzungen finden, lassen Sie es uns bitte wissen oder korrigieren Sie sie bei Transifex.
Lizenzvergabe
Der gesamte zum Projekt beigetragene Code unterliegt der MIT-Lizenz, sofern nicht anders angegeben. Wir akzeptieren Code von Drittanbietern, der unter MIT, BSD und LGPL fällt, aber Copyleft-Lizenzen (GPL und AGPL) sind nur in Addons erlaubt. Es muss möglich sein, den GPL-(Copyleft-)Code vollständig aus dem Hauptprojekt zu entfernen, ohne etwas zu zerstören.
Codierungsstil
Im Interesse der Konsistenz verwenden wir den folgenden Code-Stil. Wir akzeptieren auch Patches, die andere Stile verwenden, aber bitte versuchen Sie, wenn möglich, einen einheitlichen Code-Stil zu verwenden. Wir werden nicht über die Vorzüge dieses Stils streiten oder diskutieren, und es ist irrelevant, was Projekt „xyz“ verwendet. Dies ist nicht Projekt „xyz“. Dies ist eine Grundlinie, um zu versuchen, den Code jetzt und in Zukunft lesbar zu halten.
- Alle Kommentare sollten in Englisch sein.
- Wir verwenden Doxygen, um Dokumentation zu erstellen. Dies wurde nicht konsequent angewandt, aber es wird dringend empfohlen, es zu lernen und zu benutzen.
- Die Einrückung erfolgt hauptsächlich durch Tabulatoren mit einer Tabulatorbreite von 4.
- String-Verkettungen und Operatoren sollten durch Leerzeichen getrennt werden. z.B. „$foo = $bar . 'abc';„ anstelle von ‚$foo=$bar.‘abc';“
- Im Allgemeinen verwenden wir einfache Anführungszeichen für String-Variablen und doppelte Anführungszeichen für SQL-Anweisungen. „Hier Dokumente“ sollten vermieden werden. Manchmal ist die Verwendung von Strings in doppelten Anführungszeichen mit Variablenersetzung das effizienteste Mittel zur Erstellung des Strings. In den meisten Fällen sollten Sie einfache Anführungszeichen verwenden.
- Verwenden Sie Leerzeichen großzügig, um die Lesbarkeit zu verbessern. Bei der Erstellung von Arrays mit vielen Elementen wird oft ein Schlüssel/Wert-Paar pro Zeile gesetzt, das entsprechend von der übergeordneten Zeile eingerückt wird. Das Aneinanderreihen der Zuweisungsoperatoren erfordert etwas mehr Arbeit, erhöht aber auch die Lesbarkeit.
- Im Allgemeinen werden öffnende geschweifte Klammern in dieselbe Zeile gesetzt wie das, was die Klammer öffnet. Sie sind das letzte Zeichen in der Zeile. Schließende Klammern stehen in einer eigenen Zeile.
- Einige Funktionen nehmen Argumente im argc/argv-Stil entgegen, wie main() in C oder Funktions-Args in Bash oder Perl. Urls werden innerhalb eines Moduls aufgeteilt. z.B. bei „http://example.com/module/arg1/arg2“ ist $this->argc 3 (integer) und $this->argv enthält: [0] => 'module', [1] => 'arg1', [2] => 'arg2'. Es wird immer nur ein Argument angegeben. Wenn eine nackte Domain-URL angegeben wird, wird $this->argv[0] auf „home“ gesetzt.
Dateisystem-Layout
Directory | Description |
---|---|
addon | optionale Addons/Plugins |
boot.php | Jeder Prozess verwendet dies, um die Anwendungsstruktur zu booten |
doc | Hilfedateien |
images | erforderliche Bilder |
include | Das „Modell“ in MVC - (Back-End-Funktionen), enthält auch PHP „Executables“ für die Hintergrundverarbeitung |
index.php | Der Front-End-Controller für den Webzugang |
install | Installations- und Upgrade-Dateien und DB-Schema |
library | Module von Drittanbietern (müssen lizenzkompatibel sein) |
mod | Steuerungsmodule basierend auf URL-Pfadnamen (z.B. http://sitename/foo lädt mod/foo.php) |
mod/site/ | Site-spezifische Mod-Overrides, die von Git ausgeschlossen sind |
util | Übersetzungstools, Hauptdatenbank für englische Zeichenketten und andere verschiedene Dienstprogramme |
version.inc | enthält die aktuelle Version (die automatisch über cron für das Haupt-Repository aktualisiert und über git verteilt wird) |
view | Themen- und Sprachdateien |
view/(css,js,img,php,tpl) | Standard-Theme-Dateien |
view/(en,it,es ...) | Sprachstrings und Ressourcen |
view/theme/ | Einzelne benannte Themen, die (css,js,img,php,tpl) Overrides enthalten |
Hubzilla-Entwicklung - einige nützliche Grundfunktionen
- get_account_id()
Gibt die numerische account_id zurück, wenn authentifiziert oder 0. Es ist möglich, authentifiziert und nicht mit einem Channel verbunden zu sein.
- local_channel()
Gibt die numerische channel_id zurück, wenn sie authentifiziert und mit einem Channel verbunden ist, oder 0. Wird im Code manchmal als $uid bezeichnet.
- remote_channel()
Gibt einen authentifizierten String-Hash des Red Global Identifier zurück, wenn er über Remote-Auth authentifiziert wurde, oder einen leeren String.
- App::get_observer()
gibt eine xchan-Struktur zurück, die den aktuellen Betrachter repräsentiert, wenn er authentifiziert ist (lokal oder remote).
- get_config($family,$key), get_pconfig($uid,$family,$key)
Gibt die Konfigurationseinstellung für $family und $key zurück oder false, wenn sie nicht gesetzt ist. Veraltet: Verwenden Sie stattdessen Zotlabs\Lib\Config::Get.
- set_config($family,$key,$value), set_pconfig($uid,$family,$key,$value)
Setzt den Wert der Konfigurationseinstellung für $family und $key auf $value. Gibt $value zurück. Die config-Versionen arbeiten mit systemweiten Einstellungen. Die pconfig-Versionen erhalten/setzen die Werte für eine bestimmte Integer uid (channel_id). Veraltet: Verwenden Sie stattdessen Zotlabs\Lib\Config::Set.
- dbesc()
Escape-Zeichenfolgen, die in DB-Abfragen verwendet werden. Diese Funktion gibt die escapte Zeichenkette zurück. Ganzzahlige DB-Parameter sollten alle mit intval() in Ganzzahlen umgewandelt werden
- q($sql,$var1...)
Führt eine DB-Abfrage mit der SQL-Anweisung $sql durch. Die printf-artigen Argumente %s und %d werden durch variable Argumente ersetzt, die jeweils entsprechend dbesc() oder intval() sein sollten. SELECT-Abfragen geben ein Array von Ergebnissen oder false zurück, wenn ein SQL- oder DB-Fehler vorliegt. Andere Abfragen geben true zurück, wenn der Befehl erfolgreich war, oder false, wenn er nicht erfolgreich war.
- t($Zeichenfolge)
Gibt die übersetzte Variante von $string für die aktuelle Sprache zurück oder $string (Standardsprache 'en'), wenn die Sprache nicht bekannt ist oder eine übersetzte Version des Strings nicht existiert.
- x($var), $x($array,$key)
Kurzer Test, um zu sehen, ob die Variable $var gesetzt und nicht leer ist. Die Tests variieren je nach Typ. Gibt false zurück, wenn $var oder $key nicht gesetzt ist. Wenn die Variable gesetzt ist, wird 1 zurückgegeben, wenn sie einen Wert ungleich Null hat, andernfalls wird 0 zurückgegeben. -- z.B. x('') oder x(0) gibt 0 zurück;
Erstellen von Plugins/Addons für Hubzilla
Sie möchten also, dass Hubzilla etwas tut, was es noch nicht tut. Da gibt es viele Möglichkeiten. Aber lass uns lernen, wie man ein Plugin oder Addon schreibt. In deinem Hubzilla-Ordner/Verzeichnis wirst du wahrscheinlich ein Unterverzeichnis namens 'addon' finden. Wenn Sie noch keins haben, erstellen Sie es einfach.
mkdir addon
Überlegen Sie sich dann einen Namen für Ihr Addon. Wahrscheinlich haben Sie zumindest eine vage Vorstellung davon, was es tun soll. Für unser Beispiel werde ich ein Plugin mit dem Namen „randplace“ erstellen, das einen zufälligen Speicherort für jeden Ihrer Beiträge angibt. Der Name Ihres Plugins wird verwendet, um die Funktionen zu finden, auf die wir zugreifen müssen, und ist Teil des Funktionsnamens, also verwenden Sie zur Sicherheit nur einfache Textzeichen. Sobald Sie einen Namen gewählt haben, erstellen Sie ein Verzeichnis unterhalb von 'addon', um Ihre Arbeitsdatei(en) zu speichern.
mkdir addon/randplace
Erstellen Sie nun Ihre Plugin-Datei. Sie muss den gleichen Namen haben und ist ein PHP-Skript. Erstellen Sie also mit Ihrem Lieblingseditor die Datei
addon/randplace/randplace.php
Die allererste Zeile dieser Datei muss lauten
<?php
Dann werden wir einen Kommentarblock erstellen, der das Plugin beschreibt. Hierfür gibt es ein spezielles Format. Wir verwenden /* ... */ Kommentar-Stil und einige markierte Zeilen, die aus
/**
*
* Name: Random Place (here you can use better descriptions than you could in the filename)
* Description: Sample Hubzilla plugin, Sets a random place when posting.
* Version: 1.0
* Author: Mike Macgirvin <mike@zothub.com>
*
*/
Diese Tags sind für den Website-Administrator sichtbar, wenn er Plugins über die Verwaltungskonsole installiert oder verwaltet. Es kann mehr als einen Autor geben. Fügen Sie einfach eine weitere Zeile hinzu, die mit „Autor:“ beginnt. Ein typisches Plugin hat mindestens die folgenden Funktionen:
- pluginname_load()
- pluginname_unload()
In unserem Fall werden wir sie randplace_load() und randplace_unload() nennen, da dies der Name unseres Plugins ist. Diese Funktionen werden immer dann aufgerufen, wenn wir das Plugin entweder initialisieren oder von der aktuellen Webseite entfernen wollen. Auch wenn Ihr Plugin Dinge wie die Änderung des Datenbankschemas erfordert, bevor es zum ersten Mal ausgeführt werden kann, würden Sie diese Anweisungen wahrscheinlich in den Funktionen namens
- pluginname_install()
- pluginname_uninstall()
Als nächstes werden wir über Hooks sprechen. Hooks sind Stellen im Hubzilla-Code, an denen wir Plugins erlauben, etwas zu tun. Es gibt eine Menge davon, und jedes hat einen Namen. Normalerweise verwenden wir die Funktion pluginname_load(), um eine „Handler-Funktion“ für alle Hooks zu registrieren, an denen Sie interessiert sind. Wenn dann einer dieser Hooks ausgelöst wird, wird Ihr Code aufgerufen. Wir registrieren Hook-Handler mit der Funktion 'register_hook()'. Sie benötigt 3 Argumente. Das erste ist der Hook, den wir abfangen wollen, das zweite ist der Dateiname der Datei, in der sich unsere Handler-Funktion befindet (relativ zur Basis Ihrer Hubzilla-Installation), und das dritte ist der Funktionsname Ihrer Handler-Funktion. Lassen Sie uns also jetzt unsere randplace_load()-Funktion erstellen.
function randplace_load() {
register_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook');
register_hook('feature_settings', 'addon/randplace/randplace.php', 'randplace_settings');
register_hook('feature_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post');
}
Wir werden also drei Ereignisse abfangen: „post_local“, das ausgelöst wird, wenn ein Beitrag im lokalen System erstellt wird, „feature_settings“, um einige Einstellungen für unser Plugin festzulegen, und „feature_settings_post“, um diese Einstellungen zu speichern.
Als nächstes erstellen wir eine unload-Funktion. Das ist ganz einfach, denn sie hebt nur die Registrierung unserer Hooks auf. Sie nimmt genau die gleichen Argumente entgegen.
function randplace_unload() {
unregister_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook');
unregister_hook('feature_settings', 'addon/randplace/randplace.php', 'randplace_settings');
unregister_hook('feature_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post');
}
Hooks werden mit zwei Argumenten aufgerufen. Das erste ist immer $a, das unsere globale App-Struktur ist und eine riesige Menge an Informationen über den Zustand der Web-Anfrage enthält, die wir gerade verarbeiten, sowie darüber, wer der Betrachter ist, und was unser Login-Status ist, und der aktuelle Inhalt der Webseite, die wir wahrscheinlich aufbauen.
Das zweite Argument ist spezifisch für den Hook, den Sie aufrufen. Es enthält Informationen, die für diese bestimmte Stelle im Programm relevant sind, und ermöglicht es Ihnen oft, sie anzusehen und sogar zu ändern. Um sie zu ändern, müssen Sie dem Variablennamen ein '&' hinzufügen, damit sie als Referenz an Ihre Funktion übergeben wird. Andernfalls wird eine Kopie erstellt, und alle Änderungen, die Sie vornehmen, gehen verloren, wenn der Hook-Prozess zurückkehrt. Normalerweise (aber nicht immer) ist das zweite Argument ein benanntes Array von Datenstrukturen. Bitte lesen Sie die „Hook-Referenz“ (zu diesem Zeitpunkt noch nicht geschrieben) für Details zu jedem spezifischen Hook. Gelegentlich müssen Sie sich den Programmcode ansehen, um genau zu sehen, wie ein bestimmter Hook aufgerufen wird und wie die Ergebnisse verarbeitet werden.
Fügen wir nun etwas Code hinzu, um unseren post_local-Hook-Handler zu implementieren.
function randplace_post_hook($a, &$item) {
/**
*
* An item was posted on the local system.
* We are going to look for specific items:
* - A status post by a profile owner
* - The profile owner must have allowed our plugin
*
*/
logger('randplace invoked');
if(! local_channel()) /* non-zero if this is a logged in user of this system */
return;
if(local_channel() != $item['uid']) /* Does this person own the post? */
return;
if(($item['parent']) || (! is_item_normal($item))) {
/* If the item has a parent, or isn't "normal", this is a comment or something else, not a status post. */
return;
}
/* Retrieve our personal config setting */
$active = get_pconfig(local_channel(), 'randplace', 'enable');
if(! $active)
return;
/**
*
* OK, we're allowed to do our stuff.
* Here's what we are going to do:
* load the list of timezone names, and use that to generate a list of world cities.
* Then we'll pick one of those at random and put it in the "location" field for the post.
*
*/
$cities = array();
$zones = timezone_identifiers_list();
foreach($zones as $zone) {
if((strpos($zone,'/')) && (! stristr($zone,'US/')) && (! stristr($zone,'Etc/')))
$cities[] = str_replace('_', ' ',substr($zone,strpos($zone,'/') + 1));
}
if(! count($cities))
return;
$city = array_rand($cities,1);
$item['location'] = $cities[$city];
return;
}
Fügen wir nun unsere Funktionen zum Erstellen und Speichern von Einstellungswerten hinzu.
/**
*
* Callback from the settings post function.
* $post contains the global $_POST array.
* We will make sure we've got a valid user account
* and that only our own submit button was clicked
* and if so set our configuration setting for this person.
*
*/
function randplace_settings_post($a,$post) {
if(! local_channel())
return;
if($_POST['randplace-submit'])
set_pconfig(local_channel(),'randplace','enable',intval($_POST['randplace']));
}
/**
*
* Called from the Feature Setting form.
* The second argument is a string in this case, the HTML content region of the page.
* Add our own settings info to the string.
*
* For uniformity of settings pages, we use the following convention
* <div class="settings-block">
* <h3>title</h3>
* .... settings html - many elements will be floated...
* <div class="clear"></div> <!-- generic class which clears all floats -->
* <input type="submit" name="pluginnname-submit" class="settings-submit" ..... />
* </div>
*/
function randplace_settings(&$a,&$s) {
if(! local_channel())
return;
/* Add our stylesheet to the page so we can make our settings look nice */
head_add_css('/addon/randplace/randplace.css');
/* Get the current state of our config variable */
$enabled = get_pconfig(local_channel(),'randplace','enable');
$checked = (($enabled) ? ' checked="checked" ' : '');
/* Add some HTML to the existing form */
$s .= '<div class="settings-block">';
$s .= '<h3>' . t('Randplace Settings') . '</h3>';
$s .= '<div id="randplace-enable-wrapper">';
$s .= '<label id="randplace-enable-label" for="randplace-checkbox">' . t('Enable Randplace Plugin') . '</label>';
$s .= '<input id="randplace-checkbox" type="checkbox" name="randplace" value="1" ' . $checked . '/>';
$s .= '</div><div class="clear"></div>';
/* provide a submit button */
$s .= '<div class="settings-submit-wrapper" ><input type="submit" name="randplace-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
}
Erweiterte Plugins
Manchmal möchten Ihre Plugins eine Reihe neuer Funktionen bereitstellen, die gar nicht oder nur umständlich über Hooks bereitgestellt werden können. In diesem Fall kann Ihr Plugin auch als „Modul“ fungieren. Ein Modul ist in unserem Fall ein strukturierter Webpage-Handler, der auf eine bestimmte URL reagiert. Dann wird alles, was auf diese URL zugreift, vollständig von Ihrem Plugin behandelt. Der Schlüssel dazu ist die Erstellung einer einfachen Funktion namens pluginname_module(), die nichts tut.
function randplace_module() { return; }
Sobald diese Funktion existiert, wird die URL https://yoursite/randplace auf Ihr Plugin als Modul zugreifen. Dann können Sie Funktionen definieren, die an verschiedenen Stellen aufgerufen werden, um eine Webseite aufzubauen, genau wie die Module im mod/-Verzeichnis. Die typischen Funktionen und die Reihenfolge, in der sie aufgerufen werden, sind
modulename_init($a) // (e.g. randplace_init($a);) called first - if you wish to emit json or xml,
// you should do it here, followed by killme() which will avoid the default action of building a webpage
modulename_aside($a) // Often used to create sidebar content
modulename_post($a) // Called whenever the page is accessed via the "post" method
modulename_content($a) // called to generate the central page content. This function should return a string
// consisting of the central page content.
Ihre Modulfunktionen haben Zugriff auf den URL-Pfad, als ob sie eigenständige Programme im Unix-Betriebssystem wären. Wenn Sie zum Beispiel die Seite
https://yoursite/randplace/something/somewhere/whatever
besuchen, erstellen wir eine argc/argv-Liste zur Verwendung durch Ihre Modulfunktionen
$x = argc(); $x will be 4, the number of path arguments after the sitename
for($x = 0; $x < argc(); $x ++)
echo $x . ' ' . argv($x);
0 randplace
1 something
2 somewhere
3 whatever
Portierung von Friendica-Plugins
Hubzilla verwendet eine ähnliche Plugin-Architektur wie das Friendica-Projekt. Die Authentifizierungs-, Identitäts- und Rechtesysteme sind jedoch völlig unterschiedlich. Viele Friendica-Plugins können relativ einfach portiert werden, indem man ein paar Funktionen umbenennt - und dann sicherstellt, dass das Berechtigungsmodell befolgt wird. Die Funktionen, die umbenannt werden müssen, sind:
- Friendica's pluginname_install() wird zu pluginname_load()
- Friendicas pluginname_uninstall() wird zu pluginname_unload()
Hubzilla hat _install und _uninstall Funktionen, aber diese werden unterschiedlich benutzt.
- Friendicas „plugin_settings“-Haken wird „feature_settings“ genannt
- Friendicas „plugin_settings_post“-Haken wird „feature_settings_post“ genannt
Wenn Sie diese ändern, wird Ihr Plugin oft funktionieren, aber bitte überprüfen Sie Ihren gesamten Berechtigungs- und Identitätscode, da die Konzepte dahinter in Hubzilla völlig anders sind. Viele strukturierte Datennamen (insbesondere DB-Schema-Spalten) sind auch ganz anders.
Testen
Hubzilla verwendet [PHPUnit] für automatisierte Tests, oft auch Unit-Tests oder Integrationstests genannt.
Die Tests werden als PHP-Klassen geschrieben und befinden sich im Unterverzeichnis tests/unit
des Hubzilla-Hauptrepositorys. In diesem Leitfaden wird erklärt, wie man die Tests ausführt, wie die Tests strukturiert sind und wie Sie Ihre eigenen Tests schreiben können.
Ausführen der Testsuite
Installieren der Abhängigkeiten
Um die Tests ausführen zu können, müssen Sie die Entwickler-Abhängigkeiten installieren, die in der composer.json-Datei
aufgeführt sind. Stellen Sie sicher, dass Sie [composer installiert] auf Ihrem Entwicklungssystem haben, und führen Sie dann aus:
% composer install
Dies wird phpunit und einige andere Abhängigkeiten installieren. Es wird auch einige Dateien im Unterverzeichnis vendor/composer
aktualisieren. Dies mag ein wenig laut erscheinen, aber es ist wichtig, dass diese Änderungen nicht in das Repository übertragen werden!
Warnung! Übertragen Sie die Änderungen an den Dateien im Verzeichnis vendor/composer
nicht in Ihr Projektarchiv!
Einrichten der Testdatenbank
Wir haben ein Skript (tests/create_test_db.sh
) beigefügt, das Ihnen hilft, die Testdatenbank einzurichten. Sie können es wie folgt ausführen:
% HZ_TEST_DB_TYPE=mysql ./tests/create_test_db.sh
Wenn Sie stattdessen PostgreSQL verwenden, erstellen Sie die Testdatenbank wie folgt:
% HZ_TEST_DB_TYPE=postgres ./tests/create_test_db.sh
Das Skript macht einige Annahmen über Ihre Einrichtung, aber alles ist über Umgebungsvariablen konfigurierbar. Falls Sie Anpassungen benötigen, finden Sie die Details im Quelltext des Skripts.
Ausführen der Tests
Sobald Sie die Entwicklerabhängigkeiten installiert und die Testdatenbank eingerichtet haben, können Sie die Tests wie folgt ausführen:
% ./vendor/bin/phpunit -c tests/phpunit.xml
Auch hier macht die Konfiguration in tests/phpunit.xml
standardmäßig einige Annahmen über Ihre Einrichtung, die mit Hilfe von Umgebungsvariablen außer Kraft gesetzt werden können. Siehe tests/phpunit.xml
für die Details.
Sie können auch einen bestimmten Test oder eine bestimmte Gruppe von Tests ausführen, indem Sie das Argument --filter
in PHPUnit verwenden:
% ./vendor/bin/phpunit -c tests/phpunit.xml --filter Autoname
Führt jeden Test mit der Bezeichnung „Autoname“ aus.
Erzeugen von Abdeckungsberichten
Um Abdeckungsberichte zu generieren, benötigen Sie einen Treiber, der in der Lage ist, die Abdeckungsinformationen zu generieren, die PHPUnit sammelt. Wir empfehlen [Xdebug], aber sehen Sie sich die PHPUnit Seite zur Codeabdeckungsanalyse für Alternativen und Details an.
Wenn Xdebug richtig eingestellt ist, können Sie den Abdeckungsbericht wie folgt erzeugen:
% XDEBUG_MODE=coverage ./vendor/bin/phpunit -c ./tests/phpunit.xml
Dies erzeugt eine Reihe von HTML-Dateien in den Verzeichnissen des Unterverzeichnisses tests/results/coverage/
.
Öffnen Sie die Datei „index.php“ in Ihrem Webbrowser, um die Statistiken zu sehen.
Fehlersuche
Wenn Xdebug installiert ist, können Sie auch Step-Debugging und eine Reihe anderer Dinge tun, um die Tests zu debuggen und Informationen über ihre Ausführung zu erhalten. Lesen Sie auf den [Xdebug]-Seiten und in Ihrem bevorzugten Editor nach, wie Sie dies einrichten können.
Teststruktur und Organisation
Die Tests befinden sich im Unterverzeichnis tests/unit
und in weiteren Unterverzeichnissen, die mehr oder weniger das Verzeichnislayout des Core Code Repository widerspiegeln.
Tests werden als PHP-Klassen geschrieben, die die UnitTestCase-Klasse erweitern (zu finden in tests/unit/UnitTestcase.php
). Der Dateiname und die darin enthaltene Testklasse sollten gleich lauten und müssen mit Test.php
enden.
Beispiele sind:
tests/unit/includes/AccountTest.php
tests/unit/Lib/ActivityTest.php
Die Testklassen enthalten eine oder mehrere Testfunktionen, diese müssen öffentlich sein und mit dem Präfix test
versehen werden.
Hier ist ein Beispiel:
use Zotlabs\Tests\Unit\UnitTestCase;
class AccountTest extends UnitTestCase {
public function test_get_account_by_id_returns_existing_account() {
$Konto = get_account_by_id(42);
$this->assertNotFalse($account);
$this->assertEquals(
$this->fixtures['account'][0]['account_email'],
$account['account_email']
);
}
Beachten Sie, dass wir versuchen, den Namen der Testfunktion so aussagekräftig wie möglich zu gestalten.
Die Klasse kann auch eine beliebige Anzahl anderer Funktionen enthalten, um die Dinge ordentlich und übersichtlich zu halten. Diese können je nach Bedarf des Testcodes privat, geschützt oder öffentlich sein.
Die Ergebnisse und Artefakte der Testläufe werden im Verzeichnis tests/results/
abgelegt. Dazu gehören in der Regel das Testprotokoll, der Code Coverage Report usw.
Hubzilla-spezifische Funktionen
Testdatenbankzugriff:
Idealerweise sollte es in der Lage sein, jeden Teil des Codes isoliert zu testen, wobei alle Abhängigkeiten durch Stubs, Mocks oder Fakes ersetzt werden sollten.
Dies ist bei einer Legacy-Codebasis wie Hubzilla, die nicht im Hinblick auf Testbarkeit geschrieben wurde, nicht möglich. Aus diesem Grund verwenden wir eine separate Testdatenbank und stellen sie dem zu testenden Code mit denselben Mechanismen zur Verfügung, die auch Hubzilla normalerweise verwendet. Das bedeutet, dass jeder Code, der Datenbankabfragen ausführt, sich normal verhält, wenn er von einem Test aufgerufen wird.
Damit dies funktioniert, stellen wir vor der Ausführung jeder Testfunktion eine Verbindung zur Datenbank her. Wir laden auch einige anfängliche Daten in die Datenbank, um sicherzustellen, dass die Dinge wie erwartet funktionieren und dass wir einen bekannten Zustand der Datenbank haben, wenn der Test läuft. Nach Beendigung des Tests wird die Testdatenbank gelöscht, so dass bei der nächsten Testdurchführung derselbe konsistente Zustand vorliegt.
All dies wird von der Basisklasse UnitTestCase
gehandhabt.
Datenbank-Fixtures:
Wir benötigen einige vorhersehbare Inhalte in der Datenbank, um Dinge wie die Protokollierung und andere Inhalte, die für die Tests im Allgemeinen nützlich sind, einzurichten. Dies sind Datenbank-Fixtures, die für jeden Testlauf in die Datenbank geladen werden.
Die Datenbankfixtures befinden sich im Verzeichnis tests/unit/include/dba/_files
und bestehen aus YAML-Dateien, wobei jede Datei den Inhalt einer Datenbanktabelle mit dem gleichen Namen wie die Datei selbst darstellt.
Obwohl Datenbank-Fixtures sehr nützlich sind, versuchen wir, die Anzahl der Fixtures so gering wie möglich zu halten. In der Regel ist es besser, alle für einen bestimmten Test benötigten Inhalte im Test selbst hinzuzufügen.
Fakes:
Fakes sind Klassen, die wir an den zu testenden Code übergeben können und die genauso aussehen und sich genauso verhalten wie die Originalklasse (für den zu testenden Code). Sie sind nützlich, wenn wir Objekte an den zu testenden Code übergeben können, da wir sie vom Testcode aus vollständig kontrollieren können.
Fakes befinden sich im Verzeichnis tests/fakes
.
Erstellen von Protokoll- Föderationsdiensten
Es gibt drei Hauptkomponenten beim Schreiben von Föderations-Plugins. Diese sind:
- Kanalerkennung und Verbindungsaufbau
- Senden von Beiträgen/Nachrichten
- Empfangen von Beiträgen/Nachrichten
Darüber hinaus müssen Verbundtreiber Folgendes bewältigen
- Unterschiede in den Datenschutzrichtlinien (und Inhaltsformaten)
Herstellen von Verbindungen
Die Kernanwendung bietet eine Kanalerkennung in der folgenden Reihenfolge:
- Zot-Kanal-Erkennung
- Webfinger (channel@hub) Lookup 2.1 RFC7033 Webfinger 2.2 XRD basierter Webfinger (alter Stil)
- URL-Ermittlung (derzeit nur zur Ermittlung von RSS-Feeds verwendet)
- Wenn alle diese Methoden fehlschlagen, ist das Netzwerk „unbekannt“ und wir sind nicht in der Lage, mit dem Kanal zu kommunizieren oder eine Verbindung zu ihm herzustellen. Ein „xchan“-Datensatz kann dennoch erstellt werden, wenn genügend Informationen bekannt sind, um einen eindeutigen Kanal zu identifizieren.
Jeder der Lookup-Dienste kann an ein Plugin gebunden und erweitert werden. Wenn ein Kanal entdeckt wird, erstellen wir einen „xchan“-Datensatz, der eine plattformneutrale Darstellung der Kanalidentität ist. Wenn wir Informationen an den Kanal senden müssen, ist in der Regel auch ein „hubloc“-Datensatz (Standort des Hubs) erforderlich. Ein 'follow'-Plugin-Hook wird bereitgestellt, um Webfinger und diese Erkennungssequenz vollständig zu umgehen.
Der letzte Schritt, um dies alles zusammenzufügen, ist die Erstellung eines „abook“-Datensatzes, der einen xchan in einer Beziehung zu einem lokalen Kanal mit einem bestimmten Satz von Berechtigungen anlegt. Bei Netzwerken, die keine nomadische Identität unterstützen, muss Ihr Plugin auch „abook_instance“ setzen, eine durch Kommata getrennte Liste von lokalen URLs, mit denen der entfernte Kanal verbunden ist. Wenn Ihr Mitglied zum Beispiel mit meinem Channel-Klon unter https://example.com verbunden war, würde die abook_instance für diese Verbindung'https://example.com' lauten. Wenn Sie sich auch mit meinem Klon unter https://abc.example.com verbunden haben, würde die Zeichenfolge in„https://example.com,https://abc.example.com“ geändert werden. Dies ermöglicht es den lokalen Kanälen zu unterscheiden, mit welcher Instanz ein bestimmter entfernter Kanal verbunden ist und vermeidet Zustellungsfehler an diese Kanäle von anderen Kloninstanzen.
Ein Föderations-Plugin für ein Webfinger-basiertes System muss nur die Webfinger- oder XRD-Ergebnisse untersuchen und einen Protokoll-Stack identifizieren, der für die Verbindung oder Kommunikation verwendet werden kann. Dann erstellt es einen xchan-Datensatz mit dem angegebenen 'xchan_network'-Typ und einen hubloc-Datensatz mit demselben 'hubloc_network' mit den angegebenen Informationen. Derzeit muss das Plugin den gesamten Datensatz erstellen, aber in Zukunft wird dies erweitert, so dass das Plugin nur einen Netzwerknamen identifizieren muss und der Datensatz mit allen anderen bekannten Werten gefüllt wird.
Ein xchan-Datensatz ist immer erforderlich, um eine Verbindung herzustellen. Um eine Verbindung herzustellen, erstellen Sie einen abook-Eintrag mit den gewünschten Berechtigungen. Zusätzliche Informationen, die Ihr Plugin für die Kommunikation benötigt, können in der xconfig-Tabelle und/oder abconfig-Tabelle gespeichert werden, wenn es in den xchan- oder hubloc-Tabellen keine passende Tabellenspalte gibt.
Wenn eine Verbindung hergestellt wird, rufen wir normalerweise den Notifier (include/notifier.php) auf, um eine Nachricht an den entfernten Kanal zu senden. Dies ist an den Hook 'permissions_create' gebunden. Ihr Plugin muss dies verarbeiten, um eine „Follow“- oder „Make Friends“-Nachricht an das andere Netzwerk zu senden.
Anmerkungen: Die erste Stufe des zot lookup wird durch einen webfinger lookup ersetzt. Diese Arbeit ist in Arbeit. Ursprünglich war ein separater Lookup erforderlich, da Webfinger keine Nicht-SSL-Verbindungen zulässt. Um diese Einschränkung zu umgehen, werden wir zot-Lookups, die nicht auf SSL basieren (in der Regel Test- und Entwicklungsseiten), über den „alten“ XRD-basierten Webfinger anbieten.
Die Kernanwendung wird versuchen, xchan-Einträge für Projekte zu erstellen, die als Mitglieder des „offenen Webs“ identifiziert wurden; derzeit Hubzilla, Friendica, Diaspora, GNU-Social und Pump.io. Dies geschieht, damit Kommentare zwischen den Projektseiten weitergegeben werden können und das Netzwerk korrekt identifiziert werden kann. Ein Föderations-Plugin ist erforderlich, um eine vollständige Verbindung mit anderen Netzwerken herzustellen, aber Kommentare können auch an Seiten weitergeleitet werden, auf denen ein solches Plugin nicht installiert ist, damit es keine unerklärlichen Löcher in den Unterhaltungen gibt.
Die Kernanwendung muss auch die Möglichkeit bieten, Diaspora-Kommentare zu signieren, da diese ein spezielles Signierformat erfordern und vom Verfasser des Kommentars signiert werden müssen, unabhängig davon, ob dieser Kanal mit Diaspora föderiert ist. Der Eigentümer der Konversation kann mit Diaspora föderieren, so dass die Kommentare signiert werden müssen. Dies ist bedauerlich, aber notwendig.
Versenden von Nachrichten
Jedes Mal, wenn eine Nachricht gesendet wird (mit der einzigen Ausnahme der Verzeichniskommunikation), rufen wir den Notifier (include/notifier.php) auf und übergeben ihm die Art der Nachricht und im Allgemeinen einen Identifikator, um die Informationen, die gesendet werden, aus der Datenbank abzurufen (Artikel oder Konversationsdinge, private E-Mails, Aktualisierungen von Berechtigungen usw.). Der Notifier verfügt über mehrere Hooks, die von Plugins auf unterschiedliche Weise verwendet werden können, je nachdem, wie ihre Zustellschleife funktioniert. Für verschiedene Nachrichtentypen und komplexe Zustellungssituationen müssen Sie möglicherweise mehrere Hooks verwenden. Der „permissions_create“-Hook wurde bereits im ersten Abschnitt erwähnt. Es gibt auch eine „permissions_update“-Nachricht, wenn sich die Berechtigungen geändert haben und das andere Ende der Verbindung darüber informiert werden muss. Nur wenige Dienste werden dies bereitstellen oder handhaben (da ihre Berechtigungen statisch sind), aber es wird z. B. auch verwendet, um Nachrichten zur Aktualisierung von Profilen und Profilfotos zu senden, und Sie möchten dies vielleicht handhaben. Der nächste Plugin-Hook ist 'notifier_process'. Ihm wird ein Array übergeben, das den kompletten Status des Notifizierers enthält und einmal pro Notifiziereraufruf aufgerufen wird. Er enthält die vollständige Liste der Empfänger (mit jeweils gesetztem xchan_network).
Es gibt auch 'notifier_hub', dem wie 'notifier_process' der komplette Status des Antragstellers übergeben wird, aber der Unterschied besteht darin, dass er für jede einzelne Hub- oder eindeutige URL-Zustellung aufgerufen wird und auf den Typ hubloc_network abgestimmt werden kann. Die Hub-Zustellung ist wesentlich effizienter als die Empfängerzustellung, eignet sich aber möglicherweise nicht für alle Protokollstacks.
Ihr Plugin muss den Nachrichtenstatus und die Empfänger verstehen und das gesendete Element in das gewünschte Format übersetzen. Sie müssen auch den Datenschutz prüfen und die Kommunikation an alle außer den vorgesehenen Empfängern blockieren - wenn es sich um eine private Kommunikation handelt. Das Plugin wird an dieser Stelle die Nachricht oft in die Warteschlange stellen und die Warteschlangen-ID an den Melder zurückgeben.
Es gibt bereits Warteschlangen-Handler für einfache gepostete Daten. Wenn Sie einen Warteschlangeneintrag vom Typ 'post' erstellen, öffnen wir eine HTTP-POST-Anfrage und senden die bereitgestellten Daten und bestätigen den Erfolg oder Misserfolg. Sie können andere Kommunikationsformen erstellen, indem Sie einen anderen outq_driver-Typ angeben und die Verarbeitung von Warteschlangenanfragen selbst übernehmen. Wenn Sie verschiedene Fehlerzustände oder etwas anderes als Erfolg/Misserfolg bestätigen möchten, ist eine Zustellungsmeldung verfügbar. Für erweiterte Zustellungsberichte ist ebenfalls ein eigener Warteschlangentyp erforderlich. Der Basistyp „post“ behandelt nur Erfolg (erfolgreiche Kommunikation mit der Gegenstelle) und Misserfolg.
Empfang von Nachrichten
Für den Empfang von Nachrichten aus dem entfernten Netz ist wahrscheinlich ein „Empfangs“-Endpunkt oder -Modul erforderlich, der bzw. das für Ihr Netzwerk-Kommunikationsprotokoll vorgesehen ist. Dabei handelt es sich um eine URL-Route, die Ihr Plugin möglicherweise mit dem Hook 'module_loaded' registrieren muss. Ihr Modul übernimmt dann die Verantwortung für den Import aller Daten, die an diesem Endpunkt ankommen, und die Übersetzung in das für dieses Projekt erforderliche Format sowie die Speicherung der resultierenden Daten. Die von uns verwendete Grundstruktur ist ein erweiterbares Activitystream-Element, jedoch mit leicht abweichenden Feldnamen und mehreren optionalen Feldern. Sie kann leicht auf einen Activitystream abgebildet werden. Zusätzliche Daten können in der Tabelle „iconfig“ gespeichert werden. item_store() und item_store_update() werden im Allgemeinen verwendet, um die Daten zu speichern und entsprechende Benachrichtigungen zu senden. Ähnliche Möglichkeiten gibt es für private Post und Profilinformationen.
Verhaltenskodex für Mitwirkende
Unser Versprechen
Im Interesse der Förderung eines offenen und einladenden Umfelds verpflichten wir uns als Mitwirkende und Betreuer, die Teilnahme an unserem Projekt und unserer Gemeinschaft zu einer belästigungsfreien Erfahrung für jeden zu machen, unabhängig von Alter, Körpergröße, Behinderung, ethnischer Zugehörigkeit, Geschlechtsidentität und -ausdruck, Erfahrungsniveau, Nationalität, persönlichem Aussehen, Ethnie, Religion oder sexueller Identität und Orientierung.
Unsere Standards
Beispiele für Verhaltensweisen, die zur Schaffung eines positiven Umfelds beitragen umfassen:
-
Eine einladende und integrative Sprache verwenden
-
Respekt vor unterschiedlichen Standpunkten und Erfahrungen
-
Konstruktive Kritik anständig annehmen
-
Sich auf das konzentrieren, was für die Gemeinschaft am besten ist
-
Einfühlungsvermögen gegenüber anderen Mitgliedern der Gemeinschaft zeigen
Beispiele für inakzeptables Verhalten von Teilnehmern sind:
- Die Verwendung sexualisierter Sprache oder Bilder und unerwünschte sexuelle Aufmerksamkeit oder Annäherungsversuche
- Trolling, beleidigende/abwertende Kommentare und persönliche oder politische Angriffe
- Öffentliche oder private Belästigung
- Veröffentlichung privater Informationen anderer, wie z. B. einer physischen oder elektronischen Adresse, ohne ausdrückliche Erlaubnis
- sonstiges Verhalten, das in einem beruflichen Umfeld als unangemessen angesehen werden könnte
Unsere Verantwortlichkeiten
Die Projektbetreuer sind dafür verantwortlich, die Standards für akzeptables Verhalten zu klären, und es wird von ihnen erwartet, dass sie angemessene und faire Korrekturmaßnahmen ergreifen, wenn ein inakzeptables Verhalten festgestellt wird. Die Projektbetreuer haben das Recht und die Verantwortung, Kommentare, Commits, Code, Wiki-Edits, Issues und andere Beiträge, die nicht mit diesem Verhaltenskodex übereinstimmen, zu entfernen, zu bearbeiten oder abzulehnen, oder Beiträge, die sie als unangemessen, bedrohlich, beleidigend oder schädlich erachten, vorübergehend oder dauerhaft zu verbieten.
Geltungsbereich
Dieser Verhaltenskodex gilt sowohl innerhalb der Projektbereiche als auch im öffentlichen Umfeld, wenn eine Person das Projekt oder seine Gemeinschaft vertritt. Beispiele für das Repräsentieren eines Projekts oder einer Gemeinschaft sind die Verwendung einer offiziellen Projekt-E-Mail-Adresse, das Posten über ein offizielles Social-Media-Konto oder das Handeln als ernannter Vertreter bei einer Online- oder Offline-Veranstaltung. Die Repräsentation eines Projekts kann von den Projektbetreuern weiter definiert und präzisiert werden.
Durchsetzung
Fälle von beleidigendem, belästigendem oder anderweitig inakzeptablem Verhalten können beim Projektteam unter project@hubzilla.org gemeldet werden. Alle Beschwerden werden geprüft und untersucht und führen zu einer Reaktion, die als notwendig und den Umständen angemessen erachtet wird. Das Projektteam ist zur Vertraulichkeit gegenüber der Person, die einen Vorfall meldet, verpflichtet. Weitere Einzelheiten zu spezifischen Durchsetzungsrichtlinien können separat veröffentlicht werden.
Projektbetreuer, die den Verhaltenskodex nicht in gutem Glauben befolgen oder durchsetzen, können mit vorübergehenden oder dauerhaften Konsequenzen rechnen, die von anderen Mitgliedern der Projektleitung festgelegt werden.
Namensnennung
Dieser Verhaltenskodex ist eine Anpassung des Contributor Covenant, Version 1.4, verfügbar unter http://contributor-covenant.org/version/1/4.
Das Zot Protokoll
Was ist Zot?
Zot ist das revolutionäre Protokoll, das Hubzilla antreibt und die Kommunikation, das Identitätsmanagement und die Zugangskontrolle in einem vollständig dezentralisierten Netzwerk unabhängiger Websites, oft als „das Grid“ bezeichnet, ermöglicht. Die daraus resultierende Plattform ist ein robustes System, das den Datenschutz und die Sicherheit unterstützt und gleichzeitig die Art von umfangreichen Webdiensten ermöglicht, die normalerweise nur in zentralisierten, proprietären Lösungen zu finden sind.
Betrachten Sie dieses typische Szenario:
Jaquelina möchte Fotos von ihrem Blog unter jaquelina.org mit Roberto teilen, aber mit niemandem sonst. Roberto unterhält seinen eigenen Familien-Hub unter roberto.net auf einem völlig unabhängigen Server. Zot erlaubt Jaquelina, ihre Fotos mit einer Zugriffskontrollliste (ACL) zu veröffentlichen, die nur Roberto einschließt. Das bedeutet, dass Roberto die Fotos zwar sehen kann, wenn er ihren Blog besucht, sein Bruder Marco jedoch nicht, und auch kein anderes Familienmitglied, das ein Konto auf roberto.net hat.
Der Clou an diesem Szenario ist die Tatsache, dass Roberto sich nie auf Jaquelinas Website angemeldet hat. Stattdessen musste er sich nur einmal mit seinem Passwort auf seiner eigenen Website roberto.net anmelden. Wenn Roberto jaquelina.org besucht, wird er von ihrem Hub nahtlos authentifiziert, indem sein Server im Hintergrund abgefragt wird.
Es ist nicht ungewöhnlich, dass Server technische Probleme haben oder aus verschiedenen Gründen unzugänglich werden. Zot bietet Robustheit für Robertos Online-Aktivitäten, indem es ihm erlaubt, Klone seiner Online-Identität oder seines Kanals auf mehreren unabhängigen Hubs zu haben. Stellen Sie sich vor, dass Robertos Server aus irgendeinem Grund zusammenbricht und er sich dort nicht mehr einloggen kann. Er meldet sich einfach bei einem seiner Klone auf gadfly.com an, einer Website, die von seinem Freund Peter betrieben wird. Sobald er sich bei gadfly.com authentifiziert hat, kann Roberto Jaquelinas Blog wie zuvor ansehen, ohne dass Jaquelina zusätzlichen Zugang gewähren muss!
Kommunikation
Kommunikation und soziale Netzwerke sind ein wesentlicher Bestandteil des Grids. Jeder Kanal (und jeder Dienst, der von diesem Kanal bereitgestellt wird) kann die funktionsreiche soziale Kommunikation auf globaler Ebene in vollem Umfang nutzen. Diese Kommunikation kann öffentlich oder privat sein - und private Kommunikation umfasst nicht nur einen vollständig verschlüsselten Transport, sondern auch eine verschlüsselte Speicherung zum Schutz vor versehentlichem Schnüffeln und Offenlegung durch unseriöse Systemadministratoren und Internetdienstanbieter.
Zot unterstützt eine breite Palette von Hintergrunddiensten im Grid, von Freundschaftsvorschlägen bis hin zu Verzeichnisdiensten. Neue Inhalte und Datenaktualisierungen werden im Hintergrund zwischen den Hubs im gesamten Grid gemäß den Zugriffskontrolllisten und den von den Sender- und Empfängerkanälen festgelegten Berechtigungen weitergegeben. Die Daten werden auch zwischen einer beliebigen Anzahl von Kanalklonen synchronisiert, so dass Hub-Mitglieder auch dann auf Daten zugreifen und nahtlos weiter zusammenarbeiten können, wenn ihr primärer Hub nicht erreichbar oder offline ist.
Identität
Die Identitätsschicht von Zot ist einzigartig. Sie bietet ein unsichtbares Single Sign-On für alle Standorte im Grid.
Sie bietet auch eine nomadische Identität, so dass Ihre Kommunikation mit Freunden, Familie oder anderen Personen, mit denen Sie kommunizieren, nicht durch den Verlust Ihres primären Kommunikationsknotens beeinträchtigt wird - weder vorübergehend noch dauerhaft.
Die wichtigen Teile Ihrer Identität und Ihrer Beziehungen können auf einem USB-Stick oder Ihrem Laptop gesichert werden und jederzeit an einem beliebigen Knoten im Netz erscheinen - mit all Ihren Freunden und Vorlieben.
Entscheidend ist, dass diese nomadischen Instanzen synchron gehalten werden, so dass jede Instanz übernehmen kann, wenn eine andere gefährdet oder beschädigt ist. Dies schützt Sie nicht nur vor größeren Systemausfällen, sondern auch vor vorübergehender Überlastung der Website und staatlicher Manipulation oder Zensur.
Wir sind der Meinung, dass die nomadische Identität, die einmalige Anmeldung und die Dezentralisierung von Hubzilla ein hohes Maß an Widerstandsfähigkeit und Beständigkeit in die Internetkommunikation einbringen, die angesichts der weltweiten Tendenzen zur Zentralisierung von Unternehmen sowie der massenhaften und wahllosen staatlichen Überwachung und Zensur dringend benötigt werden.
Beim Durchsuchen des Netzes, beim Anzeigen von Kanälen und deren einzigartigen Inhalten, werden Sie nahtlos authentifiziert, sogar über völlig unterschiedliche Server-Hubs hinweg. Sie müssen keine Passwörter eingeben. Sie müssen nichts eintippen. Sie werden auf jeder neuen Seite, die Sie besuchen, einfach mit Ihrem Namen begrüßt.
Wie funktioniert das bei Zot? Wir nennen es „magic-auth“, weil Hubzilla die Details der Komplexität von Single-Sign-On-Logins und nomadischen Identitäten vor dem Surfen im Netz verbirgt. Dies ist eines der Designziele von Hubzilla: die Privatsphäre und die Freiheit im Internet zu erhöhen und gleichzeitig die Komplexität und die Langeweile zu reduzieren, die durch die Notwendigkeit entstehen, für jeden Besuch im Internet neue Passwörter und Anmeldenamen einzugeben. Sie melden sich nur einmal auf Ihrem Home-Hub (oder einem von Ihnen gewählten nomadischen Backup-Hub) an. Dadurch können Sie auf alle authentifizierten Dienste zugreifen, die überall im Netz angeboten werden - wie Einkaufen, Blogs, Foren und Zugang zu privaten Informationen. Ihr Passwort wird nicht auf tausend verschiedenen Websites gespeichert, sondern auf Servern, die Sie kontrollieren oder denen Sie vertrauen.
Sie können nicht zum Schweigen gebracht werden. Sie können nicht aus dem Netz entfernt werden, es sei denn, Sie selbst entscheiden sich dafür, es zu verlassen.
Zugangskontrolle
Die Identitätsschicht von Zot ermöglicht es Ihnen, fein abgestufte Berechtigungen für jeden Inhalt zu vergeben, den Sie veröffentlichen möchten - und diese Berechtigungen erstrecken sich über das gesamte Grid. Das ist so, als hätte man eine riesige Website, die aus einer Armee kleiner individueller Websites besteht - und bei der jeder Kanal im Grid seine Datenschutz- und Freigabepräferenzen für alle von ihm erstellten Webressourcen vollständig kontrollieren kann.
Derzeit unterstützt Hubzilla die Zugriffskontrolle für viele Datentypen, darunter Diskussionsbeiträge und -kommentare, Fotoalben, Veranstaltungen, Cloud-Dateien, Webseiten, Wikis und mehr. Jedes Objekt und die Art und Weise, wie und mit wem es geteilt wird, unterliegt vollständig Ihrer Kontrolle.
Diese Art der Kontrolle ist bei großen Unternehmensanbietern trivial, da sie die Benutzerdatenbank besitzen. Im Grid brauchen Sie keine riesige Benutzerdatenbank auf Ihrem Rechner - denn das Grid ist Ihre Benutzerdatenbank. Sie verfügt über eine im Grunde unendliche Kapazität (begrenzt durch die Gesamtzahl der Hubs, die im Internet online sind) und ist auf Hunderte, möglicherweise sogar Millionen von Computern verteilt.
Der Zugang kann für jede Ressource, jeden Kanal oder jede Gruppe von Kanälen gewährt oder verweigert werden - überall im Grid. Andere können auf Ihre Inhalte zugreifen, wenn Sie es ihnen erlauben, und sie müssen nicht einmal ein Konto in Ihrem Hub haben.
Technische Einführung
Zot ist ein JSON-basiertes Web-Framework zur Implementierung sicherer dezentraler Kommunikation und Dienste. Um diese Funktionalität bereitzustellen, erstellt Zot eine dezentralisierte, weltweit eindeutige Kennung für jeden Knotenpunkt im Netz. Dieser globale Identifikator ist nicht untrennbar mit dem DNS verbunden, wodurch die erforderliche Mobilität gewährleistet wird. Viele der bestehenden dezentralen Kommunikationsrahmen bieten zwar den Kommunikationsaspekt, aber keine Fernzugriffskontrolle und Authentifizierung. Außerdem basieren die meisten dieser Systeme auf dem „Webfinger“, der die Identität immer noch an Domänennamen bindet und keine nomadische Identität unterstützen kann.
Die Hauptprobleme, die Zot angeht, sind
- vollständig dezentralisierte Kommunikation
- Unabhängigkeit von DNS-basierter Identität
- Knotenmobilität
- nahtlose Fernauthentifizierung
- hohe Leistung
Wir werden uns auf DNS-basierte user@host-Adressen als „benutzerfreundlichen“ Mechanismus stützen, um anderen mitzuteilen, wo man sich befindet, nämlich auf einem benannten Host mit einem bestimmten Benutzernamen, und die Kommunikation mit DNS-Entitäten wird über TCP und das Web abgewickelt.
Das zugrundeliegende Protokoll bietet jedoch eine Abstraktionsschicht darüber, so dass ein Kommunikationsknoten (z. B. „Identität“) zu einem anderen DNS-Standort wechseln kann und sich (nach bestem Wissen und Gewissen) von Standortwechseln erholt und/oder bereits bestehende Kommunikationsbeziehungen aufrechterhält. Ein Nebeneffekt dieser Anforderung ist die Möglichkeit, von alternativen/mehreren DNS-Standorten und Dienstanbietern aus zu kommunizieren und dennoch eine einzige Online-Identität beizubehalten.
Wir nennen dieses Overlay-Netz das „Grid“. Die an dieses Netz angeschlossenen Server werden als „Hubs“ bezeichnet und können eine beliebige Anzahl von individuellen Identitäten unterstützen.
Eine Identität muss nicht unbedingt mit einer Person übereinstimmen. Sie ist lediglich etwas, das die Fähigkeit erfordert, innerhalb des Netzes zu kommunizieren.
Die Fähigkeit zur Wiederherstellung wird durch Kommunikation mit dem ursprünglichen Standort erreicht, wenn eine neue oder Ersatzidentität erstellt wird, oder als Rückgriff auf eine gespeicherte Datei, die die Identität und ihre Kontakte beschreibt, für den Fall, dass der alte Standort nicht mehr antwortet.
Zumindest kurzfristig hat die Mobilität bestehender Inhalte nicht die höchste Priorität. Dies kann zu einem späteren Zeitpunkt geschehen oder auch nicht. Die wichtigsten Dinge, die wir behalten wollen, sind Ihre Identität und Ihre Freunde.
Adressen, die von mehreren Personen gemeinsam genutzt werden, sind user@host und beschreiben die aktuellen lokalen Zugangsdaten für eine bestimmte Identität. Es handelt sich um DNS-basierte Adressen, die als Seed verwendet werden, um eine bestimmte Identität innerhalb des Netzes zu lokalisieren. Die Maschinenkommunikation bindet diese Adresse an eine weltweit eindeutige ID. Eine einzelne, weltweit eindeutige ID kann an eine beliebige Anzahl von DNS-Standorten angehängt oder gebunden werden. Sobald eine Identität einem DNS-Standort zugeordnet oder an diesen gebunden ist, besteht die Kommunikation nur noch aus der Kenntnis der weltweit eindeutigen Adresse und des derzeit verwendeten DNS (url) (um die aktuelle Kommunikation zurückzurufen und zu überprüfen/abzuschließen). Diese Konzepte werden in Zukunft noch genauer spezifiziert.
Damit eine Identität über Standorte hinweg bestehen bleibt, muss man in der Lage sein, Folgendes bereitzustellen oder wiederherzustellen
- die weltweit eindeutige ID für diese Identität
- den dieser Identität zugewiesenen privaten Schlüssel
- (falls der ursprüngliche Server nicht mehr existiert) ein Adressbuch mit Kontakten für diese Identität.
Diese Informationen können vom ursprünglichen Server über eine API exportiert und/oder auf eine Festplatte oder einen USB-Stick heruntergeladen werden.
Wir können auch versuchen, die Identität mit noch weniger Informationen wiederherzustellen, aber dies ist anfällig für Account-Hijacking und erfordert, dass Ihre Kontakte die Änderung bestätigen.
Um eine hochleistungsfähige Kommunikation zu ermöglichen, ist das Datenübertragungsformat für alle Aspekte von Zot JSON. XML-Kommunikation erfordert viel zu viel Overhead.
Die bidirektionale Verschlüsselung basiert auf RSA-Schlüsseln mit 4096 Bit, die im DER/ASN.1-Format unter Verwendung der PKCS#8-Kodierungsvariante ausgedrückt werden, mit AES-Verschlüsselung von Elementen mit variabler Länge oder großen Elementen. Die genauen Verschlüsselungsalgorithmen sind zwischen den Standorten verhandelbar.
Einige Aspekte der bekannten „Föderationsprotokolle“ (Webfinger, Salmon, Activitystreams, Portablecontacts usw.) können in zot verwendet werden, aber wir sind nicht an sie gebunden und werden auch nicht an sie gebunden sein. Das Hubzilla-Projekt versucht einige ziemlich neuartige Entwicklungen im Bereich der dezentralen Kommunikation, und wenn es notwendig sein sollte, von solchen „Standardprotokollen“ abzuweichen, werden wir dies ohne Fragen oder Zögern tun.
Um eine weltweit eindeutige ID zu erstellen, werden wir sie auf einem Whirlpool-Hash der Identitäts-URL des Ursprungsknotens und einer Pseudo-Zufallszahl basieren, was uns eine 256-Bit-ID mit einer extrem geringen Kollisionswahrscheinlichkeit liefern sollte (256 Bits entsprechen ungefähr 115 Quattuorviginitillionen oder 1,16 X 10^77 eindeutigen Zahlen). Diese wird in der Kommunikation als base64url-kodierte Zeichenfolge dargestellt. Wir werden uns jedoch nicht auf Wahrscheinlichkeiten verlassen, und die ID muss auch mit einem öffentlichen Schlüssel verbunden sein, wobei die Kryptographie mit öffentlichem Schlüssel verwendet wird, um eine Identitätsgarantie zu bieten, die nicht kopiert oder irgendwie im Whirlpool-Hash-Raum kollidiert wurde.
Durch die Verwendung der DNS als Grundlage für die ID wird ein weltweit eindeutiger Seed bereitgestellt, was nicht der Fall wäre, wenn die ID vollständig auf einer Pseudo-Zufallszahlengenerierung basieren würde.
Wir bezeichnen die kodierte, weltweit eindeutige uid-Zeichenkette als zot_uid
Da es mehr als einen DNS-Standort geben kann, der mit einer bestimmten zot_uid-Identität verknüpft/verbunden ist, sollten die Zustellungsprozesse an alle diese Standorte liefern, da wir nicht mit Sicherheit wissen, auf welche Hub-Instanz zu einem bestimmten Zeitpunkt zugegriffen werden kann. Wir werden jedoch einen DNS-Standort als „primär“ bezeichnen, der der bevorzugte Standort für die Anzeige von Webprofilinformationen sein wird.
Wir müssen auch die Möglichkeit bieten, den primären Standort auf einen neuen Standort zu ändern. Ein Nachschlagen von Informationen über den aktuellen primären Standort kann einen „Weiterleitungszeiger“ liefern, der uns anweist, unsere Einträge zu aktualisieren und alles an den neuen Standort zu verschieben. Es besteht auch die Möglichkeit, dass der Hauptstandort nicht mehr existiert und nicht mehr antwortet. In diesem Fall kann ein Ort, der bereits dieser zot_uid zugeordnet ist, die Kontrolle übernehmen und sich selbst als primär deklarieren. In beiden Fällen wird die primäre Bezeichnung automatisch bestätigt und verschoben. Es kann auch ein Antrag von einem primären Standort gestellt werden, der die Entfernung eines anderen Standorts verlangt.
Um eine zot_uid einem zweiten (oder tertiären) Standort zuzuordnen, ist ein sicherer Austausch erforderlich, bei dem überprüft wird, ob der neue Standort im Besitz des privaten Schlüssels für diese zot_uid ist. Die Sicherheit des privaten Schlüssels ist daher von grundlegender Bedeutung, um ein Hijacking von Identitäten zu verhindern.
Die Kommunikation erfordert dann
- zot_uid (Zeichenfolge)
- uid_sig
- callback (aktueller Standort Zot-Endpunkt url)
- callback_sig
- spec (int)
wird mit jeder Mitteilung übergeben. Bei spec handelt es sich um eine Revisionsnummer der geltenden Zot-Spezifikation, damit die Kommunikation mit Hubs, die ältere und möglicherweise inkompatible Protokollspezifikationen verwenden, aufrechterhalten werden kann. Die Kommunikation wird mit Hilfe eines gespeicherten öffentlichen Schlüssels verifiziert, der beim ersten Aufbau der Verbindung zu dieser zot_uid kopiert wurde.
Der Widerruf und Ersatz des Schlüssels muss vom primären Hub aus erfolgen. Die genaue Form hierfür wird noch ausgearbeitet, wird aber wahrscheinlich eine Benachrichtigung an alle anderen gebundenen Hubs sein, um „nach Hause zu telefonieren“ (zum primären Hub) und eine Kopie des neuen Schlüssels anzufordern. Diese Mitteilung sollte mit einem Standort- oder Hub-Schlüssel verifiziert werden, da der ursprüngliche Identitätsschlüssel kompromittiert worden sein könnte und nicht vertrauenswürdig ist.
Um Verwirrung zu vermeiden, sollte es für jeden Hub genau eine kanonische Url geben, damit diese indiziert und eindeutig referenziert werden kann.
Um Mehrdeutigkeit des Schemas zu vermeiden, wird dringend empfohlen, dass alle Adressen https mit einem „browser valid“-Zertifikat und einer einzigen gültigen Host-Komponente (entweder www.domain.ext oder domain.ext, aber nicht beides) sein sollten, die in der gesamten Kommunikation verwendet wird. Es können mehrere URLs lokal angegeben werden, aber es sollte nur eine einzige URL für die gesamte Zot-Kommunikation innerhalb des Grids verwendet werden.
Testinstallationen, die nicht mit dem öffentlichen Netz verbunden sind, können Nicht-SSL verwenden, aber der gesamte Datenverkehr, der über öffentliche Netze fließt, sollte vor Session-Hijacking geschützt sein, vorzugsweise mit einem „browsererkannten“ Zertifikat.
Wenn möglich, empfiehlt das Zot die Verwendung von „Batching“, um den Netzwerkverkehr zwischen zwei Hubs zu minimieren. Dies bedeutet, dass Standort A„ mehrere Nachrichten an Standort B“ in einer einzigen Transaktion senden kann und auch die Zustellung identischer Nachrichten an mehrere Empfänger im selben Hub konsolidiert werden kann.
Die Nachrichten selbst können während der Übertragung verschlüsselt werden oder auch nicht, je nach der privaten Natur der Nachrichten. SSL (dringend empfohlen) bietet eine bedingungslose Verschlüsselung des Datenstroms, allerdings macht es wenig Sinn, öffentliche Mitteilungen zu verschlüsseln, die als uneingeschränkt sichtbar eingestuft wurden. Die Verschlüsselung der Datenspeicherung und die sogenannte „Ende-zu-Ende-Verschlüsselung“ liegen außerhalb des Anwendungsbereichs des zot. Es wird davon ausgegangen, dass die Betreiber von Knotenpunkten angemessene Sicherheitsvorkehrungen treffen, um die Sicherheit ihrer Datenspeicher zu gewährleisten, und diese sind Funktionen der Anwendungs- und Standortintegrität im Gegensatz zur Protokollintegrität.
Nachrichten
In Anbetracht der zuvor aufgeführten Einschränkungen sollte eine Zot-Mitteilung daher ein json-Array aus einzelnen Nachrichten sein. Diese können innerhalb der gleichen Übertragung gemischt und kombiniert werden.
Jede Nachricht erfordert dann:
- Typ
- (optional) Empfängerliste
Das Fehlen einer Empfängerliste würde auf eine unverschlüsselte öffentliche Nachricht oder eine Nachricht auf Standortebene hinweisen. Die Empfängerliste würde ein Array von zot_uid mit einem individuellen Entschlüsselungsschlüssel und einer gemeinsamen iv enthalten. Der Entschlüsselungsschlüssel ist mit dem öffentlichen Schlüssel der Empfängeridentität verschlüsselt. Die iv wird mit dem privaten Schlüssel des Absenders verschlüsselt.
Alle Nachrichten sollten vom Absender digital signiert werden.
Der Typ kann einer der folgenden sein (diese Liste ist erweiterbar):
- Post (oder Aktivität)
- Identität
- authentifizieren
Identitätsnachrichten haben keine Empfänger und benachrichtigen den sozialen Graphen des Systems über eine Identitätsaktualisierung, bei der es sich um eine neue oder gelöschte Identität, einen neuen oder gelöschten Standort oder eine Änderung des primären Hubs handeln kann. Die Signatur für diese Nachrichten verwendet Systemschlüssel im Gegensatz zu identitätsspezifischen Schlüsseln.
Posts umfassen viele verschiedene Arten von Aktivitäten, wie z. B. Top-Level-Posts, Likes/Dislikes, Kommentare, Tagging-Aktivitäten usw. Diese Typen werden in der Nachrichtenstruktur angegeben.
Authentifizierungsnachrichten führen zu einer gegenseitigen Authentifizierung und einer Browserumleitung zu geschützten Ressourcen auf dem entfernten Hub, wie z. B. die Möglichkeit, Nachrichten von Wand zu Wand zu posten und private Fotoalben und Ereignisse einzusehen, usw.
Erkundung
Eine bekannte URL wird verwendet, um einen Hub auf Zot-Fähigkeiten und Identitätsabfragen zu untersuchen, einschließlich der Ermittlung von öffentlichen Schlüsseln, Profilstandorten, Profilfotos und dem primären Hub-Standort.
Der Speicherort für diesen Dienst ist /.well-known/zot-info - und muss im Stammverzeichnis der gewählten Domain verfügbar sein.
Um eine Abfrage durchzuführen, wird eine POST-Anfrage mit den folgenden Parametern an den Erkennungsort gestellt:
Erforderlich:
Adresse => eine Adresse auf dem Zielsystem wie „john“
Optional:
target => die Zot „guid“ des Beobachters für die Auswertung der Berechtigungen
target_sig => eine RSA-Signatur (base64url-kodiert) der guid
key => Der öffentliche Schlüssel, der zur Verifizierung der Signatur benötigt wird
token => eine vom anfragenden Dienst gewählte Zeichenfolge (möglicherweise zufällig). Falls vorhanden, wird ein Eintrag im entdeckten Paket mit der Bezeichnung „signed_token“ bereitgestellt, der aus der base64url_kodierten RSA-Signatur der Verkettung der Zeichenkette „token.“ und dem bereitgestellten Token unter Verwendung des privaten Schlüssels des entdeckten Kanals besteht. Dies kann mit dem bereitgestellten „key“-Eintrag verifiziert werden und bietet die Sicherheit, dass der Server im Besitz des privaten Schlüssels für die ermittelte Identität ist. Nach dem 01.01.2017 ist es erforderlich, dass ein Server ein signed_token bereitstellt , wenn ein Token in der Anfrage angegeben wurde.
Wenn kein Ziel angegeben wird, sind die zurückgegebenen Berechtigungen generische Berechtigungen für unbekannte oder unauthentifizierte Beobachter
Beispiel eines Erkennungspakets für 'mike@zothub.com'
{
"success": true,
"signed_token": "KBJrKTq1qrctNuxF3GwVh3GAGRqmgkirlXANPcJZAeWlvSt_9TMV097slR4AYnYCBEushbVqHEJ9Rb5wHTa0HzMbfRo8cRdl2yAirvvv5d98dtwHddQgX1jB0xEypXtmIYMdPGDLvhI1RNdIBhHkkrRcNreRzoy4xD--HM6m1W0-A8PJJJ9BcNxmGPcBtLzW08wzoP9trJ3M7DQ6Gkk6j7iwVsyApw1ZBaDvabGTdc_SFV-Iegtqw3rjzT_xXWsfzMlKBy-019MYn_KS-gu23YzjvGu5tS_zDfkQb8DMUlPLz5yyxM0yOMlUDtG2qQgIJAU2O0X6T5xDdJ6mtolNyhepg845PvFDEqBQGMIH1nc47CNumeudDi8IWymEALhjG_U8KAK7JVlQTJj2EKUb0au1g6fpiBFab5mmxCMtZEX3Jreyak5GOcFFz-WpxuXJD9TdSoIvaBfBFOoJnXkg2zE4RHXeQzZ2FotmrbBG5dm8B-_6byYGoHBc08ZsWze1K96JIeRnLpBaj6ifUDcVHxZMPcGHHT27dvU2PNbgLiBjlAsxhYqkhN5qOHN8XBcg2KRjcMBaI3V0YMxlzXz5MztmZq3fcB1p-ccIoIyMPMzSj3yMB7J9CEU2LYPSTHMdPkIeDE6GaCkQKviaQQJQde346tK_YjA2k7_SOBmvPYE",
"guid": "sebQ-IC4rmFn9d9iu17m4BXO-kHuNutWo2ySjeV2SIW1LzksUkss12xVo3m3fykYxN5HMcc7gUZVYv26asx-Pg",
"guid_sig": "Llenlbl4zHo6-g4sa63MlQmTP5dRCrsPmXHHFmoCHG63BLq5CUZJRLS1vRrrr_MNxr7zob_Ykt_m5xPKe5H0_i4pDj-UdP8dPZqH2fqhhx00kuYL4YUMJ8gRr5eO17vsZQ3XxTcyKewtgeW0j7ytwMp6-hFVUx_Cq08MrXas429ZrjzaEwgTfxGnbgeQYQ0R5EXpHpEmoERnZx77VaEahftmdjAUx9R4YKAp13pGYadJOX5xnLfqofHQD8DyRHWeMJ4G1OfWPSOlXfRayrV_jhnFlZjMU7vOdQwHoCMoR5TFsRsHuzd-qepbvo3pzvQZRWnTNu6oPucgbf94p13QbalYRpBXKOxdTXJrGdESNhGvhtaZnpT9c1QVqC46jdfP0LOX2xrVdbvvG2JMWFv7XJUVjLSk_yjzY6or2VD4V6ztYcjpCi9d_WoNHruoxro_br1YO3KatySxJs-LQ7SOkQI60FpysfbphNyvYMkotwUFI59G08IGKTMu3-GPnV1wp7NOQD1yzJbGGEGSEEysmEP0SO9vnN45kp3MiqbffBGc1r4_YM4e7DPmqOGM94qksOcLOJk1HNESw2dQYWxWQTBXPfOJT6jW9_crGLMEOsZ3Jcss0XS9KzBUA2p_9osvvhUKuKXbNztqH0oZIWlg37FEVsDs_hUwUJpv2Ar09k4",
"key": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7QCwvuEIwCHjhjbpz3Oc\ntyei/Pz9nDksNbsc44Cm8jxYGMXsTPFXDZYCcCB5rcAhPPdZSlzaPkv4vPVcMIrw\n5cdX0tvbwa3rNTng6uFE7qkt15D3YCTkwF0Y9FVZiZ2Ko+G23QeBt9wqb9dlDN1d\nuPmu9BLYXIT/JXoBwf0vjIPFM9WBi5W/EHGaiuqw7lt0qI7zDGw77yO5yehKE4cu\n7dt3SakrXphL70LGiZh2XGoLg9Gmpz98t+gvPAUEotAJxIUqnoiTA8jlxoiQjeRK\nHlJkwMOGmRNPS33awPos0kcSxAywuBbh2X3aSqUMjcbE4cGJ++/13zoa6RUZRObC\nZnaLYJxqYBh13/N8SfH7d005hecDxWnoYXeYuuMeT3a2hV0J84ztkJX5OoxIwk7S\nWmvBq4+m66usn6LNL+p5IAcs93KbvOxxrjtQrzohBXc6+elfLVSQ1Rr9g5xbgpub\npSc+hvzbB6p0tleDRzwAy9X16NI4DYiTj4nkmVjigNo9v2VPnAle5zSam86eiYLO\nt2u9YRqysMLPKevNdj3CIvst+BaGGQONlQalRdIcq8Lin+BhuX+1TBgqyav4XD9K\nd+JHMb1aBk/rFLI9/f2S3BJ1XqpbjXz7AbYlaCwKiJ836+HS8PmLKxwVOnpLMbfH\nPYM8k83Lip4bEKIyAuf02qkCAwEAAQ==\n-----END PUBLIC KEY-----\n",
"name": "Mike Macgirvin",
"name_updated": "2012-12-06 04:59:13",
"address": "mike@zothub.com",
"photo_mimetype": "image/jpeg",
"photo": "https://zothub.com/photo/profile/l/1",
"photo_updated": "2012-12-06 05:06:11",
"url": "https://zothub.com/channel/mike",
"connections_url": "https://zothub.com/poco/mike",
"target": "",
"target_sig": "",
"searchable": false,
"permissions": {
"view_stream": true,
"view_profile": true,
"view_photos": true,
"view_contacts": true,
"view_storage": true,
"view_pages": true,
"send_stream": false,
"post_wall": false,
"post_comments": false,
"post_mail": false,
"post_photos": false,
"tag_deliver": false,
"chat": false,
"write_storage": false,
"write_pages": false,
"delegate": false
},
"profile": {
"description": "Freedom Fighter",
"birthday": "0000-05-14",
"next_birthday": "2013-05-14 00:00:00",
"gender": "Male",
"marital": "It's complicated",
"sexual": "Females",
"locale": "",
"region": "",
"postcode": "",
"country": "Australia"
},
"locations": [
{
"host": "zothub.com",
"address": "mike@zothub.com",
"primary": true,
"url": "https://zothub.com",
"url_sig": "eqkB_9Z8nduBYyyhaSQPPDN1AhSm5I4R0yfcFxPeFpuu17SYk7jKD7QzvmsyahM5Kq7vDW6VE8nx8kdFYpcNaurqw0_IKI2SWg15pGrhkZfrCnM-g6A6qbCv_gKCYqXvwpSMO8SMIO2mjQItbBrramSbWClUd2yO0ZAceq3Z_zhirCK1gNm6mGRJaDOCuuTQNb6D66TF80G8kGLklv0o8gBfxQTE12Gd0ThpUb5g6_1L3eDHcsArW_RWM2XnNPi_atGNyl9bS_eLI2TYq0fuxkEdcjjYx9Ka0-Ws-lXMGpTnynQNCaSFqy-Fe1aYF7X1JJVJIO01LX6cCs-kfSoz29ywnntj1I8ueYldLB6bUtu4t7eeo__4t2CUWd2PCZkY3PKcoOrrnm3TJP5_yVFV_VpjkcBCRj3skjoCwISPcGYrXDufJxfp6bayGKwgaCO6QoLPtqqjPGLFm-fbn8sVv3fYUDGilaR3sFNxdo9mQ3utxM291XE2Pd0jGgeUtpxZSRzBuhYeOybu9DPusID320QbgNcbEbEImO8DuGIxuVRartzEXQF4WSYRdraZzbOqCzmU0O55P836JAfrWjgxTQkXlYCic-DBk-iE75JeT72smCtZ4AOtoFWCjZAABCw42J7JELY9APixZXWriKtjy6JI0G9d3fs6r7SrXr1JMy0",
"callback": "https://zothub.com/post",
"sitekey": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1IWXwd/BZuevq8jzNFoR\n3VkenduQH2RpR3Wy9n4+ZDpbrUKGJddUGm/zUeWEdKMVkgyllVA/xHdB7jdyKs1X\nuIet9mIdnzvhdLO/JFD5hgbNG2wpSBIUY6aSNeCFTzszqXmuSXMW5U0Ef5pCbzEA\nnhoCoGL1KAgPqyxnGKUlj7q2aDwC9IRNtAqNyFQL67oT91vOQxuMThjlDhbR/29Q\ncYR4i1RzyahgEPCnHCPkT2GbRrkAPjNZAdlnk9UesgP16o8QB3tE2j50TVrbVc/d\nYRbzC56QMPP9UgUsapNeSJBHji75Ip/E5Eg/kfJC/HEQgyCqjCGfb7XeUaeQ7lLO\nqc7CGuMP+Jqr/cE54/aSHg8boTwxkMp11Ykb+ng17fl57MHTM2RJ99qZ1KBkXezR\nuH1lyvjzeJPxEFr9rkUqc4GH74/AgfbgaFvQc8TS7ovEa5I/7Pg04m7vLSEYc6UF\nYJYxXKrzmZT2TDoKeJzaBBx5MFLhW19l68h9dQ8hJXIpTP0hJrpI+Sr6VUAEfFQC\ndIDRiFcgjz6j7T/x8anqh63/hpsyf2PMYph1+4/fxtSCWJdvf+9jCRM8F1IDfluX\n87gm+88KBNaklYpchmGIohbjivJyru41CsSLe0uinQFvA741W00w6JrcrOAX+hkS\nRQuK1dDVwGKoIY85KtTUiMcCAwEAAQ==\n-----END PUBLIC KEY-----\n"
}
],
"site": {
"url": "https://zothub.com",
"directory_mode": "primary",
"directory_url": "https://zothub.com/dirsearch"
}
}
Discovery gibt ein JSON-Array mit den folgenden Komponenten zurück:
'success' => (true oder false) Operation war erfolgreich, wenn true. Andernfalls kann eine optionale 'message' vorhanden sein, die die Fehlerursache angibt.
'signed_token' => Wenn ein Token-Parameter in der Anfrage angegeben wurde, wird ihm der Text 'token.' vorangestellt und dann mit dem privaten Schlüssel des Kanals RSA-signiert und base64url-kodiert und als 'signed_token' zurückgegeben.
guid' => die guid der Adresse auf dem Zielsystem
guid_sig“ => die mit base64url kodierte RSA-Signatur der guid, signiert mit dem mit dieser guid verbundenen privaten Schlüssel.
'key' => der öffentliche Schlüssel, der mit dieser guid verknüpft ist
name“ => Name des Kanals
name_updated' => Zeitstempel im MySQL-Stil '2012-01-01 00:00:00', als der Name zuletzt geändert wurde (UTC)
address' => „webbie“ oder user@host-Adresse, die mit diesem Kanal verbunden ist
photo' => URL eines Profilfotos für diesen Kanal (idealerweise 175x175)
photo_mimetype“ => Inhaltstyp des Profilfotos
photo_updated' => Zeitstempel im MySQL-Stil, wann das Foto zuletzt aktualisiert wurde (UTC)
'url' => Standort der Kanal-Homepage
'connections_url' => Speicherort der URL für tragbare Kontakte (erweitert für zot) für diesen Kanal
target' => wenn ein Berechtigungsziel angegeben wurde, wird es gespiegelt
'target_sig' => wenn ein Berechtigungsziel angegeben wurde, wird die Signatur gespiegelt.
'searchable' => (true oder false) true bedeutet, dass dieser Eintrag in einem Verzeichnis gesucht werden kann
Berechtigungen
'permissions' => erweiterbares Array von Berechtigungen, die für dieses Ziel geeignet sind, Werte sind true oder false
Berechtigungen können beinhalten:
- view_stream
- view_profile
- view_photos
- view_contacts
- view_storage
- view_pages
- send_stream
- post_wall
- post_comments
- post_mail
- post_photos
- tag_deliver
- chat
- write_storage
- write_pages
- delegate
Profil
'Profil' => Array mit wichtigen Profilfeldern
- description
- birthday YYYY-MM-DD , all fields are optional, any field (such as year) may be zero
- next_birthday => MySQL datetime string representing the next upcoming birthday, converted from the channel's default timezone to UTC.
- gender (free form)
- marital (marital status)
- sexual (preference)
- locale (city)
- region (state)
- postcode
- country
Standorte
'locations' => Array der registrierten Standorte (DNS-Standorte), von denen aus dieser Kanal sichtbar sein kann oder gebucht werden kann
Jeder Standort ist ein Array aus
'host' => DNS-Hostname, z.B. example.com
'address' => die Webbie- oder user@host-Kennung, die mit diesem Standort verbunden ist
'primary' => (true oder false), ob dies der primäre Ort für diesen Kanal ist, an dem Dateien und Webseiten im Allgemeinen zu finden sind
url“ => Url des Stammverzeichnisses dieses DNS-Speicherorts, z. B. https://example. com
url_sig' => base64url kodierte RSA-Signatur der URL, signiert mit dem privaten Schlüssel des Kanals
'callback' => Zot-Kommunikationsendpunkt auf dieser Site, normalerweise https://example.com/post
sitekey' => öffentlicher Schlüssel dieser Seite/Host
Standort
'site' => Array, das die Verzeichnisrolle der Site angibt, die auf diese Anfrage antwortet
url' => url dieser Site z.B. https://example. com
directory_mode' => eines von 'primary', 'secondary', 'normal' oder 'standalone'
directory_url' => wenn es sich um einen Verzeichnisserver oder einen Einzelplatz handelt, die URL für das Verzeichnissuchmodul
Magic Auth
Der so genannte „magic auth“ erfolgt durch einen speziellen Austausch. Auf dem entfernten Computer wird eine Umleitung zum Zot-Endpunkt mit speziellen GET-Parametern vorgenommen.
Endpunkt: https://example.com/post/name
wobei 'name' die linke Seite des Kanal-Webbies ist, zum Beispiel 'mike', wenn der Webbie 'mike@zothub.com' ist.
Zusätzlich werden vier Parameter übergeben:
- auth => die Webbie der Person, die den Zugang beantragt
- dest => die gewünschte Ziel-URL (urlencodiert)
- sec => eine zufällige Zeichenkette, die auch lokal gespeichert wird, um sie während der Verifizierungsphase zu verwenden.
- version => die Zot-Revision
Wenn dieses Paket empfangen wird, wird eine Zot-Nachricht an die auth-Identität gesendet:
{
"type":"auth_check",
"sender":{
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q",
"url":"http:\/\/podunk.edu",
"url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY"
},
"recipients":{
{
"guid":"ZHSqb3yGar3TYV_o9S-JkD-6o_V4DhUcxtv0VeyX8Kj_ENHPI_M3SyAUucU835-mIayGMmTpqJz3ujPkcavVhA",
"guid_sig":"JsAAXigNghTkkbq8beGMJjj9LBKZn28hZ-pHSsoQuwYWvBJ2lSnfc4r9l--WgO6sucH-SR6RiBo78eWn1cZrh_cRMu3x3LLx4y-tjixg-oOOgtZakkBg4vmOhkKPkci0mFtzvUrpY4YHySqsWTuPwRx_vOlIYIGEY5bRXpnkNCoC8J4EJnRucDrgSARJvA8QQeQQL0H4mWEdGL7wlsZp_2VTC6nEMQ48Piu6Czu5ThvLggGPDbr7PEMUD2cZ0jE4SeaC040REYASq8IdXIEDMm6btSlGPuskNh3cD0AGzH2dMciFtWSjmMVuxBU59U1I6gHwcxYEV6BubWt_jQSfmA3EBiPhKLyu02cBMMiOvYIdJ3xmpGoMY1Cn__vhHnx_vEofFOIErb6nRzbD-pY49C28AOdBA5ffzLW3ss99d0A-6GxZmjsyYhgJu4tFUAa7JUl84tMbq28Tib0HW6qYo6QWw8K1HffxcTpHtwSL5Ifx0PAoGMJsGDZDD1y_r9a4vH5pjqmGrjL3RXJJUy-m4eLV5r7xMWXsxjqu3D8r04_dcw4hwwexpMT1Nwf8CTB0TKb8ElgeOpDFjYVgrqMYWP0XdhatcFtAJI7gsS-JtzsIwON9Kij66-VAkqy_z1IXI0ziyqV1yapSVYoUV1vMScRZ_nMqwiB5rEDx-XLfzko"
}
}
"callback":"\/post",
"version":1,
"secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467",
"secret_sig":"eKV968b1sDkOVdSMi0tLRtOhQw4otA8yFKaVg6cA4I46_zlAQGbFptS-ODiZlSAqR7RiiZQv4E2uXCKar52dHo0vvNKbpOp_ezWYcwKRu1shvAlYytsflH5acnDWL-FKOOgz5zqLLZ6cKXFMoR1VJGG_Od-DKjSwajyV9uVzTry58Hz_w0W2pjxwQ-Xv11rab5R2O4kKSW77YzPG2R5E6Q7HN38FrLtyWD_ai3K9wlsFOpwdYC064dk66X7BZtcIbKtM6zKwMywcfJzvS5_0U5yc5GGbIY_lY6SViSfx9shOKyxkEKHfS29Ynk9ATYGnwO-jnlMqkJC7t149H-sI9hYWMkLuCzaeLP56k2B2TmtnYvE_vHNQjzVhTwuHCIRVr-p6nplQn_P3SkOpYqPi3k_tnnOLa2d3Wtga8ClEY90oLWFJC3j2UkBf_VEOBNcg-t5XO3T-j9O4Sbk96k1Qoalc-QlznbGx4bOVsGkRBBMiH4YUqiiWB_OkFHtdqv7dqGeC-u-B4u9IxzYst46vvmyA3O-Q4APSZ1RY8ITUH0jLTbh6EAV7Oki8pIbOg0t56p-8RlanOZqmFvR-grVSc7Ak1ZcD8NACmvidUpa1B7WEvRcOeffx9lype0bt5XenDnMyx6szevwxZIiM8qGM2lsSk4fu8HI9cW0mLywzZT0"
}
auth_check-Nachrichten MÜSSEN verschlüsselt werden. Diese Nachricht wird an die Herkunftsseite gesendet, die prüft, ob das „secret“ mit dem „sec“ übereinstimmt, das sie ursprünglich übermittelt hat. Sie prüft auch secret_sig, das mit dem privaten Schlüssel des Zielkanals signiert und mit base64url kodiert ist. Wenn alles in Ordnung ist, wird ein json-Paket zurückgegeben:
{
"success":1,
"confirm":"q0Ysovd1uQRsur2xG9Tg6bC23ynzw0191SkVd7CJcYoaePy6e_v0vnmPg2xBUtIaHpx_aSuhgAkd3aVjPeaVBmts6aakT6a_yAEy7l2rBydntu2tvrHhoVqRNOmw0Q1tI6hwobk1BgK9Pm0lwOeAo8Q98BqIJxf47yO9pATa0wktOg6a7LMogC2zkkhwOV5oEqjJfeHeo27TiHr1e2WaphfCusjmk27V_FAYTzw05HvW4SPCx55EeeTJYIwDfQwjLfP4aKV-I8HQCINt-2yxJvzH7Izy9AW-7rYU0Il_gW5hrhIS5MTM12GBXLVs2Ij1CCLXIs4cO0x6e8KEIKwIjf7iAu60JPmnb_fx4QgBlF2HLw9vXMwZokor8yktESoGl1nvf5VV5GHWSIKAur3KPS2Tb0ekNh-tIk9u-xob4d9eIf6tge_d3aq1LcAtrDBDLk8AD0bho5zrVuTmZ9k-lBVPr_DRHSV_dlpu088j3ThaBsuV1olHK3vLFRhYCDIO0CqqK5IuhqtRNnRaqhlNN6fQUHpXk2SwHiJ2W36RCYMTnno6ezFk_tN-RA2ly-FomNZoC5FPA9gFwoJR7ZmVFDmUeK3bW-zYTA5vu15lpBPnt7Up_5rZKkr0WQVbhWJmylqOuwuNWbn3SrMQ8rYFZ23Tv300cOfKVgRBaePWQb4"
}
"confirm“ ist in diesem Fall die base64url-kodierte RSA-Signatur der Verkettung von ‚secret‘ mit dem base64url-kodierten Whirlpool-Hash der Quellguid und guid_sig; signiert mit dem privaten Schlüssel des Quellkanals. Dies verhindert, dass ein Manin-the-Middle ein betrügerisches Erfolgspaket einfügt. Nach Empfang und erfolgreicher Überprüfung dieses Pakets wird die Zielseite zur ursprünglichen Ziel-URL umgeleitet und zeigt eine erfolgreiche Fernanmeldung an.
Zot-Strukturen
Zot-Signaturen
Alle signierten Daten in Zot werden durch eine RSA-Signaturoperation mit dem privaten Schlüssel des Initiators erzeugt. Das binäre Ergebnis wird dann für den Transport mit base64url kodiert.
Zot-Verschlüsselung
Die Verschlüsselung erfolgt derzeit mit AES256CTR. Weitere Algorithmen KÖNNEN unterstützt werden. Ein 32-Oktett-Schlüssel und ein 16-Oktett-Initialisierungsvektor werden nach dem Zufallsprinzip erzeugt. Die gewünschten Daten werden dann mit diesen generierten Zeichenketten verschlüsselt und das Ergebnis base64url-kodiert. Dann wird ein Array erstellt:
-
data
Die base64url-kodierten verschlüsselten Daten
-
alg
Der gewählte Algorithmus, in diesem Fall die Zeichenkette „aes256ctr“.
-
key
Der zufällig erzeugte Schlüssel, RSA-verschlüsselt mit dem öffentlichen Schlüssel des Empfängers, und das Ergebnis base64url-kodiert
-
iv
Der zufällig erzeugte Initialisierungsvektor, RSA-verschlüsselt mit dem öffentlichen Schlüssel des Empfängers, und das Ergebnis base64url-kodiert
Grundlegendes Zot-Paket
Wird verwendet, um einen Dialog mit einer anderen Zot-Site einzuleiten. Dieses Paket KANN verschlüsselt sein. Das Vorhandensein eines Array-Elements 'iv' zeigt an, dass eine Verschlüsselung vorgenommen wurde. Beim Senden eines 'auth_check'-Pakets MUSS dieses Paket verschlüsselt werden, wobei der öffentliche Schlüssel der Zielsite (der Site-Schlüssel, im Gegensatz zu einem Absenderschlüssel) verwendet wird.
{
"type":"notify",
"sender":{
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q",
"url":"http:\/\/podunk.edu",
"url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY"
"sitekey":"-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxTeIwXZWrw/S+Ju6gewh
LgkKnNNe2uCUqCqMZoYgJar3T5sHCDhvXc4dDCbDkxVIaA/+V1mURtBV60a3IGjn
OAO0W0XGGLe2ED7G5o9U8T9mVGq8Mauv0v1oQ5wIR1gEAhBavkQ2OUGuF/YKn2nj
HlKsv9HzUAHpcDMUe3Uklc2RhQbMcnJxEgkyjCkDyrTtCZzISkTAocHvpCG1KSog
njUZdiz9UWxvM4rCFkCJvQU4RwRZJb7GA9ul+9JrF7NvUQTx8csRP2weBk1E9yyj
wbe187E0eVj9RXX2Mx3mYhgrTdodxLOVMSXZLg1/SMpeFFl7QBhuM0SiOPg8a7Et
e2iNA/RD4WiUFqCDfafasRa1TOozOm7LA+08lkAh5PeQPJsJbrX0wVVft++Y+5/z
BvcUOP73vcbz7j5hJ7HLsbQtye/UUCfODBFybuDqRM84Aet8rjZohX7vukXdMD4I
2HuB7pjR4uIfyYr0J63ANkvbsn8LR+RnirmHrK5H/OgxxjXcfYbGEQgFxvxhF6lA
FpMu6Do4dx3CIb6pRmZ8bjSImXexJ0BSo9n3gtrz0XYLecsYFlQ9+QQjm83qxyLb
M23in0xqMVsyQvzjNkpImrO/QdbEFRIIMee83IHq+adbyjQR49Z2hNEIZhkLPc3U
2cJJ2HkzkOoF2K37qwIzk68CAwEAAQ==
-----END PUBLIC KEY-----
"
},
"recipients":{
{
"guid":"lql-1VnxtiO4-WF0h72wLX1Fu8szzHDOXgQaTbELwXW77k8AKFfh-hYr70vqMrc3SSvWN-Flrc5HFhRTWB7ICw",
"guid_sig":"PafvEL0VpKfxATxlCqDjfOeSIMdmpr3iU7X-Sysa1h5LzDpjSXsjO37tYZL-accb1M5itLlfnW5epkTa5I4flsW21zSY1A2jCuBQUTLLGV7rNyyBy7lgqJUFvAMRx0TfXzP9lcaPqlM9T1tA6jfWOsOmkdzwofGeXBnsjGfjsO2xdGYe6vwjOU0DSavukvzDMnOayB9DekpvDnaNBTxeGLM45Skzr7ZEMcNF7TeXMbnvpfLaALYEKeQs9bGH-UgAG8fBWgzVAzeBfx_XSR1rdixjyiZGP0kq0h35SlmMPcEjliodOBFwMXqpXFB7Ibp4F6o6te2p2ErViJccQVG8VNKB6SbKNXY6bhP5zVcVsJ-vR-p4xXoYJJvzTN7yTDsGAXHOLF4ZrXbo5yi5gFAlIrTLAF2EdWQwxSGyLRWKxG8PrDkzEzX6cJJ0VRcLh5z6OI5QqQNdeghPZbshMFMJSc_ApCPi9_hI4ZfctCIOi3T6bdgTNKryLm5fhy_eqjwLAZTGP-aUBgLZpb1mf2UojBn6Ey9cCyq-0T2RWyk-FcIcbV4qJ-p_8oODqw13Qs5FYkjLr1bGBq82SuolkYrXEwQClxnrfKa4KYc2_eHAXPL01iS9zVnI1ySOCNJshB97Odpooc4wk7Nb2Fo-Q6THU9zuu0uK_-JbK7IIl6go2qA"
},
},
"callback":"\/post",
"version":"1.2",
"encryption":{
"aes256ctr"
},
"secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467",
"secret_sig":"0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q"
}
type
Der Nachrichtentyp: notify, purge, refresh, force_refresh, auth_check, ping oder pickup. Der Inhalt der Pakete variiert je nach Nachrichtentyp. Hier wird das notify-Paket beschrieben.
callback
Eine Zeichenkette, die an die URL angehängt wird und den Zot-Kommunikationsendpunkt auf diesem System identifiziert. In der Regel ist dies die Zeichenfolge „/post“.
version
Die Kennung des Zot-Protokolls, damit künftige Protokollrevisionen nebeneinander bestehen können.
encryption
Array der unterstützten Verschlüsselungsalgorithmen, geordnet nach abnehmender Präferenz. Wenn keine kompatiblen Verschlüsselungsmethoden angegeben sind, MÜSSEN Anwendungen „aes256cbc“ verwenden.
secret
Eine 64-stellige Zeichenkette, die von der sendenden Seite zufällig generiert wird.
secret_sig
Die RSA-Signatur des Geheimnisses, signiert mit dem privaten Schlüssel des Absenders.
sender
Ein Array aus vier Komponenten, die eine tragbare Identität liefern. Wir können die angegebene URL kontaktieren und ein Zot-Infopaket herunterladen, um den öffentlichen Schlüssel des Absenders zu erhalten, und diesen zur Überprüfung der Absender-Guid und der Signaturen der Entsende-URL verwenden.
-
guid
In der Regel eine 64 Zeichen lange base64url-kodierte Zeichenfolge. Sie wird erzeugt, wenn eine Identität erstellt wird, und es wird versucht, dass sie eindeutig ist; dies ist jedoch nicht erforderlich.
-
guid_sig
Die RSA-Signatur der guid, signiert mit dem privaten Schlüssel des Absenders und base64url-kodiert.
-
url
Die Basis-URL des Ortes, von dem dieser Beitrag stammt.
-
url_sig
Die RSA-Signatur der url, signiert mit dem privaten Schlüssel des Absenders und base64url kodiert.
-
sitekey
Der öffentliche Schlüssel der in der Url angegebenen Website
recipients
Wird nur für private Nachrichten verwendet. Ein Array von Umschlag-Empfängern. Jeder Empfänger wird durch ein Array aus guid und guid_sig dargestellt. Wenn Empfänger angegeben sind, wird das gesamte Paket auch mit einem ausgehandelten kryptografischen Algorithmus oder 'aes256cbc' gekapselt, wenn keiner ausgehandelt werden konnte.
-
guid
Die guid eines privaten Empfängers.
-
guid_sig
Die RSA-Signatur der guid, signiert mit dem privaten Schlüssel des Empfängers und base64url-kodiert
Zot API
Many existing social applications and tools can interface directly using the Twitter/StatusNet API, which is available using the 'twitter_api' addon.
This document describes the native API; which allows direct programmatic access to several internal data structures and libraries extending beyond the basic social interface.
The API endpoints detailed below are relative to api/z/1.0
, meaning that if an API is listed as channel/stream
the full API URL is https://hub.hubzilla.hu/api/z/1.0/channel/stream
.
channel/export/basic
Export basic channel data
Options: - sections comma-separated list of data types to export
- posts if true, return default sections plus 3 months of posts
If no sections are requested, the following sections are returned: channel, connections, config, apps, chatrooms, events, webpages, mail, wikis
Files and large collections of posts may run into memory limits; these must generally be requested separately.
channel/stream
Fetch channel conversation items
network/stream
Fetch network conversation items
files
List file storage (attach DB)
GET /api/z/1.0/files
Options:
- filehash return only entries matching hash (exactly)
- filename return only entries matching filename (substring)
- filetype return only entries matching filetype/mimetype (substring)
- start start at record (default 0)
- records number of records to return or 0 for unlimited
Example:
curl -u mychannel:mypassword https://xyz.macgirvin.com/api/z/1.0/files -d filetype=multipart/mixed
Returns:
{
"success": true,
"results": [
{
"id": "1",
"aid": "1",
"uid": "2",
"hash": "44ee8b2a1a7f36dea07b93b7747a2383a1bc0fdd08339e8928bfcbe45f65d939",
"filename": "Profile Photos",
"filetype": "multipart/mixed",
"filesize": "0",
"revision": "0",
"folder": "",
"os_storage": "1",
"is_dir": "1",
"is_photo": "0",
"flags": "0",
"created": "2016-01-02 21:51:17",
"edited": "2016-01-02 21:51:17",
"allow_cid": "",
"allow_gid": "",
"deny_cid": "",
"deny_gid": ""
},
{
"id": "12",
"aid": "1",
"uid": "2",
"hash": "71883f1fc64af33889229cbc79c5a056deeec5fc277d765f182f19073e1b2998",
"filename": "Cover Photos",
"filetype": "multipart/mixed",
"filesize": "0",
"revision": "0",
"folder": "",
"os_storage": "1",
"is_dir": "1",
"is_photo": "0",
"flags": "0",
"created": "2016-01-15 00:24:33",
"edited": "2016-01-15 00:24:33",
"allow_cid": "",
"allow_gid": "",
"deny_cid": "",
"deny_gid": ""
},
{
"id": "16",
"aid": "1",
"uid": "2",
"hash": "f48f7ec3278499d1dd86b72c3207beaaf4717b07df5cc9b373f14d7aad2e1bcd",
"filename": "2016-01",
"filetype": "multipart/mixed",
"filesize": "0",
"revision": "0",
"folder": "",
"os_storage": "1",
"is_dir": "1",
"is_photo": "0",
"flags": "0",
"created": "2016-01-22 03:24:55",
"edited": "2016-01-22 03:26:57",
"allow_cid": "",
"allow_gid": "",
"deny_cid": "",
"deny_gid": ""
}
]
}
filemeta
Export file metadata for any uploaded file
filedata
Provides the ability to download a file from cloud storage in chunks
GET /api/z/1.0/filedata
Required:
- file_id attach.hash of desired file ('begins with' match)
Optional:
- start starting byte of returned data in file (counting from 0)
- length length (prior to base64 encoding) of chunk to download
Returns:
attach (DB) structure with base64 encoded 'content' comprised of the desired chunk
Example:
https://xyz.macgirvin.com/api/z/1.0/filedata?f=&file_id=9f5217770fd&start=0&length=48
Returns:
{
"attach": {
"id": "107",
"aid": "1",
"uid": "2",
"hash": "9f5217770fd55d563bd77f84d534d8e119a187514bbd391714626cd9c0e60207",
"creator": "pgcJx1IQjuPkx8aI9qheJlBMZzJz-oTPjHy3h5pWlOVOriBO_cSiUhhqwhuZ74TYJ8_ECO3pPiRMWC0q8YPCQg",
"filename": "pcxtopbm.c",
"filetype": "application/octet-stream",
"filesize": "3934",
"revision": "0",
"folder": "",
"flags": "0",
"is_dir": "0",
"is_photo": "0",
"os_storage": "1",
"os_path": "",
"display_path": "",
"content": "LyogcGN4dG9wYm0uYyAtIGNvbnZlcnQgUEMgcGFpbnRicnVzaCAoLnBjeCkgZmls",
"created": "2016-07-24 23:13:01",
"edited": "2016-07-24 23:13:01",
"allow_cid": "",
"allow_gid": "",
"deny_cid": "",
"deny_gid": "",
"start": 0,
"length": 48
}
}
file/export
file
albums
Description: list photo albums
GET /api/z/1.0/albums
Output:
text - textual name
total - number of photos in this album
url - web URL
urlencode - textual name, urlencoded
bin2hex - textual name using bin2hex (which is used in the web URL link)
Example:
{
"success": true,
"albums": [
{
"text": "/",
"total": "2",
"url": "https://xyz.macgirvin.com/photos/hubzilla/album/",
"urlencode": "",
"bin2hex": ""
},
{
"text": "2016-01",
"total": "6",
"url": "https://xyz.macgirvin.com/photos/hubzilla/album/323031362d3031",
"urlencode": "2016-01",
"bin2hex": "323031362d3031"
},
{
"text": "2016-02",
"total": "7",
"url": "https://xyz.macgirvin.com/photos/hubzilla/album/323031362d3032",
"urlencode": "2016-02",
"bin2hex": "323031362d3032"
},
{
"text": "Cover Photos",
"total": "5",
"url": "https://xyz.macgirvin.com/photos/hubzilla/album/436f7665722050686f746f73",
"urlencode": "Cover+Photos",
"bin2hex": "436f7665722050686f746f73"
},
{
"text": "Profile Photos",
"total": "26",
"url": "https://xyz.macgirvin.com/photos/hubzilla/album/50726f66696c652050686f746f73",
"urlencode": "Profile+Photos",
"bin2hex": "50726f66696c652050686f746f73"
}
]
}
photos
list photo metadata
photo
group
GET /api/z/1.0/group
Description: list privacy groups
Returns: DB tables of all privacy groups.
To use with API group_members, provide either 'group_id' from the id element returned in this call, or 'group_name' from the gname returned in this call.
[
{
"id": "1",
"hash": "966c946394f3e2627bbb8a55026b5725e582407098415c02f85232de3f3fde76Friends",
"uid": "2",
"visible": "0",
"deleted": "0",
"gname": "Friends"
},
{
"id": "2",
"hash": "852ebc17f8c3ed4866f2162e384ded0f9b9d1048f93822c0c84196745f6eec66Family",
"uid": "2",
"visible": "1",
"deleted": "0",
"gname": "Family"
},
{
"id": "3",
"hash": "cc3cb5a7f9818effd7c7c80a58b09a189b62efa698a74319117babe33ee30ab9Co-workers",
"uid": "2",
"visible": "0",
"deleted": "0",
"gname": "Co-workers"
}
]
group_members
GET /api/z/1.0/group_members
Required:
group_id or group_name
Returns:
group_member+abook+xchan (DB join) for each member of the privacy group
[
{
"id": "1",
"uid": "2",
"gid": "1",
"xchan": "pgcJx1IQjuPkx8aI9qheJlBMZzJz-oTPjHy3h5pWlOVOriBO_cSiUhhqwhuZ74TYJ8_ECO3pPiRMWC0q8YPCQg",
"abook_id": "2",
"abook_account": "1",
"abook_channel": "2",
"abook_xchan": "pgcJx1IQjuPkx8aI9qheJlBMZzJz-oTPjHy3h5pWlOVOriBO_cSiUhhqwhuZ74TYJ8_ECO3pPiRMWC0q8YPCQg",
"abook_my_perms": "218555",
"abook_their_perms": "0",
"abook_closeness": "0",
"abook_created": "2016-01-02 21:16:26",
"abook_updated": "2016-01-02 21:16:26",
"abook_connected": "0000-00-00 00:00:00",
"abook_dob": "0000-00-00 00:00:00",
"abook_flags": "0",
"abook_blocked": "0",
"abook_ignored": "0",
"abook_hidden": "0",
"abook_archived": "0",
"abook_pending": "0",
"abook_unconnected": "0",
"abook_self": "1",
"abook_feed": "0",
"abook_profile": "",
"abook_incl": "",
"abook_excl": "",
"abook_instance": "",
"xchan_hash": "pgcJx1IQjuPkx8aI9qheJlBMZzJz-oTPjHy3h5pWlOVOriBO_cSiUhhqwhuZ74TYJ8_ECO3pPiRMWC0q8YPCQg",
"xchan_guid": "lql-1VnxtiO4-WF0h72wLX1Fu8szzHDOXgQaTbELwXW77k8AKFfh-hYr70vqMrc3SSvWN-Flrc5HFhRTWB7ICw",
"xchan_guid_sig": "PafvEL0VpKfxATxlCqDjfOeSIMdmpr3iU7X-Sysa1h5LzDpjSXsjO37tYZL-accb1M5itLlfnW5epkTa5I4flsW21zSY1A2jCuBQUTLLGV7rNyyBy7lgqJUFvAMRx0TfXzP9lcaPqlM9T1tA6jfWOsOmkdzwofGeXBnsjGfjsO2xdGYe6vwjOU0DSavukvzDMnOayB9DekpvDnaNBTxeGLM45Skzr7ZEMcNF7TeXMbnvpfLaALYEKeQs9bGH-UgAG8fBWgzVAzeBfx_XSR1rdixjyiZGP0kq0h35SlmMPcEjliodOBFwMXqpXFB7Ibp4F6o6te2p2ErViJccQVG8VNKB6SbKNXY6bhP5zVcVsJ-vR-p4xXoYJJvzTN7yTDsGAXHOLF4ZrXbo5yi5gFAlIrTLAF2EdWQwxSGyLRWKxG8PrDkzEzX6cJJ0VRcLh5z6OI5QqQNdeghPZbshMFMJSc_ApCPi9_hI4ZfctCIOi3T6bdgTNKryLm5fhy_eqjwLAZTGP-aUBgLZpb1mf2UojBn6Ey9cCyq-0T2RWyk-FcIcbV4qJ-p_8oODqw13Qs5FYkjLr1bGBq82SuolkYrXEwQClxnrfKa4KYc2_eHAXPL01iS9zVnI1ySOCNJshB97Odpooc4wk7Nb2Fo-Q6THU9zuu0uK_-JbK7IIl6go2qA",
"xchan_pubkey": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA18JB76lyP4zzL/y7BCej\neJnfZIWZNtM3MZvI1zEVMWmmwOS+u/yH8oPwyaDk4Y/tnj8GzMPj1lCGVRcd8EJa\nNrCMd50HODA5EsJtxpsOzRcILYjOcTtIAG1K4LtKqELi9ICAaFp0fNfa+Jf0eCek\nvPusx2/ORhy+o23hFoSMhL86o2gmaiRnmnA3Vz4ZMG92ieJEDMXt9IA1EkIqS4y5\nBPZfVPLD1pv8iivj+dtN1XjwplgjUbtxmU0/Ej808nHppscRIqx/XJ0XZU90oNGw\n/wYoK2EzJlPbRsAkwNqoFrAYlr5HPpn4BJ2ebFYQgWBUraD7HwS5atsQEaxGfO21\nlUP0+lDg9t3CXvudDj0UG1jiEKbVIGA+4aG0GN2DSC5AyRq/GRxqyay5W2vQbAZH\nyvxPGrZFO24I65g3pjhpjEsLqZ4ilTLQoLMs0drCIcRm5RxMUo4s/LMg16lT4cEk\n1qRtk2X0Sb1AMQQ2uRXiVtWz77QHMONEYkf6OW4SHbwcv5umvlv69NYEGfCcbgq0\nAV7U4/BWztUz/SWj4r194CG43I9I8dmaEx9CFA/XMePIAXQUuABfe1QMOR6IxLpq\nTHG1peZgHQKeGz4aSGrhQkZNNoOVNaZoIfcvopxcHDTZLigseEIaPPha4WFYoKPi\nUPbZ5o8gTLc750uzrnb2jwcCAwEAAQ==\n-----END PUBLIC KEY-----\n",
"xchan_photo_mimetype": "image/png",
"xchan_photo_l": "https://xyz.macgirvin.com/photo/profile/l/2",
"xchan_photo_m": "https://xyz.macgirvin.com/photo/profile/m/2",
"xchan_photo_s": "https://xyz.macgirvin.com/photo/profile/s/2",
"xchan_addr": "teller@xyz.macgirvin.com",
"xchan_url": "https://xyz.macgirvin.com/channel/teller",
"xchan_connurl": "https://xyz.macgirvin.com/poco/teller",
"xchan_follow": "https://xyz.macgirvin.com/follow?f=&url=%s",
"xchan_connpage": "",
"xchan_name": "Teller",
"xchan_network": "zot",
"xchan_instance_url": "",
"xchan_flags": "0",
"xchan_photo_date": "2016-10-19 01:26:50",
"xchan_name_date": "2016-01-02 21:16:26",
"xchan_hidden": "0",
"xchan_orphan": "0",
"xchan_censored": "0",
"xchan_selfcensored": "0",
"xchan_system": "0",
"xchan_pubforum": "0",
"xchan_deleted": "0"
},
{
"id": "12",
"uid": "2",
"gid": "1",
"xchan": "xuSMUYxw1djBB97qXsbrBN1nzJH_gFwQL6pS4zIy8fuusOfBxNlMiVb4h_q5tOEvpE7tYf1EsryjNciMuPIj5w",
"abook_id": "24",
"abook_account": "1",
"abook_channel": "2",
"abook_xchan": "xuSMUYxw1djBB97qXsbrBN1nzJH_gFwQL6pS4zIy8fuusOfBxNlMiVb4h_q5tOEvpE7tYf1EsryjNciMuPIj5w",
"abook_my_perms": "218555",
"abook_their_perms": "218555",
"abook_closeness": "80",
"abook_created": "2016-01-27 00:48:43",
"abook_updated": "2016-12-04 17:16:58",
"abook_connected": "2016-12-04 17:16:58",
"abook_dob": "0001-01-01 00:00:00",
"abook_flags": "0",
"abook_blocked": "0",
"abook_ignored": "0",
"abook_hidden": "0",
"abook_archived": "0",
"abook_pending": "0",
"abook_unconnected": "0",
"abook_self": "0",
"abook_feed": "0",
"abook_profile": "debb5236efb1626cfbad33ccb49892801e5f844aa04bf81f580cfa7d13204819",
"abook_incl": "",
"abook_excl": "",
"abook_instance": "",
"xchan_hash": "xuSMUYxw1djBB97qXsbrBN1nzJH_gFwQL6pS4zIy8fuusOfBxNlMiVb4h_q5tOEvpE7tYf1EsryjNciMuPIj5w",
"xchan_guid": "d5EMLlt1tHHZ0dANoA7B5Wq9UgXoWcFS9-gXOkL_AAejcPApoQRyxfHTuu8DoTbUaO-bYmX5HPuWuK9PHyqNmA",
"xchan_guid_sig": "CVWEMRPtzI1YcHfnnWHTuv3H964OAmSElgUfxMoX6RdQdxNpqb_POirpVuyP8s3W17mVCfO5V9IAjkg5iKcqCk6YcvOD_egmMy-AnM9TC1kKndQHw55CunD82Q8K_xBNSXkSROizcNkKh9DVLjJPFjW1AqtI4njkZ3EMgrWqnbFRM1qPToUoCY9zM3tEMHoAD9YX1zP90wl40LzfN-dtcNWpSBbiz9owou62uzLbN7mrCwKOMlXLjwwGswRnxIsEnb3O-FXOs8hs0mArKe9snq1-BKeD16LyzxgwlpVLElzIJZGEZGtMdIJgeRzKuBvPjsOIpQ1yAkuOpFJ3nGCM-IPOIIjAmyVl5zD3xPVcxxpZlJRn5fG1Y-gnqTgsrEQCA7M6XPWQdrdHU4akZfyUyFJDhv3uM-jon9VzrYTBw68R0WA-1Z8WafEHA4qh5OWAj85lUarwhr7iTiEckH51ypPCPs6VbT6Pw7yMaxfjFOcipashQagx0tfOlDhE5dQANOXKASFtH1J9-CZY2MQdLPQ6u54d5whuHKMGaJ0V68pnmZ2rOn7g344Ah2WCJrm17jj60QsRMorqRFj7GMdPIA1XB8Wrk88MuYOe3Dhyuu6ZWKI7YTWJS690ZVkKUqAiNHqj0W86DtaiPUc_mmGR0fHl4Gksnko3WmCFv9q2X2E",
"xchan_pubkey": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoj2xCJktBA8Ww7Hp+ZNL\nrNuQpo8UB/bfvRkIy+yua3xpF1TuXcnAH61kyRz8vXgOu/l2CyxQbIoaGslCV5Sy\n8JKeNXe+IilUdSSEjMIwCPfSPsYnMHsSnHWmPmclvJwEtQUKOZmW5mMuVBvXy7D2\njomFwc69AYphdyys6eQ7Dcn6+FRBiQbyMprZ5lxyVW+O4DuXVNa3ej2ebx0gCJZ4\ntTIlBoKwEey91dY+FyKVFjdwfNczpmL7LgmZXqcVx+MG3mYgibwdVMiXVj5X06cs\nV9hJ5Xi+Aklsv/UWJtjw9FVt7y9TLptnhh4Ra6T/MDmnBBIAkOR7P/X8cRv078MT\nl0IMsP0RJcDEtTLtwHFVtDs6p52KDFqclKWbqmxmxqV3OTPVYtArRGIzgnJi/5ur\nHRr5G6Cif7QY3UowsIOf78Qvy28LwSbdymgBAWwPPKIviXWxGO+9kMWdmPSUQrWy\nK0+7YA9P9fBUFfn9Hc+p8SJQmQ6OAqLwrDGiPSOlGaNrbEqwqLGgIpXwK+lEFcFJ\n3SPOjJRWdR2whlMxvpwX+39+H7dWN3vSa3Al4/Sq7qW8yW2rYwf+eGyp4Z0lRR+8\nJxFMCwZkSw5g14YdlikAPojv5V1c6KuA5ieg8G1hwyONV7A4JHPyEdPt0W0TZi6C\nCOVkPaC3xGrguETZpJfVpwUCAwEAAQ==\n-----END PUBLIC KEY-----\n",
"xchan_photo_mimetype": "image/png",
"xchan_photo_l": "https://xyz.macgirvin.com/photo/9da63aa910ea14e1501ee1a749d181a6-4",
"xchan_photo_m": "https://xyz.macgirvin.com/photo/9da63aa910ea14e1501ee1a749d181a6-5",
"xchan_photo_s": "https://xyz.macgirvin.com/photo/9da63aa910ea14e1501ee1a749d181a6-6",
"xchan_addr": "cloner@xyz.macgirvin.com",
"xchan_url": "http://abc.macgirvin.com/channel/cloner",
"xchan_connurl": "http://abc.macgirvin.com/poco/cloner",
"xchan_follow": "https://xyz.macgirvin.com/follow?f=&url=%s",
"xchan_connpage": "",
"xchan_name": "Karen",
"xchan_network": "zot",
"xchan_instance_url": "",
"xchan_flags": "0",
"xchan_photo_date": "2016-03-31 19:59:20",
"xchan_name_date": "2016-01-26 23:23:42",
"xchan_hidden": "0",
"xchan_orphan": "0",
"xchan_censored": "0",
"xchan_selfcensored": "0",
"xchan_system": "0",
"xchan_pubforum": "0",
"xchan_deleted": "0"
}
]
xchan
An xchan is a global location independent channel and is the primary record for a network identity. It may refer to channels on other websites, networks, or services.
GET /api/z/1.0/xchan
Required: one of [ address, hash, guid ] as GET parameters
Returns a portable xchan structure
Example: https://xyz.macgirvin.com/api/z/1.0/xchan?f=&address=mike@macgirvin.com
Returns:
{
"hash": "jr54M_y2l5NgHX5wBvP0KqWcAHuW23p1ld-6Vn63_pGTZklrI36LF8vUHMSKJMD8xzzkz7s2xxCx4-BOLNPaVA",
"guid": "sebQ-IC4rmFn9d9iu17m4BXO-kHuNutWo2ySjeV2SIW1LzksUkss12xVo3m3fykYxN5HMcc7gUZVYv26asx-Pg",
"guid_sig": "Llenlbl4zHo6-g4sa63MlQmTP5dRCrsPmXHHFmoCHG63BLq5CUZJRLS1vRrrr_MNxr7zob_Ykt_m5xPKe5H0_i4pDj-UdP8dPZqH2fqhhx00kuYL4YUMJ8gRr5eO17vsZQ3XxTcyKewtgeW0j7ytwMp6-hFVUx_Cq08MrXas429ZrjzaEwgTfxGnbgeQYQ0R5EXpHpEmoERnZx77VaEahftmdjAUx9R4YKAp13pGYadJOX5xnLfqofHQD8DyRHWeMJ4G1OfWPSOlXfRayrV_jhnFlZjMU7vOdQwHoCMoR5TFsRsHuzd-qepbvo3pzvQZRWnTNu6oPucgbf94p13QbalYRpBXKOxdTXJrGdESNhGvhtaZnpT9c1QVqC46jdfP0LOX2xrVdbvvG2JMWFv7XJUVjLSk_yjzY6or2VD4V6ztYcjpCi9d_WoNHruoxro_br1YO3KatySxJs-LQ7SOkQI60FpysfbphNyvYMkotwUFI59G08IGKTMu3-GPnV1wp7NOQD1yzJbGGEGSEEysmEP0SO9vnN45kp3MiqbffBGc1r4_YM4e7DPmqOGM94qksOcLOJk1HNESw2dQYWxWQTBXPfOJT6jW9_crGLMEOsZ3Jcss0XS9KzBUA2p_9osvvhUKuKXbNztqH0oZIWlg37FEVsDs_hUwUJpv2Ar09k4",
"pubkey": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7QCwvuEIwCHjhjbpz3Oc\ntyei/Pz9nDksNbsc44Cm8jxYGMXsTPFXDZYCcCB5rcAhPPdZSlzaPkv4vPVcMIrw\n5cdX0tvbwa3rNTng6uFE7qkt15D3YCTkwF0Y9FVZiZ2Ko+G23QeBt9wqb9dlDN1d\nuPmu9BLYXIT/JXoBwf0vjIPFM9WBi5W/EHGaiuqw7lt0qI7zDGw77yO5yehKE4cu\n7dt3SakrXphL70LGiZh2XGoLg9Gmpz98t+gvPAUEotAJxIUqnoiTA8jlxoiQjeRK\nHlJkwMOGmRNPS33awPos0kcSxAywuBbh2X3aSqUMjcbE4cGJ++/13zoa6RUZRObC\nZnaLYJxqYBh13/N8SfH7d005hecDxWnoYXeYuuMeT3a2hV0J84ztkJX5OoxIwk7S\nWmvBq4+m66usn6LNL+p5IAcs93KbvOxxrjtQrzohBXc6+elfLVSQ1Rr9g5xbgpub\npSc+hvzbB6p0tleDRzwAy9X16NI4DYiTj4nkmVjigNo9v2VPnAle5zSam86eiYLO\nt2u9YRqysMLPKevNdj3CIvst+BaGGQONlQalRdIcq8Lin+BhuX+1TBgqyav4XD9K\nd+JHMb1aBk/rFLI9/f2S3BJ1XqpbjXz7AbYlaCwKiJ836+HS8PmLKxwVOnpLMbfH\nPYM8k83Lip4bEKIyAuf02qkCAwEAAQ==\n-----END PUBLIC KEY-----\n",
"photo_mimetype": "image/jpeg",
"photo_l": "https://xyz.macgirvin.com/photo/350b74555c04429148f2e12775f6c403-4",
"photo_m": "https://xyz.macgirvin.com/photo/350b74555c04429148f2e12775f6c403-5",
"photo_s": "https://xyz.macgirvin.com/photo/350b74555c04429148f2e12775f6c403-6",
"address": "mike@macgirvin.com",
"url": "https://macgirvin.com/channel/mike",
"connurl": "https://macgirvin.com/poco/mike",
"follow": "https://macgirvin.com/follow?f=&url=%s",
"connpage": "https://macgirvin.com/connect/mike",
"name": "Mike Macgirvin",
"network": "zot",
"instance_url": "",
"flags": "0",
"photo_date": "2012-12-06 05:06:11",
"name_date": "2012-12-06 04:59:13",
"hidden": "1",
"orphan": "0",
"censored": "0",
"selfcensored": "0",
"system": "0",
"pubforum": "0",
"deleted": "0"
}
item/update
Create or update an item (post, activity, webpage, etc.)
Usage: POST /api/z/1.0/item/update
Description: item/update posts an item (typically a conversation item or post, but can be any item) using form input.
Required:
- body
text/bbcode contents by default.
Optional:
- $_FILES['media']
uploaded media file to include with post
- title
title of post/item
- contact_allow
array of xchan.xchan_hash allowed to view this item
- group_allow
array of group.hash allowed to view this item
- contact_deny
array of xchan.xchan_hash not allowed to view this item
- group_deny
array of group.hash not allowed to view this item
- coord
geographic coordinates
- location
freefrom location
- expire
datetime this post will expire or be removed
- mimetype
mimetype if not text/bbcode
- parent
item.id of parent to this post (makes it a comment)
- parent_mid
alternate form of parent using message_id
- remote_xchan
xchan.xchan_hash of this message author if not the channel owner
- consensus
boolean set to true if this is a consensus or voting item (default false)
- nocomment
boolean set to true if comments are to be disabled (default false)
- origin
do not use this without reading the code
- namespace
persistent identity for a remote network or service
- remote_id
message_id of this resource on a remote network or service
- message_id
message_id of this item (leave unset to generate one)
- created
datetime of message creation
- post_id
existing item.id if this is an edit operation
- app
application or network name to display with item
- category
comma separated categories for this item
- webpage
item.page_type if not 0
- pagetitle
for webpage and design elements, the 'page name'
- layout_mid
item.mid of layout for this design element
- plink
permalink for this item if different than the default
- verb
activitystream verb for this item/activity
- obj_type
activitystream object type for this item/activity
Example:
curl -u mychannel:mypassword https://xyz.macgirvin.com/api/z/1.0/item/update -d body="hello world"
Returns:
{
"success": true,
"item_id": "2245",
"item": {
"id": "2245",
"mid": "14135cdecf6b8e3891224e4391748722114da6668eebbcb56fe4667b60b88249@xyz.macgirvin.com",
"aid": "1",
"uid": "2",
"parent": "2245",
"parent_mid": "14135cdecf6b8e3891224e4391748722114da6668eebbcb56fe4667b60b88249@xyz.macgirvin.com",
"thr_parent": "14135cdecf6b8e3891224e4391748722114da6668eebbcb56fe4667b60b88249@xyz.macgirvin.com",
"created": "2016-12-03 20:00:12",
"edited": "2016-12-03 20:00:12",
"expires": "0001-01-01 00:00:00",
"commented": "2016-12-03 20:00:12",
"received": "2016-12-03 20:00:12",
"changed": "2016-12-03 20:00:12",
"comments_closed": "0001-01-01 00:00:00",
"owner_xchan": "pgcJx1IQjuPkx8aI9qheJlBMZzJz-oTPjHy3h5pWlOVOriBO_cSiUhhqwhuZ74TYJ8_ECO3pPiRMWC0q8YPCQg",
"author_xchan": "pgcJx1IQjuPkx8aI9qheJlBMZzJz-oTPjHy3h5pWlOVOriBO_cSiUhhqwhuZ74TYJ8_ECO3pPiRMWC0q8YPCQg",
"source_xchan": "",
"mimetype": "text/bbcode",
"title": "",
"body": "hello world",
"html": "",
"app": "",
"lang": "",
"revision": "0",
"verb": "http://activitystrea.ms/schema/1.0/post",
"obj_type": "http://activitystrea.ms/schema/1.0/note",
"obj": "",
"tgt_type": "",
"target": "",
"layout_mid": "",
"postopts": "",
"route": "",
"llink": "https://xyz.macgirvin.com/display/14135cdecf6b8e3891224e4391748722114da6668eebbcb56fe4667b60b88249@xyz.macgirvin.com",
"plink": "https://xyz.macgirvin.com/channel/mychannel/?f=&mid=14135cdecf6b8e3891224e4391748722114da6668eebbcb56fe4667b60b88249@xyz.macgirvin.com",
"resource_id": "",
"resource_type": "",
"attach": "",
"sig": "sa4TOQNfHtV13HDZ1tuQGWNBpZp-nWhT2GMrZEmelXxa_IvEepD2SEsCTWOBqM8OKPJLfNy8_i-ORXjrOIIgAa_aT8cw5vka7Q0C8L9eEb_LegwQ_BtH0CXO5uT30e_8uowkwzh6kmlVg1ntD8QqrGgD5jTET_fMQOIw4gQUBh40GDG9RB4QnPp_MKsgemGrADnRk2vHO7-bR32yQ0JI-8G-eyeqGaaJmIwkHoi0vXsfjZtU7ijSLuKEBWboNjKEDU89-vQ1c5Kh1r0pmjiDk-a5JzZTYShpuhVA-vQgEcADA7wkf4lJZCYNwu3FRwHTvhSMdF0nmyv3aPFglQDky38-SAXZyQSvd7qlABHGCVVDmYrYaiq7Dh4rRENbAUf-UJFHPCVB7NRg34R8HIqmOKq1Su99bIWaoI2zuAQEVma9wLqMoFsluFhxX58KeVtlCZlro7tZ6z619-dthS_fwt0cL_2dZ3QwjG1P36Q4Y4KrCTpntn9ot5osh-HjVQ01h1I9yNCj6XPgYJ8Im3KT_G4hmMDFM7H9RUrYLl2o9XYyiS2nRrf4aJHa0UweBlAY4zcQG34bw2AMGCY53mwsSArf4Hs3rKu5GrGphuwYX0lHa7XEKMglwBWPWHI49q7-oNWr7aWwn1FnfaMfl4cQppCMtKESMNRKm_nb9Dsh5e0",
"diaspora_meta": "",
"location": "",
"coord": "",
"public_policy": "",
"comment_policy": "contacts",
"allow_cid": "",
"allow_gid": "",
"deny_cid": "",
"deny_gid": "",
"item_restrict": "0",
"item_flags": "0",
"item_private": "0",
"item_origin": "1",
"item_unseen": "0",
"item_starred": "0",
"item_uplink": "0",
"item_consensus": "0",
"item_wall": "1",
"item_thread_top": "1",
"item_notshown": "0",
"item_nsfw": "0",
"item_relay": "0",
"item_mentionsme": "0",
"item_nocomment": "0",
"item_obscured": "0",
"item_verified": "1",
"item_retained": "0",
"item_rss": "0",
"item_deleted": "0",
"item_type": "0",
"item_hidden": "0",
"item_unpublished": "0",
"item_delayed": "0",
"item_pending_remove": "0",
"item_blocked": "0"
}
}
item/full
Get all data associated with an item
abook
Connections
abconfig
Connection metadata (such as permissions)
perm_allowed
Check a permission for a given xchan
Hooks
Hooks ermöglichen es Plugins/Addons, sich an vielen Stellen in den Code „einzuhaken“ und das Verhalten zu ändern oder anderweitig unabhängige Aktionen durchzuführen, wenn eine Aktivität stattfindet oder auf bestimmte Datenstrukturen zugegriffen wird. Es gibt viele Hooks, die es Ihnen ermöglichen, sich an fast jeder Stelle in die Software einzuklinken und etwas anderes zu tun als das, was standardmäßig vorgesehen ist. Diesen Hooks werden zwei Variablen übergeben. Die erste ist die App-Struktur, die Details über den gesamten Zustand der Seitenanforderung enthält, während wir die resultierende Seite aufbauen. Die zweite ist eindeutig für den spezifischen Hook, der aufgerufen wird, und liefert spezifische Details darüber, was in der Software zum Zeitpunkt des Aufrufs des Hooks passiert.
Erstellter Index aller Hooks und der Dateien, die sie aufrufen
module_mod_aftercontent Allgemeiner Hook für jedes Modul, ausgeführt nach mod_content(). Ersetzen Sie „module“ durch den Namen des Moduls, z. B. „photos_mod_aftercontent“.
module_mod_content Allgemeiner Hook für ein beliebiges Modul, wird vor mod_content() ausgeführt. Ersetzen Sie 'module' durch den Modulnamen, z. B. 'photos_mod_content'.
module_mod_init Allgemeiner Hook für ein beliebiges Modul, wird vor mod_init() ausgeführt. Ersetzen Sie 'module' durch den Modulnamen, z. B. 'photos_mod_init'.
module_mod_post Allgemeiner Hook für ein beliebiges Modul, der vor mod_post() ausgeführt wird. Ersetzen Sie 'module' durch den Namen des Moduls, z. B. 'photos_mod_post'.
about_hook Aufgerufen von der Seite siteinfo
accept_follow Wird aufgerufen, wenn eine Verbindung akzeptiert wird (Freundschaftsanfrage)
account_downgrade Wird aufgerufen, wenn ein Konto abgelaufen ist, was auf eine mögliche Herabstufung auf die Serviceklasse „basic“ hinweist
Konto_Einstellungen Wird bei der Erstellung des Formulars für die Kontoeinstellungen aufgerufen
account_settings_post Wird bei der Buchung aus dem Kontoeinstellungsformular aufgerufen
tätigkeit_filter Wird bei der Erstellung der Liste der Filter für die Netzwerkseite aufgerufen
activity_mapper Wird bei der Bestimmung der Vorgangsart für die Übertragung aufgerufen.
activity_decode_mapper Wird aufgerufen, wenn die Vorgangsart für die Übertragung bestimmt wird.
activity_obj_mapper Wird aufgerufen, wenn der Objekttyp für die Übertragung bestimmt wird.
activity_obj_decode_mapper Wird bei der Bestimmung des Objekttyps für die Übertragung aufgerufen.
activity_order Wird bei der Generierung der Liste der Bestelloptionen für die Netzseite aufgerufen
addon_app_installed_filter Wird aufgerufen, wenn festgestellt wird, ob eine addon_app installiert ist
activity_received Wird aufgerufen, wenn eine Aktivität (Beitrag, Kommentar, Like, etc.) von einer zot-Quelle empfangen wurde
admin_aside Wird aufgerufen, wenn das Seitenleisten-Widget der Verwaltungsseite erzeugt wird
affinity_labels Wird verwendet, um alternative Beschriftungen für den Affinitätsslider zu generieren.
api_perm_is_allowed Wird aufgerufen, wenn perm_is_allowed() von einem API-Aufruf ausgeführt wird.
app_destroy Wird aufgerufen, wenn eine App gelöscht wird.
app_installed_filter Wird aufgerufen, wenn festgestellt wird, ob eine App installiert ist
app_menu Wird bei der Erstellung des app_menu Dropdowns aufgerufen (kann veraltet sein)
attach_delete Wird aufgerufen, wenn Anhänge aus der Tabelle attach gelöscht werden
atom_author Wird aufgerufen, wenn ein Autor- oder Eigentümer-Element für einen Atom ActivityStream-Feed erzeugt wird
atom_entry Wird bei der Erzeugung jedes Eintrags eines Atom ActivityStreams Feeds aufgerufen
atom_feed Wird bei der Generierung eines Atom ActivityStreams Feeds aufgerufen
atom_feed_end Wird aufgerufen, wenn die Erzeugung eines Atom ActivityStreams Feeds abgeschlossen ist
attach_upload_file Wird beim Hochladen einer Datei aufgerufen
authentifizieren Kann alternative Authentifizierungsmechanismen bereitstellen
author_is_pmable Wird aus dem Aktionsmenü des Threads aufgerufen, um festzustellen, ob wir dem Verfasser des Beitrags eine private E-Mail schicken können
bb2diaspora Wird bei der Umwandlung von bbcode in Markdown aufgerufen
bbcode Wird am Ende der Konvertierung von bbcode in HTML aufgerufen
bbcode_filter Wird zu Beginn der Umwandlung von bbcode in HTML aufgerufen
bb_translate_video Wird aufgerufen, wenn eingebettete Dienste aus bbcode-Videoelementen extrahiert werden (wird selten verwendet)
build_pagehead Wird bei der Erstellung des HTML-Seitenkopfes aufgerufen
can_comment_on_post Wird aufgerufen, wenn entschieden wird, ob ein Kommentarfeld für einen Beitrag angezeigt werden soll oder nicht
change_channel Wird aufgerufen, wenn man sich bei einem Channel anmeldet (entweder während des Logins oder danach über den Channelmanager)
channel_remove Wird aufgerufen, wenn ein Channel entfernt wird
channel_links Wird bei der Generierung des Link: HTTP-Header für einen Kanal
channel_settings Wird aufgerufen, wenn die Seite mit den Channel-Einstellungen angezeigt wird
chat_message Wird aufgerufen, um eine Chat-Nachricht zu erstellen.
chat_post Wird aufgerufen, wenn eine Chat-Nachricht gepostet wurde.
check_account_email Überprüft die bei einer Kontoregistrierung angegebene E-Mail
check_account_invite Validierung eines Einladungscodes bei der Verwendung von Website-Einladungen
check_account_password Dient der Kontrolle von Kontopasswörtern (Mindestlänge, Einbeziehung von Zeichensätzen usw.)
check_channelallowed Wird verwendet, um die Sperrlisten für schwarze und weiße Kanäle außer Kraft zu setzen oder zu umgehen.
check_siteallowed Wird verwendet, um die schwarzen/weißen Sperrlisten für Websites außer Kraft zu setzen oder zu umgehen.
collect_public_recipients Wird verwendet, um eine Liste von Empfängern zu erstellen, an die eine öffentliche Nachricht gesendet werden soll.
comment_buttons Wird aufgerufen, wenn die Bearbeitungsschaltflächen für Kommentare angezeigt werden.
comments_are_now_closed Wird aufgerufen, wenn entschieden wird, ob ein Kommentarfeld für einen Beitrag angezeigt werden soll oder nicht
connect_premium Wird aufgerufen, wenn eine Verbindung zu einem Premium-Kanal hergestellt wird
connection_remove Wird aufgerufen, wenn eine Verbindung gelöscht/entfernt wird
connector_settings Wird aufgerufen, wenn die Seite mit den Features/Addon-Einstellungen aufgerufen wird
construct_page Allgemeiner Hook zur Bereitstellung von Inhalten für bestimmte Seitenbereiche. Wird aufgerufen, wenn die Comanche-Seite erstellt wird.
kontakt_block_ende Wird bei der Erstellung des „Connections“-Widgets in der Seitenleiste aufgerufen
kontakt_edit Wird bei der Bearbeitung einer Verbindung über connedit aufgerufen
kontakt_edit_post Wird aufgerufen, wenn ein Beitrag an connedit gesendet wird
Kontakt_Auswahl_Optionen Veraltet/unbenutzt
content_security_policy Wird vor der Ausgabe des Content-Security-Policy-Headers aufgerufen
conversation_start Wird zu Beginn des Renderns einer Konversation (Nachricht oder Nachrichtensammlung oder Stream) aufgerufen
cover_photo_content_end Wird aufgerufen, nachdem ein Titelbild hochgeladen wurde
create_identity Wird bei der Erstellung eines Channels aufgerufen
cron Wird aufgerufen, wenn eine geplante Aufgabe (Poller) ausgeführt wird
cron_daily Wird aufgerufen, wenn täglich geplante Aufgaben ausgeführt werden
cron_weekly Wird aufgerufen, wenn wöchentlich geplante Aufgaben ausgeführt werden
crypto_methods Wird aufgerufen, wenn eine Liste von Kryptoalgorithmen in der lokal bevorzugten Reihenfolge erstellt wird
daemon_addon Wird aufgerufen, wenn der erweiterbare Hintergrund-Daemon aufgerufen wird
daemon_master_release Wird zu Beginn der Verarbeitung von \Zotlabs\Daemon\Master::Release() aufgerufen
directory_item Wird beim Erzeugen einer Verzeichnisliste für die Anzeige aufgerufen
discover_channel_webfinger Wird aufgerufen, wenn ein Webfinger-Lookup durchgeführt wird
display_item Wird für jedes Element aufgerufen, das in einem Gesprächsfaden angezeigt wird
display_settings Wird vom Einstellungsmodul aufgerufen, wenn der Abschnitt 'Anzeigeeinstellungen' angezeigt wird
display_settings_post Wird aufgerufen, wenn ein Beitrag aus dem Formular „Einstellungen anzeigen“ des Einstellungsmoduls angezeigt wird
donate_contributors Wird vom 'donate'-Addon aufgerufen, wenn eine Liste von Spendenempfängern erstellt wird
donate_plugin wird vom 'donate'-Addon aufgerufen
donate_sponsoren aufgerufen durch das 'donate'-Addon
dreport_ist_storable wird vor dem Speichern eines Dreport-Datensatzes aufgerufen, um festzustellen, ob er gespeichert werden soll
dreport_process wird für jeden gültigen Lieferbericht aufgerufen
dropdown_extras Hinzufügen zusätzlicher Elemente zum Dropdown-Menü, wenn Element/Threads angezeigt werden.
drop_item wird aufgerufen, wenn ein 'item' entfernt wird
encode_object wird aufgerufen, wenn ein Objekt für die Übertragung kodiert wird.
enotify wird vor jeder Benachrichtigung aufgerufen
enotify_mail wird aufgerufen, wenn eine Benachrichtigungs-E-Mail gesendet wird
enotify_store wird beim Speichern eines Benachrichtigungsdatensatzes aufgerufen
enotify_store_end wird aufgerufen, nachdem ein Benachrichtigungsdatensatz gespeichert wurde
event_created wird aufgerufen, wenn ein Ereignisdatensatz erstellt wird
event_store_event wird aufgerufen, wenn ein Ereignisdatensatz erstellt oder aktualisiert wird
event_updated wird aufgerufen, wenn ein Ereignisdatensatz geändert wird
externals_url_select wird aufgerufen, wenn eine Liste mit zufälligen Websites erstellt wird, von denen öffentliche Beiträge abgerufen werden sollen
feature_enabled wird aufgerufen, wenn 'feature_enabled()' verwendet wird
merkmal_settings wird von der Einstellungsseite aufgerufen, wenn man 'addon/feature settings' besucht
feature_settings_post wird von der Einstellungsseite aufgerufen, wenn von 'addon/feature settings' aus gepostet wird
fetch_and_store wird aufgerufen, um das Filtern von 'entschlüsselten' Elementen vor der Speicherung zu ermöglichen.
file_thumbnail wird aufgerufen, wenn Miniaturbilder für die Wolkenseite im Modus „Kacheln anzeigen“ erzeugt werden
folgen wird aufgerufen, wenn eine Follow-Operation stattfindet
follow_from_feed wird aufgerufen, wenn eine Follow-Operation in einem RSS-Feed stattfindet
follow_allow wird aufgerufen, bevor die Ergebnisse einer Follow-Operation gespeichert werden
gender_selector wird bei der Erstellung der Dropdown-Liste „Geschlecht“ aufgerufen (erweitertes Profil)
gender_selector_min wird bei der Erstellung der Dropdown-Liste „Geschlecht“ aufgerufen (normales Profil)
generate_map wird aufgerufen, um den HTML-Code für die Anzeige eines Orts auf der Karte nach Koordinaten zu erzeugen
generate_named_map wird aufgerufen, um die HTML-Datei für die Anzeige eines Kartenorts anhand eines Textes zu erzeugen
get_all_api_perms Wird aufgerufen, wenn die Berechtigungen für API-Verwendungen abgerufen werden
get_all_perms wird aufgerufen, wenn get_all_perms() verwendet wird
get_best_language wird aufgerufen, wenn die bevorzugte Sprache für die Seite ausgewählt wird
get_default_export_sections Wird aufgerufen, um die Standardliste der zu exportierenden Funktionsdatengruppen in identity_basic_export() zu erhalten
get_features Wird aufgerufen, wenn get_features() aufgerufen wird
get_photo Wird aufgerufen, wenn Fotoinhalte (außer Profilfotos) in mod_photo abgerufen werden
get_profile_photo Wird aufgerufen, wenn der Inhalt des lokalen Profilfotos in mod_photo abgerufen wird
get_role_perms Wird aufgerufen, wenn get_role_perms() aufgerufen wird, um Berechtigungen für benannte Berechtigungsrollen zu erhalten
global_permissions Wird aufgerufen, wenn die globale Berechtigungsliste erstellt wird
home_content Wird von mod_home aufgerufen, um den Inhalt der Home-Seite zu ersetzen
home_init Wird von der Funktion home_init() der Homepage aufgerufen
hostxrd Wird bei der Erzeugung von .well-known/hosts-meta für „old webfinger“ aufgerufen (wird vom Diaspora-Protokoll verwendet)
html2bb_video Wird aufgerufen, wenn die html2bbcode-Übersetzung verwendet wird, um eingebettete Medien zu behandeln
html2bbcode Wird bei der Verwendung der html2bbcode-Übersetzung aufgerufen
identität_basic_export Wird aufgerufen, wenn die Basisinformationen eines Channels zur Sicherung oder Übertragung exportiert werden.
import_autor_xchan Wird aufgerufen, wenn ein Autor eines Beitrags mit xchan_hash gesucht wird, um sicherzustellen, dass er einen xchan-Eintrag auf unserer Website hat
import_channel Wird aufgerufen, wenn ein Kanal aus einer Datei oder einer API-Quelle importiert wird
import_directory_profile Wird aufgerufen, wenn die Lieferung einer Profilstruktur aus einer externen Quelle verarbeitet wird (normalerweise für die Speicherung in Verzeichnissen)
import_xchan Wird bei der Verarbeitung des Ergebnisses von zot_finger() aufgerufen, um das Ergebnis zu speichern
item_photo_menu Wird aufgerufen, wenn die Liste der Aktionen erzeugt wird, die mit einem angezeigten Konversationselement verbunden sind
item_store Wird aufgerufen, wenn item_store() einen Datensatz vom Typ item speichert
item_stored Wird aufgerufen, nachdem item_store() einen Datensatz des Typs item in der Datenbank gespeichert hat.
item_custom Wird aufgerufen, bevor item_store() einen Datensatz des Typs item speichert (damit Addons ITEM_TYPE_CUSTOM-Elemente verarbeiten können).
item_store_update Wird aufgerufen, wenn item_store_update() aufgerufen wird, um einen gespeicherten Eintrag zu aktualisieren.
item_stored_update Wird aufgerufen, nachdem item_store_update() ein gespeichertes Element aktualisiert hat.
item_translate Wird von item_store und item_store_update aufgerufen, nachdem die Sprache des Beitrags automatisch erkannt wurde.
jot_networks Wird aufgerufen, um die Liste der zusätzlichen Post-Plugins zu generieren, die aus dem ACL-Formular aktiviert werden sollen
jot_tool Veraltet und möglicherweise überflüssig. Ermöglicht das Hinzufügen von Aktionsschaltflächen zum Beitragseditor.
jot_tpl_filter Wird aufgerufen, um Vorlagenvariablen vor der Ersetzung in jot.tpl zu filtern.
jot_header_tpl_filter Wird aufgerufen, um Vorlagenvariablen vor der Ersetzung in jot_header.tpl zu filtern.
legal_webbie Wird aufgerufen, um eine Kanaladresse zu validieren
legal_webbie_text Bietet eine Erklärung der Text-/Zeichenbeschränkungen für legal_webbie()
load_pdl Wird aufgerufen, wenn wir eine PDL-Datei oder eine Beschreibung laden
local_dir_update Wird aufgerufen, wenn eine Verzeichnisaktualisierung von einem Channel auf dem Verzeichnisserver verarbeitet wird
location_move Wird aufgerufen, wenn einem UNO-Channel ein neuer Standort mitgeteilt wurde (was auf eine Verschiebung und nicht auf einen Klon hinweist)
protokolliert Wird aufgerufen, wenn die Authentifizierung auf irgendeine Weise erfolgreich war
Logger Wird aufgerufen, wenn ein Eintrag in die Logdatei der Anwendung gemacht wird
logging_out Wird bei der Abmeldung aufgerufen
login_hook Wird bei der Generierung des Anmeldeformulars aufgerufen
magic_auth Wird bei der Verarbeitung einer magic-auth-Sequenz aufgerufen
markdown_to_bb Wird bei der Verarbeitung der Markdown-Konvertierung aufgerufen
match_webfinger_location Wird bei der Verarbeitung von Webfinger-Anfragen aufgerufen
magic_auth_openid_success Wird aufgerufen, wenn ein magic-auth aufgrund von openid-Anmeldedaten erfolgreich war
magic_auth_success Wird aufgerufen, wenn ein magic-auth erfolgreich war
main_slider Wird bei der Generierung des Affinitätswerkzeugs aufgerufen
marital_selector Wird aufgerufen, wenn die Auswahlliste für das Dropdown-Menü des Profils „Familienstand“ erstellt wird (erweitertes Profil)
marital_selector_min Wird bei der Erstellung der Auswahlliste für das Dropdown-Profil „Familienstand“ aufgerufen (normales Profil)
module_loaded Wird aufgerufen, wenn ein Modul erfolgreich für eine URL-Anfrage auf dem Server lokalisiert wurde.
mood_verbs Wird bei der Erstellung der Liste der Stimmungen aufgerufen
nav Wird bei der Erstellung der Navigationsleiste aufgerufen
network_content_init Wird beim Laden des Inhalts für die Netzwerkseite aufgerufen
netzwerk_ping Wird bei einer Ping-Anfrage aufgerufen
netzwerk_zu_name Veraltet
notifier_end Wird aufgerufen, wenn eine Zustellschleife abgeschlossen ist
notifier_hub Wird aufgerufen, wenn ein Hub zugestellt wurde
notifier_normal Wird aufgerufen, wenn der Notifizierer für eine 'normale' Zustellung aufgerufen wird
notifier_process Wird aufgerufen, wenn der Notifizierende eine Nachricht/Ereignis verarbeitet
obj_verbs Wird bei der Erstellung der Liste der für das Profil „Dinge“ verfügbaren Verben aufgerufen.
oembed_action Wird aufgerufen, wenn entschieden wird, ob eine Oembed-Url gefiltert, blockiert oder genehmigt werden soll
oembed_probe Wird aufgerufen, wenn eine Suche nach Oembed-Inhalten durchgeführt wird.
other_encapsulate Wird aufgerufen, wenn Inhalte verschlüsselt werden, für die der Algorithmus unbekannt ist (siehe auch crypto_methods)
other_unencapsulate Wird aufgerufen, wenn Inhalte entschlüsselt werden, deren Algorithmus unbekannt ist (siehe auch crypto_methods)
page_content_top Wird aufgerufen, wenn wir eine Webseite generieren (vor dem Aufruf der Modul-Content-Funktion)
page_end Wird aufgerufen, nachdem wir den Seiteninhalt generiert haben
page_header Wird bei der Generierung der Navigationsleiste aufgerufen
page_meta Wird bei der Generierung der Metadaten im Seitenkopf aufgerufen.
parse_atom Wird aufgerufen, wenn ein Atom/RSS-Feed-Element geparst wird.
parse_link Wird aufgerufen, wenn eine URL abgefragt wird, um daraus einen Beitrag zu generieren
pdl_selector Wird bei der Erstellung einer Layoutauswahl in einem Formular aufgerufen
perm_is_allowed Wird während perm_is_allowed() aufgerufen, um festzustellen, ob eine Berechtigung für diesen Kanal und Beobachter erlaubt ist
permissions_create Wird aufgerufen, wenn ein Bucheintrag (Verbindung) erstellt wird
permissions_update Wird aufgerufen, wenn eine Berechtigungsaktualisierung übertragen wird
permit_hook Wird aufgerufen, bevor ein registrierter Hook tatsächlich ausgeführt wird, um festzustellen, ob er erlaubt oder blockiert werden soll
personal_xrd Wird bei der Generierung der persönlichen XRD für „old webfinger“ (Diaspora) aufgerufen
photo_post_end Wird nach dem Hochladen eines Fotos aufgerufen
photo_upload_begin Wird aufgerufen, wenn versucht wird, ein Foto hochzuladen
photo_upload_end Wird aufgerufen, wenn ein Foto-Upload verarbeitet wurde
photo_upload_file Wird aufgerufen, um alternative Dateinamen für einen Upload zu generieren
photo_upload_form Wird aufgerufen, wenn ein Foto-Upload-Formular generiert wird
photo_view_filter Wird aufgerufen, bevor die Daten an die photo_view-Vorlage übergeben werden
poke_verbs Wird bei der Erstellung der Liste der Aktionen für das Modul „poke“ aufgerufen
post_local Wird aufgerufen, wenn ein Artikel auf diesem Rechner über mod/item.php eingestellt wurde (auch über API)
post_local_end Wird aufgerufen, wenn ein lokaler Postvorgang abgeschlossen ist
post_local_start Wird aufgerufen, wenn ein lokaler Postvorgang beginnt
post_mail Wird aufgerufen, wenn eine Mail-Nachricht verfasst wurde
post_mail_end Wird aufgerufen, wenn eine Mail-Nachricht zugestellt wurde
post_remote Wird aufgerufen, wenn eine Aktivität von einem anderen Standort eintrifft
post_remote_end Wird nach der Verarbeitung einer Remote-Post aufgerufen
post_remote_update Wird bei der Verarbeitung eines entfernten Beitrags aufgerufen, der eine Bearbeitung oder Aktualisierung beinhaltet
post_remote_update_end Wird nach der Verarbeitung eines entfernten Beitrags aufgerufen, der eine Bearbeitung oder Aktualisierung beinhaltete
prepare_body Wird aufgerufen, wenn der HTML-Code für ein angezeigtes Konversationsobjekt generiert wird.
prepare_body_final Wird nach der Generierung des HTML für ein angezeigtes Konversationselement aufgerufen
prepare_body_init Wird vor der Generierung des HTML für ein angezeigtes Konversationselement aufgerufen
privacygroup_extras Wird vor der Generierung des HTML für die Bearbeitungsoptionen der Privacy Group aufgerufen
privacygroup_extras_delete Wird aufgerufen, nachdem die Privatsphärengruppe gelöscht wurde.
privacygroup_extras_post Wird aufgerufen, wenn das Formular zur Bearbeitung der Privatsphärengruppe abgeschickt wird.
proc_run Wird beim Aufruf von PHP-Unterprozessen aufgerufen
process_channel_sync_delivery Wird aufgerufen, wenn ein 'Sync-Paket' mit Struktur- und Tabellenaktualisierungen von einem Channel-Clone angenommen wird.
profile_advanced Wird bei der Generierung einer erweiterten Profilseite aufgerufen
profil_edit Wird bei der Bearbeitung eines Profils aufgerufen
profil_foto_inhalt_ende Wird bei der Änderung eines Profilfotos aufgerufen
profil_post Wird beim Posten eines bearbeiteten Profils aufgerufen
profile_sidebar Wird aufgerufen, wenn die „Kanal-Seitenleiste“ oder das Miniprofil erstellt wird
profile_sidebar_enter Wird vor der Erstellung der 'Channel Sidebar' oder des Miniprofils aufgerufen
queue_deliver Wird aufgerufen, wenn eine Nachricht in der Warteschlange zugestellt wird
register_account Wird aufgerufen, wenn ein Konto erstellt worden ist
render_location Wird aufgerufen, um eine ineraktive Inline-Map zu erzeugen
replace_macros Wird vor dem Aufrufen des Vorlagenprozessors aufgerufen
reverse_magic_auth Wird vor dem Aufruf von reverse magic auth aufgerufen, um Sie auf Ihre eigene Website zu schicken, damit Sie sich auf dieser Website authentifizieren können
Einstellungen_Konto Wird bei der Erstellung des Formulars für die Kontoeinstellungen aufgerufen
einstellungen_form Wird bei der Erstellung des Formulars für die Channel-Einstellungen aufgerufen
einstellungen_post Wird bei der Buchung aus dem Formular für die Kanaleinstellungen aufgerufen
sexpref_selector Wird aufgerufen, wenn ein Dropdown-Menü für sexuelle Präferenzen erstellt wird (erweitertes Profil)
sexpref_selector_min Wird aufgerufen, wenn eine Auswahlliste der sexuellen Präferenzen erstellt wird (normales Profil)
smilie Wird beim Übersetzen von Emoticons aufgerufen
status_editor Wird bei der Erstellung des status_editor aufgerufen.
stream_item Wird für jedes Element aufgerufen, das über conversation() zur Anzeige gerendert wird
system_app_installed_filter Wird aufgerufen, wenn festgestellt wird, ob eine System-App installiert ist.
tagged Wird aufgerufen, wenn eine Lieferung verarbeitet wird, die dazu führt, dass Sie getaggt werden
thumbnail Wird beim Erzeugen von Miniaturbildern für die Kachelansicht des Cloud-Speichers aufgerufen
update_unseen Wird vor dem automatischen Markieren von im Browser geladenen Sendungen, die gesehen wurden, aufgerufen
validate_channelname Wird verwendet, um die von einem Kanal verwendeten Namen zu validieren
webfinger Wird beim Besuch des Dienstes webfinger (RFC7033) aufgerufen
well_known Wird beim Zugriff auf die speziellen '.well-known'-Site-Adressen aufgerufen
wiki_preprocess Wird aufgerufen, bevor Markdown-/Bbcode-Prozessoren für Wikiseiten ausgeführt werden
zot_best_algorithm Wird bei der Aushandlung von Verschlüsselungsalgorithmen mit entfernten Sites aufgerufen
zid Wird aufgerufen, wenn die zid des Beobachters zu einer URL hinzugefügt wird
zid_init Wird bei der Authentifizierung eines Besuchers aufgerufen, der zid verwendet hat
zot_finger Wird aufgerufen, wenn ein zot-Infopaket angefordert wurde (dies ist unser Webfinger-Erkennungsmechanismus)
Noch zu organisierende Informationen
Hier ist, wie Sie sich uns anschließen können. Richten Sie sich zunächst ein funktionierendes Git-Paket auf dem System ein, auf dem Sie entwickeln werden.
Erstellen Sie Ihr eigenes Github-Konto.
Sie können das Red-Repository von https://framagit.org/hubzilla/core.git forken/klonen. Folgen Sie den Anweisungen hier: http: //help.github.com/fork-a-repo/, um Ihren eigenen Tracking-Fork auf github zu erstellen und zu verwenden.
Gehen Sie dann auf Ihre Github-Seite und erstellen Sie einen „Pull request“, wenn Sie bereit sind, uns mitzuteilen, dass Ihre Arbeit zusammengeführt werden soll.
Wichtig
Bitte ziehen Sie alle Änderungen aus dem Projekt-Repository ein und fügen Sie sie mit Ihrer Arbeit zusammen , bevor Sie einen Pull-Request erstellen. Wir behalten uns das Recht vor, jeden Patch abzulehnen, der zu einer großen Anzahl von Merge-Konflikten führt. Dies gilt insbesondere für Sprachübersetzungen, bei denen wir möglicherweise nicht in der Lage sind, die feinen Unterschiede zwischen den konfligierenden Versionen zu verstehen.
Testen Sie außerdem Ihre Änderungen. Gehen Sie nicht davon aus, dass eine einfache Korrektur nicht etwas anderes kaputt macht. Bitten Sie nach Möglichkeit einen erfahrenen Red-Entwickler, den Code zu überprüfen.
Wie man Hubzilla thematisiert Dies ist eine kurze Dokumentation über das, was ich beim Versuch, das Aussehen von Hubzilla zu ändern, herausgefunden habe.
Zuerst müssen Sie ein neues Thema erstellen. Dieses befindet sich in /view/theme, und ich habe mich für „redbasic“ entschieden, da es im Moment das einzig verfügbare ist. Nehmen wir an, ich nenne es . Oh, und vergessen Sie nicht, die Funktion _init in /php/theme.php in _init() statt redbasic_init() umzubenennen.
Wenn Sie nun Javascript- oder CSS-Dateien hinzufügen müssen, fügen Sie sie zu /js oder /css hinzu und „registrieren“ sie dann in _init() durch head_add_js('file.js') und head_add_css('file.css'). Jetzt werden Sie wahrscheinlich eine Vorlage ändern wollen. Diese sind in /view/tpl ODER view//tpl zu finden. Alles, was Sie tun müssen, ist, das, was Sie ändern wollen, in das tpl-Verzeichnis Ihres Themes zu kopieren.
Wir sind ziemlich entspannt, wenn es um Entwickler geht. Wir haben nicht viele Regeln. Einige von uns sind überlastet, und wenn Sie helfen wollen, lassen wir Sie gerne helfen. Wenn Sie sich jedoch an ein paar Richtlinien halten, wird der Prozess reibungsloser und die Zusammenarbeit einfacher. Wir haben Entwickler aus der ganzen Welt mit unterschiedlichen Fähigkeiten, unterschiedlichen kulturellen Hintergründen und unterschiedlicher Geduld. Unsere oberste Regel ist es, andere zu respektieren. Manchmal ist das schwierig, und manchmal haben wir sehr unterschiedliche Ansichten darüber, wie die Dinge funktionieren sollten, aber wenn sich jeder bemüht, werden wir gut miteinander auskommen.
Hier ist, wie Sie sich uns anschließen können.
Besorgen Sie sich zunächst ein funktionierendes Git-Paket auf dem System, auf dem Sie die Entwicklung durchführen werden.
Erstellen Sie Ihr eigenes Github-Konto.
Du kannst das Hubzilla-Repository von https://framagit.org/hubzilla/core.git forken/klonen. Folgen Sie den Anweisungen hier: http://help.github.com/fork-a-repo/]http://help.github.com/fork-a-repo/, um Ihren eigenen Tracking-Fork auf github zu erstellen und zu verwenden.
Gehen Sie dann auf Ihre Github-Seite und erstellen Sie eine „Pull-Anfrage“, wenn Sie bereit sind, uns mitzuteilen, dass Ihre Arbeit zusammengeführt werden soll.
Wichtig
Bitte ziehen Sie alle Änderungen aus dem Projekt-Repository ein und fügen Sie sie mit Ihrer Arbeit zusammen , bevor Sie einen Pull-Request erstellen. Wir behalten uns das Recht vor, jeden Patch abzulehnen, der zu einer großen Anzahl von Merge-Konflikten führt. Dies gilt insbesondere für Sprachübersetzungen, bei denen wir möglicherweise nicht in der Lage sind, die feinen Unterschiede zwischen den konfligierenden Versionen zu verstehen.
Testen Sie außerdem Ihre Änderungen. Gehen Sie nicht davon aus, dass eine einfache Korrektur nicht etwas anderes kaputt macht. Bitten Sie nach Möglichkeit einen erfahrenen Red-Entwickler, den Code zu überprüfen.
Weitere Dokumentation finden Sie auf den Github-Wikiseiten unter: https://github.com/friendica/red/wiki
Konsensbildung
Codeänderungen, die einen offensichtlichen Fehler beheben, sind ziemlich einfach. Wenn Sie zum Beispiel auf „Speichern“ klicken und das, was Sie zu speichern versuchen, nicht gespeichert wird, ist es ziemlich offensichtlich, was das beabsichtigte Verhalten sein sollte. Bei der Entwicklung von Funktionsanfragen kann es vorkommen, dass eine große Anzahl von Community-Mitgliedern davon betroffen ist und dass andere Mitglieder der Community nicht mit der Notwendigkeit der Funktion oder der von Ihnen vorgeschlagenen Implementierung einverstanden sind. Es kann sein, dass sie etwas nicht als Fehler oder als wünschenswerte Funktion ansehen.
Wir ermutigen zur Konsensbildung innerhalb der Gemeinschaft, wenn es um eine Funktion geht, die als kontrovers angesehen werden könnte oder wenn es keine einstimmige Entscheidung gibt, dass die vorgeschlagene Funktion der richtige Weg ist, um die Aufgabe zu erfüllen. Die erste Anlaufstelle für Ihre Ideen ist Channel One]. Andere haben vielleicht Anregungen oder können Sie auf Aspekte Ihres Konzepts hinweisen, die in unserem Umfeld problematisch sein könnten. Vielleicht stoßen Sie aber auch auf Widerstand gegen Ihren Plan. Das bedeutet nicht, dass Sie aufhören und/oder die Funktion ignorieren sollten. Hören Sie sich die Bedenken der anderen an und versuchen Sie, alle Probleme bei der Umsetzung zu lösen.
Es gibt Stellen, an denen Widerstände nicht ausgeräumt werden können. In diesen Fällen sollten Sie in Erwägung ziehen, Ihre Funktion optional zu machen oder ein nicht standardmäßiges Verhalten vorzusehen, das ausdrücklich aktiviert werden muss. Diese Technik kann oft verwendet werden, wenn eine Funktion eine bedeutende, aber nicht einstimmige Unterstützung hat. Diejenigen, die die Funktion wünschen, können sie einschalten, und diejenigen, die sie nicht wollen, können sie ausgeschaltet lassen. Wenn eine Funktion andere Netzwerke oder Websites nutzt oder nur von einer kleinen Minderheit der Gemeinschaft als wünschenswert angesehen wird, sollten Sie in Erwägung ziehen, die Funktion über ein Addon oder Plugin verfügbar zu machen. Auch hier gilt, dass diejenigen, die die Funktion nicht wünschen, sie auch nicht installieren müssen. Plugins sind relativ einfach zu erstellen und „Haken“ können leicht hinzugefügt oder geändert werden, wenn die aktuellen Haken nicht das tun, was nötig ist, damit Ihr Plugin funktioniert.
Das Hubzilla-Projekt
Hubzilla Verwaltung
Governance bezieht sich auf die Verwaltung eines Projekts und insbesondere darauf, wie diese mit der Konfliktlösung zusammenhängt.
Gemeinschaftliche Verwaltung
Das Projekt wird von der „Gemeinschaft“ verwaltet und Entscheidungen werden von ihr getroffen. Die Governance-Struktur ist noch in der Entwicklung begriffen. Bis zur endgültigen Festlegung der Struktur werden Entscheidungen in der folgenden Reihenfolge getroffen:
-
Fauler Konsens
Wenn ein Projektvorschlag in einem der Community-Governance-Foren unterbreitet wird und innerhalb einer „angemessenen“ Zeitspanne ab dem Datum des Vorschlags (wir geben in der Regel allen interessierten Parteien 2 bis 3 Tage Zeit, sich zu äußern) keine ernsthaften Einwände erhoben werden, muss nicht abgestimmt werden und der Vorschlag gilt als angenommen. Zu diesem Zeitpunkt können zwar Bedenken geäußert werden, aber wenn diese in der Diskussion ausgeräumt werden und Lösungsmöglichkeiten angeboten werden, gilt der Vorschlag dennoch als genehmigt.
-
Veto
Erfahrene Entwickler, die bereits viele Projekte zugesagt haben, können gegen jede Entscheidung ein Veto einlegen. Die Entscheidung kann nicht weitergeführt werden, bis das Veto aufgehoben oder ein alternativer Vorschlag vorgelegt wird.
-
Gemeinschaftsabstimmung
Eine Entscheidung, für die es kein klares Mandat oder keinen klaren Konsens gibt, gegen die aber kein Veto eingelegt wurde, kann der Gemeinschaft zur Abstimmung vorgelegt werden. Zurzeit ist dies eine einfache Volksabstimmung in einem der entsprechenden Gemeinschaftsforen. Zurzeit entscheidet das Volk über das Ergebnis. Dies kann sich in Zukunft ändern, wenn die Gemeinschaft ein „Rats“-Verwaltungsmodell einführt. Dieses Dokument wird zu diesem Zeitpunkt mit den aktualisierten Verwaltungsregeln aktualisiert werden.
Die Abstimmung in der Gemeinschaft führt nicht immer zu einem angenehmen Ergebnis und kann zu polarisierten Fraktionen in der Gemeinschaft führen (daher werden auch andere Modelle in Betracht gezogen). Wenn der Vorschlag abgelehnt wird, gibt es immer noch verschiedene Möglichkeiten, den Vorschlag mit leicht veränderten Parametern erneut einzureichen (Umwandlung in ein Addon, Umwandlung in eine optionale Funktion, die standardmäßig deaktiviert ist, usw.). Wenn das Interesse an der Funktion groß ist und die Abstimmung „knapp“ ausfällt, kann dies bei den unterlegenen Wählern viele schlechte Gefühle hervorrufen. Bei solchen knappen Abstimmungen wird dringend empfohlen, dass der Antragsteller Maßnahmen ergreift, um alle Bedenken auszuräumen, und den Antrag erneut einreicht.
Datenschutz
F: Wer kann meinen Inhalt sehen?
A: Standardmäßig JEDER im Internet, es sei denn, Sie schränken dies ein. Bei Hubzilla können Sie die von Ihnen gewünschte Datenschutzstufe wählen. Eingeschränkte Inhalte sind für „Spionagenetzwerke“ und Werbetreibende NICHT sichtbar. Sie werden gegen das Abhören durch Außenstehende geschützt - so gut es eben geht. Hub-Administratoren mit ausreichenden Kenntnissen und Geduld können möglicherweise einige private Kommunikationen abhören, aber sie müssen sich dafür anstrengen. Innerhalb von Hubzilla gibt es Privatsphären-Modi, die selbst für erfahrene und entschlossene Hub-Administratoren abhörsicher sind.
F: Kann mein Inhalt zensiert werden?
A: Hubzilla (das Netzwerk) kann Ihre Inhalte NICHT zensieren. Server- und Hub-Administratoren unterliegen den örtlichen Gesetzen und KÖNNEN anstößige Inhalte von ihrer Site/ihrem Hub entfernen. Jeder KANN Hub-Administrator werden, auch Sie, und daher Inhalte veröffentlichen, die andernfalls zensiert werden könnten. Sie KÖNNEN immer noch den örtlichen Gesetzen unterliegen.
Definitionen
Hubzilla*
Hubzilla, auch als „das Netzwerk“ bezeichnet, ist eine Sammlung von einzelnen Computern/Servern (auch Hubs genannt), die miteinander verbunden sind und ein größeres kooperatives Netzwerk bilden.
Hub
Ein einzelner Computer oder Server, der mit Hubzilla verbunden ist. Diese werden von einem Hub-Administrator bereitgestellt und können öffentlich oder privat, bezahlt oder kostenlos sein.
Hub-Administrator
Der Systembetreiber eines einzelnen Hubs.
Richtlinien
Öffentliche Informationen
Alle von Ihnen innerhalb von Hubzilla eingestellten Informationen oder Inhalte KÖNNEN öffentlich oder für jeden im Internet sichtbar sein. Soweit dies möglich ist, erlaubt Hubzilla Ihnen, Inhalte zu schützen und einzuschränken, wer sie sehen kann.
Ihr Profilfoto, Ihr Channelname und der Standort (URL oder Netzwerkadresse) Ihres Channels sind für jedermann im Internet sichtbar, und Datenschutzkontrollen haben keinen Einfluss auf die Anzeige dieser Elemente.
Du KANNST zusätzlich andere Profilinformationen zur Verfügung stellen. Alle Informationen, die Sie in Ihrem „Standard“- oder öffentlichen Profil angeben, KÖNNEN an andere Hubs in Hubzilla übermittelt werden und zusätzlich im Channel-Verzeichnis angezeigt werden. Sie können die Einsicht in diese Profilinformationen einschränken. Sie können es nur auf Mitglieder Ihres Hubs, nur auf Verbindungen (Freunde) oder auf andere begrenzte Gruppen von Betrachtern beschränken, wie Sie es wünschen. Wenn Sie möchten, dass Ihr Profil eingeschränkt wird, müssen Sie die entsprechenden Datenschutzeinstellungen vornehmen oder einfach KEINE zusätzlichen Informationen angeben.
Inhalt
Die von Ihnen bereitgestellten Inhalte (Statusmeldungen, Fotos, Dateien usw.) gehören Ihnen. Die Standardeinstellung von Hubzilla ist, dass Inhalte offen und für jeden im Internet sichtbar veröffentlicht werden (PUBLIC). Sie KÖNNEN dies in Ihren Channel-Einstellungen steuern und die Standardberechtigungen einschränken oder Sie KÖNNEN die Sichtbarkeit jedes einzelnen veröffentlichten Elements separat einschränken (PRIVAT). Die Hubzilla-Entwickler stellen sicher, dass eingeschränkte Inhalte NUR für diejenigen sichtbar sind, die in der Einschränkungsliste aufgeführt sind - so gut sie können.
Inhalte (insbesondere Statusmeldungen), die Sie mit anderen Netzwerken teilen oder die Sie für jeden im Internet sichtbar gemacht haben (PUBLIC), können nicht einfach zurückgenommen werden, nachdem sie veröffentlicht wurden. Sie KÖNNEN mit anderen Netzwerken geteilt und über RSS/Atom-Feeds verfügbar gemacht werden. Sie können auch auf anderen Hubzilla-Sites syndiziert werden. Sie KÖNNEN in anderen Netzwerken und Websites erscheinen und in der Internetsuche sichtbar sein. Wenn Sie dieses Standardverhalten nicht wünschen, passen Sie bitte Ihre Kanaleinstellungen an und schränken Sie ein, wer Ihre Inhalte sehen kann.
Kommentare und Forenbeiträge
Kommentare zu Beiträgen, die von anderen erstellt wurden, und Beiträge, die als Forenbeiträge gekennzeichnet sind, gehören Ihnen als Ersteller/Autor, aber die Verbreitung dieser Beiträge unterliegt nicht Ihrer direkten Kontrolle, und Sie geben EINIGE Rechte an diesen Elementen ab. Diese Beiträge/Kommentare KÖNNEN an andere weitergegeben werden und KÖNNEN für jeden im Internet sichtbar sein. Im Falle von Kommentaren kontrolliert der Ersteller der „ersten Nachricht“ in dem Thread (Gespräch), auf den Sie antworten, die Verbreitung aller Kommentare und Antworten auf diese Nachricht. Er ist „Eigentümer“ und hat daher bestimmte Rechte in Bezug auf die gesamte Unterhaltung (einschließlich aller darin enthaltenen Kommentare). Sie können den Kommentar immer noch bearbeiten oder löschen, aber der Eigentümer der Konversation hat auch das Recht, den gesamten Inhalt der Konversation zu bearbeiten, zu löschen, weiterzuverteilen und zu sichern/wiederherzustellen.
Private Informationen
Die Hubzilla-Entwickler stellen sicher, dass alle von Ihnen bereitgestellten Inhalte, die als PRIVAT gekennzeichnet sind, nach bestem Wissen und Gewissen gegen Abhören geschützt werden. Private Channel-Inhalte KÖNNEN in der Datenbank jedes beteiligten Hub-Administrators gesehen werden, aber private Nachrichten werden in der Datenbank unkenntlich gemacht. Letzteres bedeutet, dass es sehr schwierig, aber NICHT unmöglich ist, dass diese Inhalte von einem Hub-Administrator gesehen werden können. Private Kanalinhalte und private Nachrichten werden auch aus den E-Mail-Benachrichtigungen entfernt. Die Ende-zu-Ende-Verschlüsselung ist eine optionale Funktion, die selbst von einem entschlossenen Administrator NICHT eingesehen werden kann.
Identitätsschutz
Der Schutz Ihrer Identität ist ein weiterer Aspekt. Da Sie in Hubzilla eine dezentrale Identität haben, geht Ihre Privatsphäre über Ihren Home Hub hinaus. Wenn Sie die vollständige Kontrolle über Ihre Privatsphäre und Sicherheit haben möchten, sollten Sie Ihren eigenen Hub auf einem eigenen Server betreiben. Für viele Menschen ist dies kompliziert und kann ihre technischen Fähigkeiten überfordern. Lassen Sie uns daher einige Vorsichtsmaßnahmen auflisten, die Sie ergreifen können, um Ihre Privatsphäre so gut wie möglich zu schützen.
Eine dezentralisierte Identität hat viele Vorteile und bietet Ihnen viele interessante Funktionen, aber Sie sollten sich der Tatsache bewusst sein, dass Ihre Identität anderen Hubs im Hubzilla-Netzwerk bekannt ist. Einer dieser Vorteile ist, dass andere Kanäle Ihnen maßgeschneiderte Inhalte anbieten und Ihnen erlauben können, private Dinge zu sehen (wie z.B. private Fotos, die andere mit Ihnen teilen möchten). Aus diesem Grund müssen diese Kanäle wissen, wer Sie sind. Aber wir verstehen, dass diese anderen Kanäle manchmal mehr von Ihnen wissen, als Sie vielleicht wünschen. Zum Beispiel das Plug-in Visage, das einem Kanalbesitzer mitteilen kann, wann du das letzte Mal sein Profil besucht hast. Sie können sich ganz einfach von dieser geringen und, wie wir meinen, harmlosen Verfolgung abmelden.
* Sie können [Do Not Track (DNT)](http://donottrack.us/)?f=&zid=pepecyb@hub.hubzilla.hu) in Ihrem Webbrowser aktivieren. Wir respektieren diesen neuen Vorschlag zum Datenschutz. Alle modernen Browser unterstützen DNT. Sie finden es in den Datenschutzeinstellungen Ihres Browsers oder Sie können das Handbuch Ihres Webbrowsers konsultieren. Die Funktionalität von Hubzilla wird dadurch nicht beeinträchtigt. Diese Einstellung ist wahrscheinlich für die meisten Menschen ausreichend.
*Sie können die Veröffentlichung Ihres Channels in unserem Channel-Verzeichnis deaktivieren. Wenn Sie möchten, dass andere Ihren Channel finden, sollten Sie ihnen Ihre Channel-Adresse direkt mitteilen. Wir denken, dass dies ein guter Hinweis darauf ist, dass du zusätzliche Privatsphäre bevorzugst und aktivieren automatisch „Do Not Track“, wenn dies der Fall ist.
* Sie können einen blockierten Hub haben. Das bedeutet, dass alle Kanäle und Inhalte in diesem Hub nicht öffentlich und für die Außenwelt nicht sichtbar sind. Dies kann nur Ihr Hub-Administrator tun. Wir respektieren dies ebenfalls und aktivieren automatisch „Do Not Track“, wenn es eingestellt ist.
Zensur
Hubzilla ist ein globales Netzwerk, das alle Religionen und Kulturen einschließt. Das bedeutet nicht, dass jedes Mitglied des Netzwerks in Bezug auf strittige Themen genauso denkt wie Sie, und einige Leute könnten sich den von Ihnen geposteten Inhalten GEGENWINDLICH widersetzen. Wenn Sie etwas posten möchten, von dem Sie wissen, dass es möglicherweise nicht von allen akzeptiert wird, ist es am besten, wenn Sie die Öffentlichkeit mit Hilfe der Privatsphäre-Kontrollen auf einen kleinen Freundeskreis beschränken.
Hubzilla als Netzwerkanbieter kann keine Inhalte zensieren. Hub-Administratoren KÖNNEN jedoch Inhalte, die auf ihrem Hub erscheinen, zensieren, um lokalen Gesetzen oder sogar persönlichem Urteilsvermögen zu entsprechen. Ihre Entscheidung ist endgültig. Wenn Sie Probleme mit einem Hub-Administrator haben, können Sie Ihr Konto und Ihre Beiträge auf eine andere Seite verschieben, die Ihren Erwartungen besser entspricht. Bitte überprüfen Sie (regelmäßig) die Terms of Service Ihres Hubs, um sich über etwaige Regeln oder Richtlinien zu informieren. Wenn Ihr Inhalt aus illegalem oder problematischem Material besteht, empfehlen wir Ihnen DRINGEND, Ihren eigenen Hub zu betreiben (werden Sie Hub-Administrator). Es kann sein, dass Ihre Inhalte auf einigen Hubs blockiert werden, aber Hubzilla als Netzwerk kann nicht verhindern, dass sie veröffentlicht werden.
Hubzilla EMPFIEHLT, dass Hub-Administratoren eine Frist von 1-2 Tagen zwischen der Warnung eines Account-Inhabers über zu entfernende Inhalte und der physischen Entfernung oder Deaktivierung des Accounts einräumen. Dies gibt dem Inhaltsinhaber die Möglichkeit, seine Channel-Metadaten zu exportieren und auf eine andere Site zu importieren. In seltenen Fällen kann der Inhalt so beschaffen sein, dass die sofortige Kündigung des Kontos gerechtfertigt ist. Dies ist eine Hub-Entscheidung, nicht eine Hubzilla-Entscheidung.
Wenn Sie typischerweise und regelmäßig Inhalte jugendgefährdender oder anstößiger Natur posten, wird Ihnen DRINGEND empfohlen, Ihr Konto als „NSFW“ (Not Safe For Work) zu kennzeichnen. Dadurch wird die Anzeige Ihres Profilfotos im Verzeichnis verhindert, außer für Betrachter, die den „sicheren Modus“ deaktiviert haben. Wenn Ihr Profilfoto von den Verzeichnisadministratoren als nicht jugendfrei oder anstößig eingestuft wird, KANN der Verzeichnisadministrator Ihr Profilfoto als NSFW kennzeichnen. Derzeit gibt es keinen offiziellen Mechanismus, um diese Entscheidung anzufechten oder rückgängig zu machen. Deshalb SOLLTEN Sie Ihr eigenes Konto als NSFW markieren, wenn es für ein allgemeines Publikum unangemessen sein könnte.
Credits
Vielen Dank an alle, die im Laufe der Jahre zu diesem Projekt und seinen Vorgängern beigetragen haben. Es ist möglich, dass wir Ihren Namen nicht erwähnt haben, aber das ist nicht beabsichtigt. Wir danken auch der Gemeinschaft und ihren Mitgliedern, die uns wertvolle Beiträge geliefert haben und ohne die diese ganze Arbeit sinnlos wäre.
Es lohnt sich auch, die Beiträge und Problemlösungen zu würdigen, die sich aus Diskussionen zwischen Mitgliedern und Entwicklern anderer, in gewisser Weise verwandter und konkurrierender Projekte; auch wenn wir gelegentlich Meinungsverschiedenheiten hatten.
- Mike Macgirvin
- Mario Vavti
- Scott M. Stolz
- Chris Burger
- Emanuel Han
- Fabio Comuni
- Simon L'nu
- marijus
- Tobias Diekershoff
- fabrixxm
- tommy tomson
- Simon
- zottel
- Christian Vogeley
- jeroenpraat
- Michael Vogel
- erik
- Zach Prezkuta
- Paolo T
- Michael Meer
- Michael
- Abinoam P. Marques Jr
- Tobias Hößl
- Alexander Kampmann
- Olaf Conradi
- Paolo Tacconi
- tobiasd
- Devlon Duthie
- Zvi ben Yaakov (a.k.a rdc)
- Alexandre Hannud Abdo
- Olivier Migeot
- Chris Case
- Klaus Weidenbach
- Michael Johnston
- olivierm
- Vasudev Kamath
- pixelroot
- Max Weller
- duthied
- Martin Schmitt
- Sebastian Egbers
- Erkan Yilmaz
- sasiflo
- Stefan Parviainen
- Haakon Meland Eriksen
- Oliver Hartmann (23n)
- Erik Lundin
- habeascodice
- sirius
- Charles
- Tony Baldwin
- Hauke Zuehl
- Keith Fernie
- Anne Walk
- toclimb
- Daniel Frank
- Matthew Exon
- Michal Supler
- Tobias Luther
- U-SOUND\mike
- mrjive
- nostupidzone
- tonnerkiller
- Antoine G
- Christian Drechsler
- Ludovic Grossard
- RedmatrixCanada
- Stanislav Lechev [0xAF]
- aweiher
- bufalo1973
- dsp1986
- felixgilles
- ike
- maase2
- mycocham
- ndurchx
- pafcu
- Simó Albert i Beltran
- Manuel Reva
- Manuel Jiménez Friaza
- Gustav Wall aka "neue medienordnung plus"