====== Extranet Plugin ====== ---- plugin ---- description: Restringe páginas, medios y acciones para visitantes de la 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 : ---- [[fr:plugin:extranet|🇫🇷 Français]] | [[plugin:extranet|🇬🇧 English]] | [[de:plugin:extranet|🇩🇪 Deutsch]] | 🇪🇸 **Español** ===== Instalación ===== Instalar el plugin desde el [[plugin:extension|Gestor de extensiones]] con la URL anterior, o copiando la carpeta en ''lib/plugins/extranet''. ===== Descripción ===== El plugin **extranet** puede: * detectar si una solicitud proviene de la extranet a partir de un valor configurable de ''$_SERVER''; * restringir la visualización de páginas y archivos multimedia; * desactivar acciones seleccionadas de DokuWiki para los visitantes de la extranet; * aplicar reglas globales mediante filtros; * añadir excepciones por página con ''~~NOEXTRANET~~'' y ''~~EXTRANET~~''; * integrarse con ProseMirror para conservar estas macros en edición WYSIWYG. El plugin está pensado para una lógica de segmentación intranet/extranet. Complementa las ACL, pero no sustituye un control de acceso real. ===== Parámetros ===== ^ Nombre ^ Descripción ^ Valor predeterminado ^ | request_match_key | Clave de ''$_SERVER'' usada para determinar si la solicitud proviene de la extranet. Puede ser ''REMOTE_ADDR'' o una clave ''HTTP_*''. | '''' | | extranet_match_list | Lista de valores separados por comas tratados como extranet. | '''' | | extranet_match_regex | Regex usada para detectar una solicitud de extranet a partir del valor configurado. | '''' | | default_policy | Política predeterminada: ''allow'', ''block'', ''force_allow'' o ''force_block''. | ''allow'' | | 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 ''*''. | '''' | | filter_regex | Regex adicional para apuntar a páginas o archivos multimedia. | '''' | | hide_files | Cómo se gestionan los archivos multimedia restringidos: ''all'', ''except_pageicons'' o ''none''. | ''none'' | | 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'' | | restricted_disable_actions | Acciones adicionales desactivadas solo cuando la página actual está restringida. | '''' | | preserve_first_title | Conserva el primer encabezado cuando una página se oculta. | ''true'' | | message_prefix | Prefijo insertado antes del mensaje de restricción. | '''' | | message_suffix | Sufijo insertado después del mensaje de restricción. | '''' | ===== Compatibilidad ===== Las siguientes claves de configuración antiguas siguen siendo aceptadas: * ''server_ip_key'' * ''extranet_ip_list'' * ''extranet_ip_regex'' Conviene usar los nuevos nombres: * ''request_match_key'' * ''extranet_match_list'' * ''extranet_match_regex'' ===== Uso ===== Hay dos macros disponibles: * ''~~NOEXTRANET~~'' : bloquea la página desde la extranet cuando la política lo permite; * ''~~EXTRANET~~'' : permite la página desde la extranet cuando la política lo permite. Comportamiento según ''default_policy'': * ''allow'' : todo está permitido excepto las páginas filtradas o las páginas marcadas con ''~~NOEXTRANET~~''; * ''block'' : todo está bloqueado excepto las páginas filtradas o las páginas marcadas con ''~~EXTRANET~~''; * ''force_allow'' : solo se aplican las reglas de filtro, ''~~NOEXTRANET~~'' se ignora; * ''force_block'' : solo se aplican las reglas de filtro, ''~~EXTRANET~~'' se ignora. ===== Ejemplos ===== Detección por IP directa: * ''request_match_key = REMOTE_ADDR'' * ''extranet_match_regex = /^10\.100\./'' Detección por cabecera de proxy: * ''request_match_key = HTTP_X_NETWORK_ZONE'' * ''extranet_match_list = extranet'' Detección por nombre del host upstream: * ''request_match_key = HTTP_X_UPSTREAM_HOST'' * ''extranet_match_regex = /^frontend-ext-/'' ===== API Helper ===== Cargar el helper: ''$extranet = plugin_load('helper', 'extranet');'' ==== Métodos principales ==== ^ Método ^ Desde ^ Descripción ^ | ''getDefaultPolicy()'' | ''2026-03-13'' | Devuelve la política predeterminada efectiva. | | ''getRequestMatchKey()'' | ''2026-03-13'' | Devuelve la clave ''$_SERVER'' usada para la detección. | | ''getExtranetMatchList()'' | ''2026-03-13'' | Devuelve la lista de valores tratados como extranet. | | ''getExtranetMatchRegex()'' | ''2026-03-13'' | Devuelve la regex de detección de extranet. | | ''isExtranetRequest()'' | ''2026-03-13'' | Indica si la solicitud actual se trata como extranet. | | ''isPageVisibleFromExtranet($id, $content = null)'' | ''2026-03-13'' | Indica si una página es visible desde la extranet. | | ''isMediaVisibleFromExtranet($mediaID)'' | ''2026-03-13'' | Indica si un archivo multimedia es visible desde la extranet. | | ''isPageAllowed($id, $content = null)'' | ''2026-03-13'' | Indica si una página está permitida en el contexto actual. | | ''isMediaAllowed($mediaID)'' | ''2026-03-13'' | Indica si un archivo multimedia está permitido en el contexto actual. | | ''parseRuleList($raw)'' | ''2026-03-13'' | Convierte una configuración de reglas en un array utilizable. | | ''idMatchesRule($id, $rule)'' | ''2026-03-13'' | Comprueba un ID frente a una regla exacta, espacio de nombres, comodín o regex. | ===== Funcionamiento ===== La detección de extranet se basa en un valor leído desde ''$_SERVER'': * se prueba el valor bruto completo; * si contiene comas, también se prueba cada elemento por separado. Esto permite cubrir: * una IP directa; * una cabecera del tipo ''X-Forwarded-For''; * un marcador de red inyectado por un proxy; * un nombre de host upstream o frontend. Cuando una página está restringida: * la caché se separa entre intranet y extranet; * el contenido wiki se sustituye por un mensaje configurable; * el primer encabezado puede conservarse si ''preserve_first_title'' está activado. Cuando un archivo multimedia está restringido y ''hide_files'' no es ''none'', el plugin devuelve una imagen dedicada en lugar del archivo real. ===== Notas ===== * El plugin no debe considerarse un sustituto de las ACL. * 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.