1# Extranet 2 3 Français | [ English](README_EN.md) | [ Deutsch](README_DE.md) | [ Español](README_ES.md) 4 5Plugin DokuWiki pour restreindre l'affichage des pages, des médias et de certaines actions lorsque la requête provient de l'extranet. 6 7Le plugin peut : 8- détecter l'extranet à partir d'une valeur de `$_SERVER` configurable ; 9- appliquer une politique par défaut `allow`, `block`, `force_allow` ou `force_block` ; 10- filtrer des pages et médias par identifiant exact, namespace, joker ou regex ; 11- masquer le contenu d'une page restreinte par un message configurable ; 12- remplacer les médias restreints par une image neutre ; 13- désactiver certaines actions DokuWiki pour les visiteurs extranet ; 14- gérer les macros `~~NOEXTRANET~~` et `~~EXTRANET~~` ; 15- s'intégrer à ProseMirror pour conserver correctement cet état en mode WYSIWYG. 16 17## Utilisation 18 19Deux macros sont disponibles dans les pages : 20 21- `~~NOEXTRANET~~` : interdit la page depuis l'extranet quand la politique le permet ; 22- `~~EXTRANET~~` : autorise la page depuis l'extranet quand la politique le permet. 23 24Le comportement exact dépend de `default_policy` : 25 26- `allow` : tout est autorisé sauf les pages filtrées ou marquées `~~NOEXTRANET~~` 27- `block` : tout est bloqué sauf les pages filtrées ou marquées `~~EXTRANET~~` 28- `force_allow` : seules les règles de filtre s'appliquent, `~~NOEXTRANET~~` est ignoré 29- `force_block` : seules les règles de filtre s'appliquent, `~~EXTRANET~~` est ignoré 30 31## Configuration 32 33Dans le gestionnaire de configuration : 34 35- `request_match_key` : clé `$_SERVER` utilisée pour détecter l'extranet, par exemple `REMOTE_ADDR` ou un header `HTTP_*` 36- `extranet_match_list` : liste de valeurs considérées comme extranet, séparées par des virgules 37- `extranet_match_regex` : regex permettant d'identifier l'extranet à partir de la valeur lue 38- `default_policy` : politique d'accès par défaut 39- `filter_list` : liste de pages ou médias concernés par la politique 40- `filter_regex` : regex complémentaire pour cibler pages ou médias 41- `hide_files` : applique ou non les restrictions aux médias 42- `disable_actions` : actions DokuWiki désactivées pour les visiteurs extranet 43- `restricted_disable_actions` : actions supplémentaires désactivées seulement si la page courante est restreinte 44- `preserve_first_title` : conserve le premier titre lors du masquage d'une page 45- `message_prefix` : contenu ajouté avant le message de restriction 46- `message_suffix` : contenu ajouté après le message de restriction 47 48Compatibilité : 49 50- `server_ip_key` 51- `extranet_ip_list` 52- `extranet_ip_regex` 53 54Ces anciens paramètres restent acceptés pour compatibilité, mais les nouveaux noms sont à privilégier. 55 56## Exemples 57 58Détection par IP directe : 59 60- `request_match_key = REMOTE_ADDR` 61- `extranet_match_regex = /^10\.100\./` 62 63Détection par header proxy : 64 65- `request_match_key = HTTP_X_NETWORK_ZONE` 66- `extranet_match_list = extranet` 67 68Détection par nom d'upstream : 69 70- `request_match_key = HTTP_X_UPSTREAM_HOST` 71- `extranet_match_regex = /^frontend-ext-/` 72 73## Ce que le helper fournit 74 75Charger le helper : 76 77```php 78$extranet = plugin_load('helper', 'extranet'); 79``` 80 81Méthodes principales : 82 83- `getDefaultPolicy()` : retourne la politique par défaut effective 84- `getRequestMatchKey()` : retourne la clé `$_SERVER` utilisée pour la détection 85- `getExtranetMatchList()` : retourne la liste de valeurs configurées 86- `getExtranetMatchRegex()` : retourne la regex configurée 87- `isExtranetRequest()` : indique si la requête courante est considérée comme extranet 88- `isPageVisibleFromExtranet()` : indique si une page est visible depuis l'extranet 89- `isMediaVisibleFromExtranet()` : indique si un média est visible depuis l'extranet 90- `isPageAllowed()` : indique si la page est autorisée dans le contexte courant 91- `isMediaAllowed()` : indique si le média est autorisé dans le contexte courant 92- `parseRuleList()` : convertit une liste de règles en tableau exploitable 93- `idMatchesRule()` : teste un identifiant contre une règle 94 95## Cache et comportement 96 97Le plugin segmente le cache de rendu pour distinguer les visiteurs intranet et extranet. 98 99Quand une page est restreinte, son contenu est remplacé par un message configurable. Si `preserve_first_title` est actif, le premier titre est conservé. 100 101Si `hide_files` est activé, les médias restreints sont remplacés par une image dédiée. 102 103## Remarque 104 105Le 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. 106