1====== Extranet Plugin ====== 2 3---- plugin ---- 4description: Restringe páginas, medios y acciones para visitantes de la extranet 5author : Valentin LORTET 6email : contact@valentinlortet.fr 7type : Action, Syntax, Helper 8lastupdate : 2026-03-13 9compatible : Librarian 10depends : prosemirror 11conflicts : 12similar : 13tags : Access, Extranet, Intranet, Proxy, Security, Helper 14 15downloadurl: https://github.com/Lortet/dokuwiki-plugin-extranet/zipball/master 16bugtracker : https://github.com/Lortet/dokuwiki-plugin-extranet/issues 17sourcerepo : https://github.com/Lortet/dokuwiki-plugin-extranet/ 18donationurl: 19screenshot_img : 20---- 21 22[[fr:plugin:extranet| Français]] | [[plugin:extranet| English]] | [[de:plugin:extranet| Deutsch]] | **Español** 23 24===== Instalación ===== 25 26Instalar el plugin desde el [[plugin:extension|Gestor de extensiones]] con la URL anterior, o copiando la carpeta en ''lib/plugins/extranet''. 27 28===== Descripción ===== 29 30El plugin **extranet** puede: 31 * detectar si una solicitud proviene de la extranet a partir de un valor configurable de ''$_SERVER''; 32 * restringir la visualización de páginas y archivos multimedia; 33 * desactivar acciones seleccionadas de DokuWiki para los visitantes de la extranet; 34 * aplicar reglas globales mediante filtros; 35 * añadir excepciones por página con ''~~NOEXTRANET~~'' y ''~~EXTRANET~~''; 36 * integrarse con ProseMirror para conservar estas macros en edición WYSIWYG. 37 38El plugin está pensado para una lógica de segmentación intranet/extranet. Complementa las ACL, pero no sustituye un control de acceso real. 39 40===== Parámetros ===== 41 42^ Nombre ^ Descripción ^ Valor predeterminado ^ 43| request_match_key | Clave de ''$_SERVER'' usada para determinar si la solicitud proviene de la extranet. Puede ser ''REMOTE_ADDR'' o una clave ''HTTP_*''. | '''' | 44| extranet_match_list | Lista de valores separados por comas tratados como extranet. | '''' | 45| extranet_match_regex | Regex usada para detectar una solicitud de extranet a partir del valor configurado. | '''' | 46| default_policy | Política predeterminada: ''allow'', ''block'', ''force_allow'' o ''force_block''. | ''allow'' | 47| filter_list | Lista de IDs de páginas o archivos multimedia afectados por la política. Admite IDs exactos, prefijos de espacio de nombres terminados en '':'', y comodines ''*''. | '''' | 48| filter_regex | Regex adicional para apuntar a páginas o archivos multimedia. | '''' | 49| hide_files | Cómo se gestionan los archivos multimedia restringidos: ''all'', ''except_pageicons'' o ''none''. | ''none'' | 50| disable_actions | Acciones de DokuWiki desactivadas para los visitantes de la extranet. | ''admin,edit,preview,save,revisions,diff,export_raw,export_xhtml,export_xhtmlbody,permalink,register'' | 51| restricted_disable_actions | Acciones adicionales desactivadas solo cuando la página actual está restringida. | '''' | 52| preserve_first_title | Conserva el primer encabezado cuando una página se oculta. | ''true'' | 53| message_prefix | Prefijo insertado antes del mensaje de restricción. | '''' | 54| message_suffix | Sufijo insertado después del mensaje de restricción. | '''' | 55 56===== Compatibilidad ===== 57 58Las siguientes claves de configuración antiguas siguen siendo aceptadas: 59 * ''server_ip_key'' 60 * ''extranet_ip_list'' 61 * ''extranet_ip_regex'' 62 63Conviene usar los nuevos nombres: 64 * ''request_match_key'' 65 * ''extranet_match_list'' 66 * ''extranet_match_regex'' 67 68===== Uso ===== 69 70Hay dos macros disponibles: 71 * ''~~NOEXTRANET~~'' : bloquea la página desde la extranet cuando la política lo permite; 72 * ''~~EXTRANET~~'' : permite la página desde la extranet cuando la política lo permite. 73 74Comportamiento según ''default_policy'': 75 * ''allow'' : todo está permitido excepto las páginas filtradas o las páginas marcadas con ''~~NOEXTRANET~~''; 76 * ''block'' : todo está bloqueado excepto las páginas filtradas o las páginas marcadas con ''~~EXTRANET~~''; 77 * ''force_allow'' : solo se aplican las reglas de filtro, ''~~NOEXTRANET~~'' se ignora; 78 * ''force_block'' : solo se aplican las reglas de filtro, ''~~EXTRANET~~'' se ignora. 79 80===== Ejemplos ===== 81 82Detección por IP directa: 83 * ''request_match_key = REMOTE_ADDR'' 84 * ''extranet_match_regex = /^10\.100\./'' 85 86Detección por cabecera de proxy: 87 * ''request_match_key = HTTP_X_NETWORK_ZONE'' 88 * ''extranet_match_list = extranet'' 89 90Detección por nombre del host upstream: 91 * ''request_match_key = HTTP_X_UPSTREAM_HOST'' 92 * ''extranet_match_regex = /^frontend-ext-/'' 93 94===== API Helper ===== 95 96Cargar el helper: 97''$extranet = plugin_load('helper', 'extranet');'' 98 99==== Métodos principales ==== 100 101^ Método ^ Desde ^ Descripción ^ 102| ''getDefaultPolicy()'' | ''2026-03-13'' | Devuelve la política predeterminada efectiva. | 103| ''getRequestMatchKey()'' | ''2026-03-13'' | Devuelve la clave ''$_SERVER'' usada para la detección. | 104| ''getExtranetMatchList()'' | ''2026-03-13'' | Devuelve la lista de valores tratados como extranet. | 105| ''getExtranetMatchRegex()'' | ''2026-03-13'' | Devuelve la regex de detección de extranet. | 106| ''isExtranetRequest()'' | ''2026-03-13'' | Indica si la solicitud actual se trata como extranet. | 107| ''isPageVisibleFromExtranet($id, $content = null)'' | ''2026-03-13'' | Indica si una página es visible desde la extranet. | 108| ''isMediaVisibleFromExtranet($mediaID)'' | ''2026-03-13'' | Indica si un archivo multimedia es visible desde la extranet. | 109| ''isPageAllowed($id, $content = null)'' | ''2026-03-13'' | Indica si una página está permitida en el contexto actual. | 110| ''isMediaAllowed($mediaID)'' | ''2026-03-13'' | Indica si un archivo multimedia está permitido en el contexto actual. | 111| ''parseRuleList($raw)'' | ''2026-03-13'' | Convierte una configuración de reglas en un array utilizable. | 112| ''idMatchesRule($id, $rule)'' | ''2026-03-13'' | Comprueba un ID frente a una regla exacta, espacio de nombres, comodín o regex. | 113 114===== Funcionamiento ===== 115 116La detección de extranet se basa en un valor leído desde ''$_SERVER'': 117 * se prueba el valor bruto completo; 118 * si contiene comas, también se prueba cada elemento por separado. 119 120Esto permite cubrir: 121 * una IP directa; 122 * una cabecera del tipo ''X-Forwarded-For''; 123 * un marcador de red inyectado por un proxy; 124 * un nombre de host upstream o frontend. 125 126Cuando una página está restringida: 127 * la caché se separa entre intranet y extranet; 128 * el contenido wiki se sustituye por un mensaje configurable; 129 * el primer encabezado puede conservarse si ''preserve_first_title'' está activado. 130 131Cuando un archivo multimedia está restringido y ''hide_files'' no es ''none'', el plugin devuelve una imagen dedicada en lugar del archivo real. 132 133===== Notas ===== 134 135 * El plugin no debe considerarse un sustituto de las ACL. 136 * La fiabilidad depende del marcador de solicitud proporcionado por la infraestructura web. Una cabecera no fiable o falsificable hace que la detección sea insegura. 137