Syncom/Technik
Als Ersatz für das Syncom-System haben wir das neue Forum auf Basis der Software Discourse auf forum.piratenpartei.de eingerichtet. Discourse lässt sich auch per Mail nutzen.
Die hier stehenden Informationen sind rettungslos veraltet. Bitte nicht als Anhaltspunkt nehmen.
Technik
Die synchronisierte Forum/Mailinglisten/Newsserver Struktur wird im folgenden SynCom genannt.
Mailinglisten
Die Bundes-IT verwendet Mailman, andere Landesverbände nutzen teilweise andere Software. Mailman besitzt eine eingebaute Synchronisation mit Newsservern. Diese hat allerdings drei Nachteile:
- Es findet per Standard ein Neuschreiben der Message-ID statt (was zur Zerstörung der Threads führt)
- Beim Post von der Newsgroup zur Mailingliste bleiben Header-Informationen stehen, die verwirrend sein könnten
- Wenn der Newsserver zum Zeitpunkt der Erstellung des Beitrags nicht erreichbar ist, steht er nicht auf dem Newsserver zur Verfügung, es findet kein erneutes Senden statt.
Es existieren Patches für diese Fälle:
- Verwirrende Header-Informationen und Message-ID: http://launchpadlibrarian.net/25653956/400_NNTP-MsgID-Handling.dpatch
- Kein Abbruch des Syncs für alle Listen, wenn in einer Liste falsche Angaben stehen: http://bazaar.launchpad.net/%7Emailman-coders/mailman/2.1/diff/1128
Weitere Tests finden mit der Scriptsammlung SynFU statt. Diese arbeiten über einen speziellen Mailaccount, der bei den Listen als User eingetragen wird. Wenn eine Mail ankommt, wird sie per Procmail verarbeitet:
- Entfernen überflüssiger Header (Path-Angaben etc.).
- Umschreiben des Subjects (entfernen typischer Listenmarkierungen).
- Entfernen typischer Mailinglistenfooter
- Reparieren defekter Header
- U.U. Beachtung spezieller Header-Informationen zur Einflussnahme auf die Synchronisation
Die zweite Option bietet mehr Einflussmöglichkeiten und die Option, praktisch jede Mailinglistensoftware zu verwenden. Der Pflegeaufwand wird vom Mailinglistenadmin auf den Newsserveradmin verschoben.
Newsserver
Als Newsserver wird INN2 verwendet. Um Zugang zum Newsserver news.piratenpartei.de zu erlangen, muss ein Account auf dem Testforum unter http://news.piratenpartei.de angelegt werden. Es wird darüber nachgedacht, die Prüfung auch über das Wiki durchzuführen, auch Single-Sign-On-Lösungen (z.B. über LDAP) sind im Gespräch.
Findet ein Post auf dem Newsserver statt, so wird direkt per Script das Posten ins Forum durchgeführt.
Da sich im Endzustand Newsserver und Forum nicht auf einem System befinden werden, findet die Kommunikation dazwischen per SOAP statt. Die folgenden Dinge müssen per SOAP möglich sein:
- Überprüfung der Anmeldedaten
- Schreiben von Beiträgen
- Übersicht der zur Verfügung stehenden Gruppen (Wird benötigt, wenn wir flexible Gruppenstrukturen haben möchten)
Da die Anmeldung und das Schreiben von Beiträgen getrennte Prozesse sind, beim Schreiben aber die Berechtigungen geprüft werden müssen, stellt sich die Herausforderung, wie die Anmeldedaten zwischen den Prozessen transportiert werden können. Vorschlag:
- Beim Anmelden wird per Login eine Session-ID erzeugt. Diese Session-ID wird auf dem Newsserver (SOAP-Client) zusammen mit der User-ID gespeichert.
- Beim Post wird geschaut, ob zur User-ID (diese wird im "Sender"-Header übertragen) eine Session-ID vorhanden ist. Ist dieses der Fall, wird mit Hilfe dieser ID der SOAP-Befehl zum Schreiben des Beitrags durchgeführt.
- Um Missbrauch zu vermeiden, wird auf der Foren-Seite (SOAP-Server) geprüft, ob die IP-Adresse mit der IP-Adresse der Anmeldung übereinstimmt.
Wenn kein Sender-Header im Artikel existiert (da der Beitrag per Mailingliste erzeugt wurde), meldet sich der Client mit einer speziellen ID per SOAP am Forum an. Unter dieser ID gibt es ein Schreibrecht auf die allgemeinen Gruppen. Beiträge, die so entstanden sind, werden im Forum so markiert, dass erkennbar ist, dass sie von einem nicht angemeldetem User stammen. (phpBB stellt entsprechende Funktionalitäten zur Verfügung) Damit kein Missbrauch stattfinden kann, wird nur diese spezielle User-ID auf dem SOAP-Server für diese Möglichkeit freigeschaltet.
Forum
Es wird phpBB verwendet. Dieses wird um Funktionalitäten erweitert:
- SOAP-API für das Login und das Schreiben von Nachrichten (Erledigt)
- Zusätzliches Feld in der Artikel-Tabelle für die Message-ID (Erledigt)
- Zusätzliches Feld in der Artikel-Tabelle für die Artikel-ID, auf die sich dieser Beitrag bezieht. Dazu wird das Forum so erweitert, dass es neben dem Quote-Button auch immer einen Reply-Button neben jedem Beitrag geben wird. Wird die Nachricht auf diesem Weg beantwortet, wird die ID im Beitrag vermerkt. (Funktionalität ist erledigt, Optik muss angepasst werden)
- In die Funktionen zum Schreiben, Ändern und Löschen von Beiträgen wird ein Hook auf entsprechende Syncfunktionen eingebaut (Erledigt)
- Zusätzliche Felder im Benutzerprofil für den Namen und die Mailadresse die beim Syncen zur Newsgroup erscheinen sollen. (Erledigt)
Programmierung
Fähigkeiten
- Sync zwischen Newsserver und Forum
- Löschen und Ändern wird beidseitig synchronisiert
- X-No-Archive (in Header oder erster Zeile) verhindert Sync mit Forum
- Thread-Zuordnung per Subject-Vergleich bei Mails von Mailreadern ohne References
- Synchronisation der Forenrechte mit dem Newsserver
Richtlinien zur Programmierung
Der SOAP-Server wird in klassenorientiertem PHP5 geschrieben. Es gelten die allgemeinen Richtlinien, d.h.:
- Jede Variable wird initialisiert
- Eine Funktion wird in viele Einzelfunktionen aufgesplittet statt am Ende Mammutfunktionen von mehreren hundert Zeilen zu erhalten
- Bei ähnlichen Aufgaben wird nicht einfach der Code kopiert sondern geschaut, wie der vorhandene Code von allen Stellen aus nutzbar gemacht werden kann
Die SOAP-Clients zum Anmelden und Schreiben von Nachrichten können in einer anderen Sprache (z.B. Perl) geschrieben werden, wenn sich jemand findet, der sich damit auskennt. Ansonsten werden diese Scripte auch in PHP erstellt.
To-Do
- Smileys machen doppelte Leerzeichen vor und nach dem Smiley
- Wandlung Text->BBCode wird komplett überarbeitet (u.A. mit besserer ToFu-Erkennung)
- Der Reply-Button, der die Threads erhält, erhält ein eigenes Icon
- Anhänge müssen synchronisiert werden
- Differenzierte Anmeldung am Newsserver (d.h. Benutzergruppen etc.)
- Post-Funktionalität per SOAP auslagern, damit eventuelle Fehler nicht zum Abbruch des Forenposts führen
- Cache für Login-Prozess, damit man sich auch während eines Forenausfalls am Newsserver anmelden kann
- Bestimmte Zeichen im Subject machen beim Sync zum Forum Probleme, z.B.: < und >
- Mails zum Forum von gesperrten Benutzer/Mailadressen sollen nicht angezeigt werden
- Mails an mehrere Listen werden nicht als Crosspost in allen Gruppen Sichtbar (bei News -> Forum, bei News<->Mail geht dies beim Sync über SynFU)
- Synchronisation gesperrter User zur Newsgroup
Anforderung für die Wandlung Text->BBCode
Eine zu erstellende Routine soll die folgenden Aufgaben erfüllen: Ihr werden 4 Parameter übergeben: Text- und HTML-Teil der zu konvertierenden Nachricht, Text- und HTML-Teil der Nachricht, auf die sich die Nachricht bezieht (kann über References ermittelt werden).
Es müssen dann die folgenden Punkte erledigt werden:
- Text-Markups mit * / und _ müssen in fett, kursiv und unterstrichen gewandelt werden
- Gibt es HTML-Markups, so sind diese in BBCode zu wandeln (HTML hat Priorität vor Text)
- Gequotete Zeilen müssen entsprechend umgewandelt werden (auch hier wieder der Vorrang des HTML, da einige Mailclients leider unsauber quoten)
- Attribution-Lines sollen passend geparsed werden (d.h. aus einem "Hans-Werner Olm schrieb am 30.02.2015" soll ein quote="Hans-Werner Olm" werden. Da es viele verschiedene Formate gibt, sollen die Masken in einer Config-Datei liegen
- ToFu-Erkennung auf Basis des Vergleichs der alten und der neuen Nachricht. Enthält eine Nachricht ab einer Stelle nur noch Inhalte der vorherigen Mail, so soll dieser Teil abgeschnitten werden (Vergleichbar mit dem Webinterface von GMail)
- Gibt es keine Nachricht, auf die sich diese Nachricht direkt bezieht, aber ist sie offensichtlich dennoch ein Reply, so soll ToFu soweit wie möglich ebenfalls entfernt werden (Über Erkennung der Attribution-Line, sowie Erkennung gequoteten Textes) (Hintergrund: Defekte Mailclients, die keine References setzen) Ob eine Nachricht ein Reply ist, wird per externem Parameter angesteuert, damit ein Forward nicht aus Versehen bearbeitet wird.
- Entfernen von Inline-GPG
- Entfernen von Signaturen (evtl. Umwandeln in eine andere Darstellung, d.h. kleiner und/oder andere Farbe)
Checkliste
- Cancel Newsgroup => Forum
- Cancel Forum => Newsgroup
- Supersede Newsgroup => Forum
- Supersede Forum => Newsgroup
- Topic Split (Wo landen Posts aus der NG?)
- Verschieben eines Topics in eine andere Gruppe (Wo landen Posts aus der NG?)
- Weitere Moderationstests (welche?)