ASP.NET-ANWENDUNG

Die ASP.NET-Anwendung bzw. das CMS wurde in VB.NET mit dem Visual Studio programmiert.

Action-Controller

Abhängig vom URL-Query-Parametern antwortet der Home-Controller
der ASP.NET-Anwendung auf eine Anfrage eines Browsers wie folgt:

Login (?Login=<LoginPassword>)
• Mit einem Passwort einloggen und einen Schlüsselbund erhalten
• Der Parameter Login kann per GET oder POST übermittelt werden
• Nach dem Login per Login-Seite, automatische weiterleitung Ursprungs-URL

HTML-Seite (?Action=GetHtml oder Action-Parameter nicht angegeben)
• URLs der _UrlRedirections.txt serverseitig weiterleiten (z. B.: "/DJ" -> "/DiscJockey/")
• Site.vbhtml aufrufen und alle _init.vbhtml-Dateien entlang des URL-Pfades rendern
• Falls der Benutzer nicht die Berechtigung "Content" hat, auf die Login-Seite umleiten
• Falls zum URL-Pfad kein physikalischer Pfad existiert, auf naheliegenste Seite umleiten
• Mit Site.vbhtml das Seitenlayout inkl. index-, _bannder-, ... .vbhtml-Dateien rendern
• Gerenderte HTML-Seite als HTTP-Antwort zurückgeben

Bild (?Action=GetImage)
• Berechtigung "Content" erforderlich!
• Bild anhand der URL und Query-String-Parameter rendern
• Bild als HTTP-Antwort zurückgeben

Datei (?Action=GetFile)
• Berechtigung "Content" erforderlich!
• Datei anhand der URL aus dem Homepage-Verzeichnis einlesen
• Datei als HTTP-Antwort zurückgeben
• Datei-URL ohne "." angeben, weil sonst der File-Server und nicht der Controller antwortet

VB-Kommando ausführen (?Action=<Command>)
• Keine besondere Berechtigung ist erforderlich
• Action=CookieNotificationAccepted -> Markiert den Cookie-Hinweis als akzeptiert
• Action=ClearVbhtmlRenderCache -> Leert den Cache-Verzeichnis der vbhtml-Dateien
• Action=ClearEditorUndoCache -> Leert das Cache-Verzeichnis der Backups von vbhtml-Dateien
• Action=ClearImageCache -> Leert das Cache-Verzeichnis der gerenderten Bilder
• Action=ClearSession -> Leert die aktuelle Session
• Seite neu laden und Bestätigung anzeigen

Site.vbhtml

Durch das Rendern der Site.vbhtml-Datei wird der HTML-Code erzeugt, wobei
dynamisch weitere VBHTML-Dateien aus dem Homepage-Verzeichnis eingebunden werden.

Rendern der _init.vbhtml-Dateien
• Alle _init.vbhtml-Dateien der Verzeichnisse des aktuell ausgewählten URL-Pfads werden nacheinander gerendert.

Funktionen bereitstellen
• VB-Funktion zur Berechnung der Farben anhand Helligkeit, Farbton und Sättigung
• VB-Funktion zur Abfrage der Berechtigung des Nutzers
• HTML-Helper-Funktionen um Bilder, Videos und Trennlinien einzubinden

HTML-Head erzeugen
• Meta-Titel generieren (ViewBag.MetaTitle bzw. Ordnername und URL-Pfad)
• Meta-Beschreibung generieren (aus ViewBag.MetaDescription übernehmen)
• Meta-Logo-Bild für Vorschau in WhatsApp einbinden
• CSS-File einbinden (/_Data/layout.css)
• Icon-Bild einbinden (/_Data/favicon.ico)
• JavaScript- und jQuery-Module einbinden (/_Data/.js)
• Google-Analytics abrufen

HTML-Body erzeugen
• Render-Fehler von VBHTML-Dateien ausgeben
• Ebenen des ausgewählten URL-Pfads durchlaufen und wie folgt rendern:
• Banner rendern (_banner.vbhtml-Datei)
• Navigationsleiste rendern (_banner.vbhtml-Datei)
• Falls nicht letze Ebene, nächste Ebene (aus Banner und Navigationsleiste) rendern
• Editor in iFrame ausgeben (WebFormFileEditor.aspx-WebForm)
• Meldungen ausgeben (z. B. wenn Login erfolgreich war)
• Inhalt rendern (_index.vbhtml-Datei)
• Fußzeile rendern (_footer.vbhtml-Datei, wenn nicht vorhanden die aus Überordnern)

WebFormFileEditor.aspx

Der Editor wird vom Browser als ASP.NET-WebForm in einem iFrame angezeigt.

Funktionsumfang
• Rückgängigfunktion (erstellt beim Speichern ein Backup des Codes)
• Textdateien bearbeiten, Bilddateien anzeigen
• Dateien und Ordner erstellen, umbenennen und löschen
• beim Speichern & Anwenden wird die Seite per Java Script neu geladen
• Datei-Upload per POST in den ausgewählten Ordner
• Code-Highlighting (nicht bei Smartphone-Browsern)

VB-Module

VisualBasic-Module werden im Action-Controller serverseitig ausgeführt.

ModuleRender.vb
• Rendert VBHTML-Dateien z. B.: _index.vbhtml, _banner.vbhtml, ... zu HTML-Code
• Vor dem Rendern werden die Dateien in den Render-Cache des Server-Verzeichnises kopiert.
• Fehler beim Rendern werden beim nächsten Seitenaufruf übersprungen und angezeigt.

ModuleUrlRedirection.vb
• Serverseitige Weiterleitungen von URLs (z. B.: "/DJ" nach "/DiscJockey/")
• Weiterleitungen werden in der _UrlRedirections.txt-Datei definiert.

ModuleUrlFileSystem.vb
• Zurordnung von URL-Pfaden und physikalischen Pfaden
• Beim Zuordnen werden nur Buchstaben und Zahlen beachtet und Umlaute gewndelt.
• "/" am Ende eines Pfads kennzeichnet Verzeichnis
/Aktivitaeten/ULFlugzeug/Image1jpg (URL-Format mit dem intern gearbeitet wird)
\06 Aktivitäten\11 UL-Flugzeug\24 Image1.jpg (aus URL abgel. physikalischer Pfad)
/Aktivitäten/11 UL-Flugzeug/24 Image1.jpg (akzeptiertes URL-Format)
/Aktivitäten/11/24 Image1 (akzeptiertes URL-Format)
/Aktivitäten/11/24 (akzeptiertes URL-Format)
/Aktivität/FlugzAug/Image1 (Schreibfehler wird von Suche aufgelöst)

ModuleSearch.vb
• Sucht nach ähnlichster URL (durchsucht auch Überschriften)
• Durchläuft hierzu alle URLs zu denen der Benutzer "Access"-Rechte hat
JavaScriptAddAnchorsToHeaders.js ertellt zu allen Überschriften HTML-Anker
• Zu weit abweichende Suchanfragen werden zu "/" aufgelöst
• Beispiel: "/DJ/TontechnikBOX" -> "/DiscJockey/Tontechnik/#DJBOX"

ModuleSession.vb
• Jede Session wird als XML-Datei im Session-Cache abgelegt. • Der SessionId-Cookie enthällt den Session-Dateiname (Erstelldatum & MD5-Hash & .xml)
• Die Ablaufzeit der Session wurde im ModuleSession auf 30 Tage festgelegt.
Folgende Objekte werden in der Session gehalten:
SessionId: Session-ID bzw. Dateiname der Session-Datei
DateOfCreation: Erstell-Datum der Session (keine Funktion, nur zur Anzeige)
DateOfExpires: Ablauf-Datum der Session (keine Funktion, nur zur Anzeige)
CookieNotificationAccepted: Cookie-Hinweis akzeptiert
LoginPassword: Passwort, mit dem sich der Benutzer eingeloggt hat.
PageHistory: Verlauf der besuchten Seiten (keine Funktion, nur zur Anzeige)
ControllerTraffic: Verlauf der Serveranfragen (keine Funktion, nur zur Anzeige)
Messages: Meldungen, die beim nächsten Seitenaufruf überhalb der H1 angezeigt werden.
RenderErrors: Fehlermeldungen von Dateien, die nicht gerendert werden konnten.
LastSelectedUrl: Zuletzt ausgewählte Seite unabhängig von den Zugangsrechten
LastUnlockedSelectedUrl: Zuletzt ausgewählte Seite mit Leserechten "Content"

ModuleLogin.vb
• Ein Benutzer erhält durch ein Passwort einen Schlüsselbund. (_PasswordKeyMapping.txt)
• Jede Seite hat Schlüssellöcher denen Rechte zugeordnet sind. (_KeyHoles.txt)
• Der Benutzer erhält somit seitenabhängig Rechte, die Beim Rendern Inhalte freischalten.
• Schlüssellöcher der Unterseiten überschreiben die Schlüssellöcher der Oberseiten
Passwort (z. B. supernova, 120390, ...)
- Groß- und Kleinschreibung sowie Sonderzeichen werden ignoriert
Schlüssel bzw. Schlüssellöcher (z. B. *, Gast, Freund, Johannes, ...)
- Das Schlüsselloch "*" kann jeder Benutzer öffnen, weil den Schlüssel "*" jeder hat.
Rechte (z. B. *, Access, Navigation, Content, Video, Editor, ...)
*
- Erlangt ein Benutzer das Recht "*", so darf er alles.
NoInherit
- Erlangt ein Benutzer diese Recht, werden alle Schlüsselloch-Dateien der Oberseiten ignoriert.
Access
- Durchlaufen von Seiten (wird benötigt, um die Seite per Suche zu finden)
Navigation
- Erscheinen der Seite in der Navigations-Leiste
- Erlangt ein Benutzer das Recht "Navigation" aber nicht "Content", wird "🔒" angezeigt
Content
- Anzeige des Inhalts einer Seite _index.vbhtml-Datei
- Herunterladen von Dateien und Bildern der Seite
Video
- Anzeige von Videos auf einer Seite
"Editor
- Anzeige des Editors zum Bearbeiten von Dateien der Seite
beliebig"
- Definition beliebiger Rechte möglich (rechte Spalte in _KeyHoles.txt)
- Mit Model.HasUserPermission("beliebig") wird die Verfügbarkeit des Rechts geprüft.

ModuleCacheGarbageCollector.vb
• Begrenzt in den Caches die Dateianzahl, Ordnergröße und das Alter der Dateien.
• Das Änderungsatum von Bilder und Sessions wird bei jedem Lesezugriff aktualisiert.
• Die Cache-Garbage-Collection wird in Hintergrundthreads 2 Sekunden verzögert ausgeführt.
• Folgende Parameter wurden in ModuleCacheGarbageCollector.vb gesetzt:
- ImageCache: 1500 Stück, 500 MB, 90 Tage
- SessionCache: 1000 Stück, 500 MB, 90 Tage (Dateien < 2kB nach 1 Std. bevorzugt)
- EditorUndoChache: 1000 Stück, 100 MB, 90 Tage
- VbhtmlRenderCache: 200 Stück, 100 MB, 90 Tage

ModuleImageProvider.vb
• Erstellt den HTML-Code von Bilder beim Rendern der VBHTML-Dateien.
• Bearbeitet Bilder und erstellt Thumbnails beim abruf durch den Browser.
• Näheres unter Bilder-Einbinden

ModuleUtility.vb
• Objekte zerstören und Garbage-Collection erzwingen
• Farben von Farbraum HSL in den Farbraum RGB konvertieren

JS-Module

JavaScript-Module werden vom Browser geladen und clientseitig ausgeführt.

JavaScriptZoom.js
• Passt die Schriftgröße (rem) und somit die Seitenbreite an die Fensterbreite an.
• Bei Smartphone-Browsern ist diese Funktion deaktiviert.

JavaScriptMenuDontWrap.js
• Verkleinert die Schirftart der Menüleisten so, dass alle Einträge in eine Zeile passen.

JavaScriptMenuFixed.js
• Erstellt eine Kopie aller Navigationsleisten und blendet sie beim Hochscrollen oben ein.

JavaScriptImageLoadOrder.js
• Veranlasst, dass die Bilder von oben nach unten nacheinander geladen werden.
• Es werden immer zwei Bilder gleichzeitig geladen.
• Jeder HTML-IMG-Tag muss anfangs den URL-Parameter "scr-temp" stat "scr" haben.
• Um das Laden anzustoßen wird der Parameter "scr-temp" zu "scr" umbenannt.
• Beispiel: <img src-temp="Image.jpg" /> → <img src="Image.jpg" />

JavaScriptAddAnchorsToHeaders.js
• Fügt zu allen Überschrifften (HTML-H-Tag) einen Anker hinzu.
• Die Anker können von der Suche gefunden und angesprungen werden.
• Beispiel: <h2>3-Äpfel</h2> -> <h2><a name="3Äpfel">3-Äpfel</a>
• Link zu Anker: <a href="/#3Äpfel>"

JavaScriptFancyImageBoxSettings.js
• Initialisieren der Fancy-Image-Box zum Vergrößern von Bildern

JavaScriptGoogleAnalytics.js
• Aufruf von Google Analytics