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