MSP: Vision Document HÜ "iCalendar"

Aus THM-Wiki
Wechseln zu: Navigation, Suche

Vision

Introduction

Der Kalender in eStudy ermöglicht derzeit auf relativ einfache Art und Weise das Verwalten von Terminen, sowohl für einzelne Benutzer, als auch ganze Teams, Projekte oder Kurse. Im Rahmen einer Umfrage, an der alle Benutzer der Kollaborationsplattform eStudy teilnehmen konnten, hat sich herausgestellt, dass die Anwender eine Anbindung an externe Anwendungen wünschen. Derzeit fehlt jedoch die Möglichkeit, diesen Kalender auch mit externen Werkzeugen zu bearbeiten. Anwendungen wie Apples iCal, Mozilla Thunderbird, Lotus Notes als auch Microsoft Outlook sind in der Lage, Kalender im iCalendar-Format sowohl einzulesen, als auch zu bearbeiten und wieder zu veröffentlichen. Die Möglichkeit einer Anbindung dieser Programme soll nun für den Kalender von eStudy realisiert werden.

Business Needs/ Requirements

  • Ein Benutzer soll seinen individuellen Kalender in eine externe Anwendung importieren können.
  • Persönliche Termine in einem Kalender sollen extern bearbeitbar sein.
  • Ein Benutzer soll Termine in den eStudy-Kalender importieren können.

Product/ Solution Overview

Die GUI des bestehenden Kalenders soll erweitert werden und Funktionalität zum Import, wie auch Export von iCalendar-Datein bereit zu stellen. Als fertiges Produkt soll die Möglichkeit der Nutzung des eStudy-Kalenders durch externe Programme realisiert werden. Als gemeinsames Format für den Datenaustausch soll zudem das standardisierte iCalendar-Format gemäß RFC 2445 eingesetzt werden.

Major Features

Die wichtigsten Features sollen hierbei sein:

  • Der Benutzer kann über einen Link auf seinen eStudy-Kalender mit Anwendungen wie Apples iCal, Mozilla Thunderbird, Lotus Notes als auch Microsoft Outlook auf seine Termine zugreifen.
  • Änderungen an persönlichen Terminen, welche innerhalb einer externen Anwendung vorgenommen wurden, sollen ebenfalls wieder in eStudy verfügbar gemacht werden können.
  • Externe iCalendar-Dateien sollen per Upload als private Termine importiert werden können.

Scope Limitations

Ein Benutzer benötigt zum externen Bearbeiten ein Programm, welches mit dem iCalendar-Format umgehen kann.

Other Needs

Absprache mit Herrn Henry, der ebenfalls Änderungen am Kalender-Modul einarbeitet. Hierbei sind Absprachen über die Gestaltung der GUI zu treffen um eine gemeinsame Benutzerschnittstelle zu definieren.


Implementierung

Allgemeines

Nach ersten intensiven Code-Analyse wurde klar, dass die als Vision festgehaltenen Features nicht gar so einfach umgesetzt werden können, wie zunächst geplant. Das oft angepriesende "Framework" schien an dieser Stelle eher einer Ansammlung prozeduralem Codes zu entsprechen. So wurden teilweise in einer Klassendatei bereits vor Beginn der eigentlichen Klasse Ausgaben angewiesen, die sich bei jeder Verwendung dieser Klasse bemerkbar machten. Da es sich hierbei um die Klasse, welche die Daten aus der Datenbank entnehmen sollte, handelte, weder Tests noch klare Trennungen zwischen Ausgabe und Datenbankabfrage vorhanden waren, habe ich mich entschlossen, eine eigene Implementierung einer solchen Klasse zu schreiben. Ein Refactoring der bestehenden Klasse alleine hätte vermutlich die Hälfte der veranschlagten Zeit benötigt, zumal bereits fast 2 Stunden für die Codeanalyse verschwendet wurden. Im Folgenden wurde nun eine schlanke Klasse zu Gewinnung der benötigten Daten implementiert.

Umsetzung

Nun konnte die eigentliche Arbeit an einem Export beginnen. Ein Exportfunktion wurde durch Ansammlung von Events, die als eigenständige Objekte existieren, implementiert. Die Daten hierzu stammen aus der Datenbank. Berücksichtigt werden hier alle Termine eines Benutzers mit folgenden Eigenschaften:

  • Foyer: Jeder Nutzer ist Mitglied im Foyer
  • Kurse: Ermitteln aller Kurse, in dem der Benutzer Mitglied ist und Abfragen kursweiter Termine
  • Teams: Ermitteln aller Teams, in dem der Benutzer Mitglied ist und Abfragen teamweiter Termine
  • Persönlich: Abfragen persönlicher Termine eines Benutzers

Für jeden Termin wird nun ein Event-Objekt angelegt und kann der iCalendar-Export-Klasse übergeben werden. Die iCalendar-Export-Klasse bietet nun Funktionalität, um aus den ihr bekannten Event-Objekten einen Ausgabewert vom Typ String zu generieren, der den Regeln von RFC 2445 entspricht. Kleinere Einschränkungen mussten hier jedoch gemacht werden, da eStudy nicht die vollen Daten eines Termins, wie es bei RFC 2445 verlangt ist, kennt: eStudy kennt nur den Beginn eines Termins, nicht jedoch das Ende.

Die gesamte Funktionalität der Generierung wurde testgetrieben entwickelt, um sicherzustellen, dass die aus der Datenbank erhaltenen Informationen auch korrekt als iCalendar exportiert werden.

Der Hauptteil der Implementierung zum Export war getan. Es ist möglich, aus den Terminen eine gültige iCalendar-Datei zu generieren. Durch Anpassung der Oberfläche der Kalenderansicht wurde ein Link hinzugefügt, der es erlaubt, die Datei herunterzuladen und auf dem lokalen Arbeitsplatz zu speichern. Diese Datei konnte nun in jedes beliebige, iCalendar-fähige, Programm importiert werden. Dies hat jedoch den großen Nachteil, dass Änderungen, die nach einem Export vorgenommen werden, nciht mehr berücksichtigt werden können. Der Export ist an dieser Stelle statisch.

Es stellte sich nun die Frage, wie diese Informationen dynamisch bereitzustellt werden können. Dies ist auch ohne weiteres möglich, denn nahezu alle Programme, die iCalendar unterstützen, sind auch in der Lage, diese Informationen anhand einer URL abzurufen. Ein statischer Export ist also nicht zwingend nötig. Dies wirft allerdings die Frage auf, wie man auf Informationen innerhalb von eStudy zurückgreifen kann, wenn ein Benutzer nicht am Portal angemeldet ist. Hier bietet eStudy die Möglichkeit vom Authentifizierungszwang abzusehen und auch dann Zugriff auf Seiten innerhalb eStudys zu gewähren, wenn man nicht angemeldet ist.

Für den Export der persönlichen Kalenderinformationen ist hier aber die Bekanntgabe der NutzerID erforderlich um auch nur die benötigten Daten zu erhalten. Gerade hier kann von einem Sicherheitsleck gesprochen werden, wenn nur die NutzerID als zusätzlicher Parameter übergeben wird. Ein potentieller Angreifer ist dadurch in der Lage, durch Ausprobieren unterschiedlicher NutzerIDs, verschiedene persönliche und schutzbedürftige Informationen über Benutzer zu erlangen. Gerade im Hinblick auf die Möglichkeit, sehr leicht an die NutzerID eines Benutzers zu gelangen, eine nicht zu unterschätzende Gefahr! Hier wird also eine weitere Information benötigt, ein Schlüssel, der erst in der erforderlichen Kombination NutzerID <-> Schlüssel Zugriff auf die exportierten Daten freigibt. Gewählt wurde hierdas Anmeldedatum, das Datum, an dem die eStudy-Policy akzeptiert wurde und der Loginname der Nutzers. Aus diesen Werten, zu einem langen String konkatiniert, wird der SHA1-Hashwert gebildet und stellt den Schlüssel zum Kalenderexport da. Hier ist auch zu beachten, dass jederzeit weitere personenbezogene Daten, welche an sich nicht ersichtlich sind, mit einbezogen werden können.

Anhand dieser Technik erhält man für seinen iCalendar-Export eine recht umfangreiche URL, zum Beispiel:

https:// estudy.example.org/calendar/export.php?userid=1&token=01a3d4f5ad5678a3d5f64e8745ae4589

Hier die korrekte Kombination NutzerID <-> Schlüssel zu erraten ist für einen Außenstehenden kaum möglich.

Die URL wird komplett in voller Länge in der Profilübersicht des eStudy-Profils angezeigt und kann von dort kopiert werden.

Verwenden des Features

Das neue Feature ist sehr einfach zu benutzen. Möchte ein Anwender lediglich einen aktuellen Auszug seiner Termine als iCalendar-Datei speichern, genügt im Kalender der Mausklick auf "iCalendar-Export" in der Kalender-Überschrift.

Etwas umfangreicher gestaltet sich das Einfügen des Links in Programme wie Mozilla Thunderbird (mit Lightning-Plugin), Microsofts Outlook oder Apples iCal. Der Anwender muss hier seine Profilseite aufsuchen. Hier findet er unter der Überschrift "iCalendar URL" die benötigte URL zu seinem iCalendar. Diese URL muss nun kopiert und in das entsprechende Programm eingetragen werden. Durch diese Methode werden sämtliche Änderungen der Termine ständig auf dem neuesten Stand gehalten, zumindest, wenn eine Netzwerkverbindung besteht.

Aufgetretene Probleme

Wie in den beiden oberen Abschnitten genannt, kam es zu Beginn zu einigen ausschlaggebenden Problemen hinsichtlich des bestehenden Quellcodes. Hier hätte man gut und gerne ein umfangreiches Refactoring anwenden können, um den bestehenden Code wartbar zu machen. Dazu fehlte aber angesichts des Zeit-Budgets von 20 Stunden die Zeit. Weiterhin ist ein Zurücksenden von bearbeiteten Terminen ist hier aus folgenden Gründen problematisch: Der Client sendet nur alle Termine zurück, ohne Betrachtung, ob ein eStudy-Nutzer die Berechtigung hat, diesen Termin zu ändern. Somit müsste eine Prüfung auf Serverseite sattfinden, die wiederum keine Rückmeldung an den Client geben kann, welcher Fehler aufgetreten ist.

Zu bearbeitende Punkte

Von den genannten Features konnte nur das Erste implementiert werden, ein Zurücksenden von bearbeiteten Terminen ist noch nicht möglich, ebenso wie das Einbinden anderer iCalendar-Dateien in den eigenen Kalender. Als Möglichkeit andere iCalendar-Dateien einzubinden, bietet sich hier die seperate Google-Calendar Erweiterung von Herrn Henry MSP:_Vision_Document_HUE_"google-Calendar" an. Eine iCalendar-Datei kann hier in einen bestehenden Google-Kalender importiert, oder es kann ein Verweis auf eine iCalendar-Datei hinzugefügt werden. Sämtliche Termine, die im Google-Kalender sichtbar sind, werden nun in eStudy angezeigt.

--Volkmer-PCV 10:12, 31. Mär. 2009 (UTC)