====== Extranet Plugin ====== ---- plugin ---- description: Restreint pages, mĂ©dias et actions pour les visiteurs extranet author : Valentin LORTET email : contact@valentinlortet.fr type : Action, Syntax, Helper lastupdate : 2026-03-13 compatible : Librarian depends : prosemirror conflicts : similar : tags : Access, Extranet, Intranet, Proxy, Security, Helper downloadurl: https://github.com/Lortet/dokuwiki-plugin-extranet/zipball/master bugtracker : https://github.com/Lortet/dokuwiki-plugin-extranet/issues sourcerepo : https://github.com/Lortet/dokuwiki-plugin-extranet/ donationurl: screenshot_img : ---- đŸ‡«đŸ‡· **Français** | [[plugin:extranet|🇬🇧 English]] | [[de:plugin:extranet|đŸ‡©đŸ‡Ș Deutsch]] | [[es:plugin:extranet|đŸ‡Ș🇾 Español]] ===== Installation ===== Installer le plugin depuis le [[fr:plugin:extension|Gestionnaire d'extensions]] avec l'URL ci-dessus, ou en copiant le dossier dans ''lib/plugins/extranet''. ===== Description ===== Le plugin **extranet** permet : * de dĂ©tecter si une requĂȘte vient de l'extranet Ă  partir d'une valeur configurable de ''$_SERVER'' ; * de restreindre l'affichage des pages et des mĂ©dias ; * de dĂ©sactiver certaines actions DokuWiki pour les visiteurs extranet ; * d'appliquer des rĂšgles globales par filtre ; * d'ajouter des exceptions par page avec ''~~NOEXTRANET~~'' et ''~~EXTRANET~~'' ; * de s'intĂ©grer Ă  ProseMirror pour conserver ces macros en Ă©dition WYSIWYG. Le plugin est adaptĂ© Ă  une logique de segmentation intranet/extranet. Il complĂšte les ACL, mais ne remplace pas un vrai contrĂŽle d'accĂšs. ===== ParamĂštres ===== ^ Nom ^ Description ^ Valeur par dĂ©faut ^ | request_match_key | ClĂ© de ''$_SERVER'' utilisĂ©e pour dĂ©terminer si la requĂȘte vient de l'extranet. Peut ĂȘtre ''REMOTE_ADDR'' ou une clĂ© ''HTTP_*''. | '''' | | extranet_match_list | Liste de valeurs considĂ©rĂ©es comme extranet, sĂ©parĂ©es par des virgules. | '''' | | extranet_match_regex | Regex permettant de dĂ©tecter une requĂȘte extranet Ă  partir de la valeur lue. | '''' | | default_policy | Politique par dĂ©faut : ''allow'', ''block'', ''force_allow'' ou ''force_block''. | ''allow'' | | filter_list | Liste d'identifiants de pages ou mĂ©dias ciblĂ©s par la politique. Supporte les IDs exacts, namespaces finissant par '':'', et jokers ''*''. | '''' | | filter_regex | Regex complĂ©mentaire pour cibler pages ou mĂ©dias. | '''' | | hide_files | Gestion des mĂ©dias restreints : ''all'', ''except_pageicons'' ou ''none''. | ''none'' | | disable_actions | Actions DokuWiki dĂ©sactivĂ©es pour les visiteurs extranet. | ''admin,edit,preview,save,revisions,diff,export_raw,export_xhtml,export_xhtmlbody,permalink,register'' | | restricted_disable_actions | Actions supplĂ©mentaires dĂ©sactivĂ©es seulement quand la page courante est restreinte. | '''' | | preserve_first_title | Conserver le premier titre quand une page est masquĂ©e. | ''true'' | | message_prefix | PrĂ©fixe ajoutĂ© avant le message de restriction. | '''' | | message_suffix | Suffixe ajoutĂ© aprĂšs le message de restriction. | '''' | ===== CompatibilitĂ© ===== Les anciennes clĂ©s de configuration suivantes restent acceptĂ©es : * ''server_ip_key'' * ''extranet_ip_list'' * ''extranet_ip_regex'' Les nouveaux noms sont toutefois Ă  privilĂ©gier : * ''request_match_key'' * ''extranet_match_list'' * ''extranet_match_regex'' ===== Utilisation ===== Deux macros sont disponibles : * ''~~NOEXTRANET~~'' : bloque la page depuis l'extranet quand la politique l'autorise ; * ''~~EXTRANET~~'' : autorise la page depuis l'extranet quand la politique l'autorise. Comportement selon ''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Ă©. ===== 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-/'' ===== API Helper ===== Charger le helper : ''$extranet = plugin_load('helper', 'extranet');'' ==== MĂ©thodes principales ==== ^ MĂ©thode ^ Depuis ^ Description ^ | ''getDefaultPolicy()'' | ''2026-03-13'' | Retourne la politique par dĂ©faut effective. | | ''getRequestMatchKey()'' | ''2026-03-13'' | Retourne la clĂ© ''$_SERVER'' utilisĂ©e pour la dĂ©tection. | | ''getExtranetMatchList()'' | ''2026-03-13'' | Retourne la liste des valeurs considĂ©rĂ©es comme extranet. | | ''getExtranetMatchRegex()'' | ''2026-03-13'' | Retourne la regex de dĂ©tection extranet. | | ''isExtranetRequest()'' | ''2026-03-13'' | Indique si la requĂȘte courante est traitĂ©e comme extranet. | | ''isPageVisibleFromExtranet($id, $content = null)'' | ''2026-03-13'' | Indique si une page est visible depuis l'extranet. | | ''isMediaVisibleFromExtranet($mediaID)'' | ''2026-03-13'' | Indique si un mĂ©dia est visible depuis l'extranet. | | ''isPageAllowed($id, $content = null)'' | ''2026-03-13'' | Indique si une page est autorisĂ©e dans le contexte courant. | | ''isMediaAllowed($mediaID)'' | ''2026-03-13'' | Indique si un mĂ©dia est autorisĂ© dans le contexte courant. | | ''parseRuleList($raw)'' | ''2026-03-13'' | Convertit une configuration de rĂšgles en tableau exploitable. | | ''idMatchesRule($id, $rule)'' | ''2026-03-13'' | Teste un identifiant contre une rĂšgle exacte, namespace, joker ou regex. | ===== Fonctionnement ===== La dĂ©tection extranet repose sur une valeur lue dans ''$_SERVER'' : * la valeur brute complĂšte est testĂ©e ; * si elle contient des virgules, chaque Ă©lĂ©ment sĂ©parĂ© est aussi testĂ©. Cela permet de couvrir : * une IP directe ; * un header de type ''X-Forwarded-For'' ; * un marqueur rĂ©seau injectĂ© par proxy ; * un nom d'upstream ou de frontal. Quand une page est restreinte : * le cache est sĂ©parĂ© entre intranet et extranet ; * le contenu wiki est remplacĂ© par un message configurable ; * le premier titre peut ĂȘtre conservĂ© si ''preserve_first_title'' est activĂ©. Quand un mĂ©dia est restreint et que ''hide_files'' n'est pas Ă  ''none'', le plugin renvoie une image dĂ©diĂ©e Ă  la place du fichier rĂ©el. ===== Notes ===== * Le plugin ne doit pas ĂȘtre vu comme un remplacement des ACL. * La fiabilitĂ© dĂ©pend du marqueur transmis par l'infrastructure web. Un header non fiable ou forgĂ© rendra la dĂ©tection non sĂ»re.