Inkompatibilitäts-Änderungen (Breaking Changes) für Zammad 4.0

Zammad 4.0 beinhaltet nicht nur Funktionen, die einen Major Release wert sind. Wir haben die Gelegenheit auch genutzt, um Funktionen und Schnittstellen aus verschiedenen Gründen zu ändern oder komplett zu entfernen. Die entsprechenden Details werden im Folgenden näher erläutert und nötige Anpassungen beschrieben.

Manuelle Aktionen


Wir versuchen, manuelle Aktionen bei jeder neuen Zammad-Version zu vermeiden. In der Regel gelingt uns dies auch sehr gut, aber manchmal geht es nicht anders. Im Folgenden sind manuelle Anpassungen beschrieben, sofern die Funktionalität genutzt wird.

Elasticsearch Index aktualisieren


Achtung: Dieser Vorgang kann je nach Datenmenge des Systems mehrere Stunden in Anspruch nehmen.

Hinweis: Die folgenden manuellen Aktionen betreffen nur Zammad-Systeme, die nicht durch den Paketmanager des Betriebssystems installiert wurden. Bei Paketinstallationen wird die Aktion automatisch ausgeführt.


Für die neuen Reporting-Funktionalitäten war es notwendig, die Struktur des Elasticsearch-Indexes zu ändern. Daher muss der Elasticsearch-Index neu gebaut werden, indem folgender Befehl ausgeführt wird:


rake searchindex:rebuild


Änderung der Struktur von erweiterten Suchabfragen


Für die neuen Reporting-Funktionalitäten war es notwendig, dass sich die Struktur des Elasticsearch-Indexes ändert - und damit auch die Struktur von erweiterten Suchabfragen.


To-do:
Statt ticket.group = Support muss nun ticket.group.name = Support verwendet werden. Der unterschied ist das .name.


Weiterführende Informationen und Beispiele sind in der To-do Dokumentation zu finden.


Facebook Berechtigungen


Seit die Zammad-Facebook-Integration veröffentlicht wurde, ist es schon etwas her. In der Zwischenzeit hat sich in Sachen Facebook und der verwendeten Schnittstelle viel getan. Nun ist es soweit, dass die von Zammad verwendete Schnittstelle von Facebook eingestellt wird und nicht weiter verwendet werden kann. Daher haben wir die Anbindung auf die derzeit aktuellste Facebook-Schnittstellenversion aktualisiert. Im Zuge dessen ist es nötig, die Berechtigungen zu aktualisieren, da sich die Bezeichnung und der Umfang auf der Seite von Facebook geändert haben.


Um die neuen Berechtigungen für Zammad zu aktivieren, muss die Facebook-Integration aktualisiert werden. Dazu muss eine neue Facebook-Integration hinzugefügt und dabei die selben API-Zugangsdaten verwendet werden. Zammad erkennt die Zugangsdaten und aktualisiert die Integration, statt eine neue hinzuzufügen.


Entfernte Funktionalitäten


Folgende Funktion wurden komplett entfernt und stehen ab Zammad 4.0 nicht mehr zur Verfügung. Grundsätzlich wurden sie nur selten bis gar nicht verwendet. Die Gründe der Entfernung sind allerdings andere.


Facebook Benutzer-Beiträge


Facebook stand in der Vergangenheit häufiger beim Thema Datenschutz in der Kritik. Unter Anderem war es Dritten möglich, über öffentliche Schnittstellen auf die Beiträge von Benutzern zuzugreifen. Durch die ausgewerteten Daten ließen sich eigene Personenprofile erstellen, die dann zu illegalen Zwecken genutzt wurden.


Zammad nutzt die gleichen Schnittstellen, um neben Facebook Firmen-Seiten auch Benutzer-Seiten zu verwalten und Beiträge zu importieren, um sie zu beantworten.


Diese Schnittstelle wurde von Facebook deaktiviert und entfernt. Somit steht die Funktion auch Zammad nicht mehr zur Verfügung. Firmen-Seiten sind davon nicht betroffen und können weiterhin in Zammad integriert und verwendet werden.


Generic OAuth2 Provider


Mit Zammad soll es möglich sein, neben den bekannten OAuth2-Anbietern wie Facebook, Microsoft, etc., auch andere oder eigene hausinterne OAuth2-Anbieter zur Authentifizierung von Benutzern einfach integrieren zu können. Leider ist dies mit dem "Generic OAuth2 Provider" nicht möglich, was immer wieder zu Verwirrung und Fragen führt. Daher haben wir uns dazu entschieden, die Funktion bis auf weiteres komplett zu entfernen.


In Zukunft soll es die beschriebene Funktion geben. Sie können dazu https://github.com/zammad/zammad/issues/1431 abonnieren, um über den Fortschritt informiert zu werden.


Änderungen an internen und REST-Schnittstellen


Zammad ermöglicht durch die offene Architektur eine Vielzahl von Erweiterungen und Anbindungen. Dabei wird immer auf Schnittstellen zurückgegriffen, seien es interne Code-Schnittstellen oder aber die HTTP REST-Schnittstelle für API-Clients. Diese Schnittstellen werden von Zeit zu Zeit hinzugefügt, angepasst oder entfernt. Im folgenden werden diese Änderungen beschrieben.


HTTP Status Code 401 / 403


In der Vergangenheit wurde der HTTP Status Code 401 (Unauthorized) fälschlicherweise dazu verwendet, um fehlende Zugriffsberechtigungen zu melden. Dies sorgte dafür, dass in manchen SSO-Setups Benutzer automatisch ausgeloggt wurden, sobald sie unberechtigten Zugriff auf Ressourcen gesucht haben. Das geht schneller als gedacht, wenn zum Beispiel ein Ticket in der eigenen Taskleiste in eine Gruppe verschoben wird, in der man keine Berechtigungen hat.


Der richtige HTTP Status-Code dafür ist 403 (Forbidden). Wir haben die entsprechenden Stellen korrigiert. Zammad liefert nun 401 als HTTP Status bei Fehlern bei der Anmeldung zurück und bei Zugriff ohne Berechtigung ab sofort 403 statt 401. Dies muss ggf. in Clients oder sonstigen Integrationen, die direkt auf die HTTP REST-API zugreifen, berücksichtigt werden.


Coffeescript API Refactoring


Um Memory Leaks zu beheben und die Architektur der WebApp zu verbessern, wurden Teile der Coffeescript API refactored. Uns sind nur sehr wenige Erweiterungen außerhalb unserer Codebase bekannt, die davon direkt betroffen sind.


Die nötigen Änderungen sind direkt in der Commit-Nachricht beschrieben: https://github.com/zammad/zammad/commit/5ee6418c18ad723819d03431ae8de118624bad73


Delayed::Job wird durch ActiveJob abgelöst


Für die Verarbeitung von asynchronen, im Hintergrund ausgeführten Prozessen greift Zammad auf das Ruby gem delayed_job zurück. Dies wird vorerst auch weiterhin der Fall sein.


Um die direkte Abhängigkeit zu lösen, wird nach und nach von Delayed::Job auf Rails ActiveJob umgestellt. Die Verwendung von Delayed::Job ist als nicht länger unterstützt anzusehen. Wir behalten uns vor, die Abhängigkeit von Delayed::Job ab Zammad 4.0 jederzeit ohne weitere Vorankündigung zu entfernen.


Rails::Observers wird durch Active Record Callbacks abgelöst


Rails::Observers waren Teil vom Rails Framework, als Zammad ursprünglich entwickelt wurde. Sie wurden und werden verwendet, um auf die Erstellung, Änderung oder das Entfernen von Objekten zu reagieren. Mit Rails Version 4.0 wurden Rails::Observers aus dem Rails Framework entfernt und in das eigene rails-observers Gem verschoben. Anstelle von Rails::Observers sollen nun die Active Record Callbacks in Verbindung mit Rails Concerns verwendet werden. Das rails-observers Gem verwendet intern selbst Active Record Callbacks.


Um die direkte Abhängigkeit zu lösen, wird nach und nach von Rails::Observers auf Active Record Callbacks umgestellt. Die Verwendung von Rails::Observers ist als nicht länger unterstützt anzusehen. Wir behalten uns vor, die Abhängigkeit von Rails::Observers ab Zammad 4.0 jederzeit ohne weitere Vorankündigung zu entfernen.