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