# Extranet [🇫🇷 Français](README.md) | [🇬🇧 English](README_EN.md) | 🇩🇪 Deutsch | [🇪🇸 Español](README_ES.md) DokuWiki-Plugin zum Einschränken der Anzeige von Seiten, Mediendateien und bestimmten Aktionen, wenn die Anfrage aus dem Extranet kommt. Das Plugin kann: - das Extranet anhand eines konfigurierbaren `$_SERVER`-Werts erkennen; - eine Standardrichtlinie `allow`, `block`, `force_allow` oder `force_block` anwenden; - Seiten und Mediendateien über exakte IDs, Namensräume, Platzhalter oder Regex filtern; - den Inhalt eingeschränkter Seiten durch eine konfigurierbare Meldung ersetzen; - eingeschränkte Mediendateien durch ein neutrales Bild ersetzen; - ausgewählte DokuWiki-Aktionen für Extranet-Besucher deaktivieren; - die Makros `~~NOEXTRANET~~` und `~~EXTRANET~~` verarbeiten; - sich in ProseMirror integrieren, damit dieser Zustand im WYSIWYG-Modus korrekt erhalten bleibt. ## Verwendung In Seiten stehen zwei Makros zur Verfügung: - `~~NOEXTRANET~~`: sperrt die Seite aus dem Extranet, wenn die Richtlinie dies zulässt; - `~~EXTRANET~~`: erlaubt die Seite aus dem Extranet, wenn die Richtlinie dies zulässt. Das genaue Verhalten hängt von `default_policy` ab: - `allow`: alles ist erlaubt, außer gefilterten Seiten oder Seiten mit `~~NOEXTRANET~~` - `block`: alles ist gesperrt, außer gefilterten Seiten oder Seiten mit `~~EXTRANET~~` - `force_allow`: nur Filterregeln gelten, `~~NOEXTRANET~~` wird ignoriert - `force_block`: nur Filterregeln gelten, `~~EXTRANET~~` wird ignoriert ## Konfiguration Im Konfigurationsmanager: - `request_match_key`: `$_SERVER`-Schlüssel zur Erkennung des Extranets, zum Beispiel `REMOTE_ADDR` oder ein `HTTP_*`-Header - `extranet_match_list`: kommagetrennte Liste von Werten, die als Extranet gelten - `extranet_match_regex`: Regex zur Erkennung des Extranets aus dem konfigurierten Wert - `default_policy`: Standard-Zugriffsrichtlinie - `filter_list`: Liste der Seiten oder Mediendateien, auf die die Richtlinie angewendet wird - `filter_regex`: zusätzliche Regex zum Ansprechen von Seiten oder Mediendateien - `hide_files`: legt fest, ob Einschränkungen auch für Mediendateien gelten - `disable_actions`: DokuWiki-Aktionen, die für Extranet-Besucher deaktiviert werden - `restricted_disable_actions`: zusätzliche Aktionen, die nur deaktiviert werden, wenn die aktuelle Seite eingeschränkt ist - `preserve_first_title`: behält die erste Überschrift bei, wenn eine Seite ausgeblendet wird - `message_prefix`: Inhalt vor der Einschränkungsmeldung - `message_suffix`: Inhalt nach der Einschränkungsmeldung Kompatibilität: - `server_ip_key` - `extranet_ip_list` - `extranet_ip_regex` Diese alten Einstellungen werden weiterhin aus Kompatibilitätsgründen unterstützt, bevorzugt werden sollten aber die neuen Namen. ## Beispiele Erkennung über direkte IP: - `request_match_key = REMOTE_ADDR` - `extranet_match_regex = /^10\.100\./` Erkennung über Proxy-Header: - `request_match_key = HTTP_X_NETWORK_ZONE` - `extranet_match_list = extranet` Erkennung über den Upstream-Hostnamen: - `request_match_key = HTTP_X_UPSTREAM_HOST` - `extranet_match_regex = /^frontend-ext-/` ## Was der Helper bereitstellt Helper laden: ```php $extranet = plugin_load('helper', 'extranet'); ``` Wichtige Methoden: - `getDefaultPolicy()`: gibt die effektive Standardrichtlinie zurück - `getRequestMatchKey()`: gibt den für die Erkennung verwendeten `$_SERVER`-Schlüssel zurück - `getExtranetMatchList()`: gibt die konfigurierte Werteliste zurück - `getExtranetMatchRegex()`: gibt die konfigurierte Regex zurück - `isExtranetRequest()`: prüft, ob die aktuelle Anfrage als Extranet gilt - `isPageVisibleFromExtranet()`: prüft, ob eine Seite aus dem Extranet sichtbar ist - `isMediaVisibleFromExtranet()`: prüft, ob eine Mediendatei aus dem Extranet sichtbar ist - `isPageAllowed()`: prüft, ob eine Seite im aktuellen Kontext erlaubt ist - `isMediaAllowed()`: prüft, ob eine Mediendatei im aktuellen Kontext erlaubt ist - `parseRuleList()`: wandelt eine Regelliste in ein nutzbares Array um - `idMatchesRule()`: prüft eine ID gegen eine Regel ## Cache und Verhalten Das Plugin trennt den Render-Cache, um Intranet- und Extranet-Besucher zu unterscheiden. Wenn eine Seite eingeschränkt ist, wird ihr Inhalt durch eine konfigurierbare Meldung ersetzt. Wenn `preserve_first_title` aktiviert ist, bleibt die erste Überschrift erhalten. Wenn `hide_files` aktiviert ist, werden eingeschränkte Mediendateien durch ein spezielles Bild ersetzt. ## Hinweis Das Plugin basiert auf einem Request-Marker, der von der Web-Infrastruktur geliefert wird. Es eignet sich für die Trennung zwischen Intranet und Extranet, sollte aber nicht als Ersatz für ACLs oder starke Zugriffskontrolle betrachtet werden.