# Extranet 🇫🇷 Français | [🇬🇧 English](README_EN.md) | [🇩🇪 Deutsch](README_DE.md) | [🇪🇸 Español](README_ES.md) Plugin DokuWiki pour restreindre l'affichage des pages, des médias et de certaines actions lorsque la requête provient de l'extranet. Le plugin peut : - détecter l'extranet à partir d'une valeur de `$_SERVER` configurable ; - appliquer une politique par défaut `allow`, `block`, `force_allow` ou `force_block` ; - filtrer des pages et médias par identifiant exact, namespace, joker ou regex ; - masquer le contenu d'une page restreinte par un message configurable ; - remplacer les médias restreints par une image neutre ; - désactiver certaines actions DokuWiki pour les visiteurs extranet ; - gérer les macros `~~NOEXTRANET~~` et `~~EXTRANET~~` ; - s'intégrer à ProseMirror pour conserver correctement cet état en mode WYSIWYG. ## Utilisation Deux macros sont disponibles dans les pages : - `~~NOEXTRANET~~` : interdit la page depuis l'extranet quand la politique le permet ; - `~~EXTRANET~~` : autorise la page depuis l'extranet quand la politique le permet. Le comportement exact dépend de `default_policy` : - `allow` : tout est autorisé sauf les pages filtrées ou marquées `~~NOEXTRANET~~` - `block` : tout est bloqué sauf les pages filtrées ou marquées `~~EXTRANET~~` - `force_allow` : seules les règles de filtre s'appliquent, `~~NOEXTRANET~~` est ignoré - `force_block` : seules les règles de filtre s'appliquent, `~~EXTRANET~~` est ignoré ## Configuration Dans le gestionnaire de configuration : - `request_match_key` : clé `$_SERVER` utilisée pour détecter l'extranet, par exemple `REMOTE_ADDR` ou un header `HTTP_*` - `extranet_match_list` : liste de valeurs considérées comme extranet, séparées par des virgules - `extranet_match_regex` : regex permettant d'identifier l'extranet à partir de la valeur lue - `default_policy` : politique d'accès par défaut - `filter_list` : liste de pages ou médias concernés par la politique - `filter_regex` : regex complémentaire pour cibler pages ou médias - `hide_files` : applique ou non les restrictions aux médias - `disable_actions` : actions DokuWiki désactivées pour les visiteurs extranet - `restricted_disable_actions` : actions supplémentaires désactivées seulement si la page courante est restreinte - `preserve_first_title` : conserve le premier titre lors du masquage d'une page - `message_prefix` : contenu ajouté avant le message de restriction - `message_suffix` : contenu ajouté après le message de restriction Compatibilité : - `server_ip_key` - `extranet_ip_list` - `extranet_ip_regex` Ces anciens paramètres restent acceptés pour compatibilité, mais les nouveaux noms sont à privilégier. ## Exemples Détection par IP directe : - `request_match_key = REMOTE_ADDR` - `extranet_match_regex = /^10\.100\./` Détection par header proxy : - `request_match_key = HTTP_X_NETWORK_ZONE` - `extranet_match_list = extranet` Détection par nom d'upstream : - `request_match_key = HTTP_X_UPSTREAM_HOST` - `extranet_match_regex = /^frontend-ext-/` ## Ce que le helper fournit Charger le helper : ```php $extranet = plugin_load('helper', 'extranet'); ``` Méthodes principales : - `getDefaultPolicy()` : retourne la politique par défaut effective - `getRequestMatchKey()` : retourne la clé `$_SERVER` utilisée pour la détection - `getExtranetMatchList()` : retourne la liste de valeurs configurées - `getExtranetMatchRegex()` : retourne la regex configurée - `isExtranetRequest()` : indique si la requête courante est considérée comme extranet - `isPageVisibleFromExtranet()` : indique si une page est visible depuis l'extranet - `isMediaVisibleFromExtranet()` : indique si un média est visible depuis l'extranet - `isPageAllowed()` : indique si la page est autorisée dans le contexte courant - `isMediaAllowed()` : indique si le média est autorisé dans le contexte courant - `parseRuleList()` : convertit une liste de règles en tableau exploitable - `idMatchesRule()` : teste un identifiant contre une règle ## Cache et comportement Le plugin segmente le cache de rendu pour distinguer les visiteurs intranet et extranet. Quand une page est restreinte, son contenu est remplacé par un message configurable. Si `preserve_first_title` est actif, le premier titre est conservé. Si `hide_files` est activé, les médias restreints sont remplacés par une image dédiée. ## Remarque Le plugin repose sur un marqueur de requête fourni par l'infrastructure web. Il est adapté à une logique de segmentation intranet/extranet, mais ne doit pas être considéré comme un remplacement des ACL ou d'un contrôle d'accès fort.