# Extranet [🇫🇷 Français](README.md) | [🇬🇧 English](README_EN.md) | [🇩🇪 Deutsch](README_DE.md) | 🇪🇸 Español Plugin de DokuWiki para restringir la visualización de páginas, archivos multimedia y algunas acciones cuando la solicitud proviene de la extranet. El plugin puede: - detectar la extranet a partir de un valor configurable de `$_SERVER`; - aplicar una política predeterminada `allow`, `block`, `force_allow` o `force_block`; - filtrar páginas y archivos multimedia por ID exacto, espacio de nombres, comodín o regex; - reemplazar el contenido de una página restringida por un mensaje configurable; - reemplazar archivos multimedia restringidos por una imagen neutra; - desactivar acciones seleccionadas de DokuWiki para visitantes de la extranet; - gestionar las macros `~~NOEXTRANET~~` y `~~EXTRANET~~`; - integrarse con ProseMirror para conservar correctamente ese estado en modo WYSIWYG. ## Uso Hay dos macros disponibles en las páginas: - `~~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. El comportamiento exacto depende de `default_policy`: - `allow`: todo está permitido excepto las páginas filtradas o marcadas con `~~NOEXTRANET~~` - `block`: todo está bloqueado excepto las páginas filtradas o 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 ## Configuración En el gestor de configuración: - `request_match_key`: clave de `$_SERVER` usada para detectar la extranet, por ejemplo `REMOTE_ADDR` o una cabecera `HTTP_*` - `extranet_match_list`: lista de valores separados por comas tratados como extranet - `extranet_match_regex`: regex usada para identificar la extranet a partir del valor configurado - `default_policy`: política de acceso predeterminada - `filter_list`: lista de páginas o archivos multimedia afectados por la política - `filter_regex`: regex adicional para apuntar a páginas o archivos multimedia - `hide_files`: indica si las restricciones también se aplican a los archivos multimedia - `disable_actions`: acciones de DokuWiki desactivadas para visitantes de la extranet - `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 - `message_prefix`: contenido insertado antes del mensaje de restricción - `message_suffix`: contenido insertado después del mensaje de restricción Compatibilidad: - `server_ip_key` - `extranet_ip_list` - `extranet_ip_regex` Estos parámetros antiguos siguen siendo compatibles por razones de compatibilidad, pero conviene usar los nombres nuevos. ## 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-/` ## Lo que ofrece el helper Cargar el helper: ```php $extranet = plugin_load('helper', 'extranet'); ``` Métodos principales: - `getDefaultPolicy()`: devuelve la política predeterminada efectiva - `getRequestMatchKey()`: devuelve la clave `$_SERVER` usada para la detección - `getExtranetMatchList()`: devuelve la lista configurada de valores - `getExtranetMatchRegex()`: devuelve la regex configurada - `isExtranetRequest()`: indica si la solicitud actual se trata como extranet - `isPageVisibleFromExtranet()`: indica si una página es visible desde la extranet - `isMediaVisibleFromExtranet()`: indica si un archivo multimedia es visible desde la extranet - `isPageAllowed()`: indica si una página está permitida en el contexto actual - `isMediaAllowed()`: indica si un archivo multimedia está permitido en el contexto actual - `parseRuleList()`: convierte una lista de reglas en un array utilizable - `idMatchesRule()`: comprueba un ID frente a una regla ## Caché y comportamiento El plugin separa la caché de renderizado para distinguir entre visitantes de intranet y de extranet. Cuando una página está restringida, su contenido se reemplaza por un mensaje configurable. Si `preserve_first_title` está activo, se conserva el primer encabezado. Si `hide_files` está activo, los archivos multimedia restringidos se reemplazan por una imagen dedicada. ## Nota El plugin depende de un marcador de solicitud proporcionado por la infraestructura web. Es adecuado para una lógica de segmentación intranet/extranet, pero no debe considerarse un sustituto de las ACL ni de un control de acceso fuerte.