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