{"id":690,"date":"2012-10-15T19:12:33","date_gmt":"2012-10-15T18:12:33","guid":{"rendered":"https:\/\/blogs.ua.es\/miguelon\/?p=690"},"modified":"2012-10-15T19:12:33","modified_gmt":"2012-10-15T18:12:33","slug":"control-de-acceso-a-directorio-externo-desde-moodle","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/miguelon\/2012\/10\/control-de-acceso-a-directorio-externo-desde-moodle\/","title":{"rendered":"Control de acceso a directorio externo desde Moodle"},"content":{"rendered":"<p>Este curso hemos usado la herramienta Forrest para generar los apuntes del t\u00edtulo de experto en programaci\u00f3n con tecnolog\u00edas web. Forrest genera un sitio web que quer\u00edamos integrar de alguna manera en Moodle. No es tan sencillo como parece, puesto que debido al sistema de ficheros de Moodle, se puede enlazar una p\u00e1gina html, pero cuando dentro de dicha p\u00e1gina se encuentran enlaces relativos, el comportamiento no era el adecuado (en Moodle todo pasa por alg\u00fan script PHP).<\/p>\n<p>Entonces, lo que buscaba era alguna manera de hacer que un directorio de fuera de Moodle tuviera la autentificaci\u00f3n que proporciona Moodle (esto sirve tanto para Forrest como para cualquier directorio que teng\u00e1is). La soluci\u00f3n no es sencilla (para m\u00ed que no controlo mucho PHP ni Apache). Son varios pasos:<\/p>\n<ul>\n<li>Imaginad que el directorio que se quiere proteger es \/moodle\/forrest (en el servidor puede que sea \/var\/www\/html\/moodle\/forrest).<\/li>\n<li>Hay que crear un fichero .htaccess en dicho directorio con el siguiente contenido:<\/li>\n<\/ul>\n<pre>Options +FollowSymLinks\r\nRewriteEngine On\r\nRewriteRule ^(.*)\\.html$ index.php?file=$1\\.html [L]\r\nRewriteRule ^(.*)\\.pdf$ index.php?file=$1\\.pdf [L]\r\nRewriteRule ^$ index.php?file=index.html [L]<\/pre>\n<p><span style=\"line-height: 17px\">Estas reglas lo que hacen es decirle a Apache que cuando llegue un fichero con extensi\u00f3n .html o .pdf se la pase al fichero index.php.<\/span><\/p>\n<ul>\n<li>Hay que crear otro fichero index.php con el siguiente contenido:<\/li>\n<\/ul>\n<pre>&lt;?php\r\nrequire_once('..\/config.php'); \/\/ cargamos el fichero de configuraci\u00f3n de Moodle\r\nrequire_login(80); \/\/ esto llama a una funci\u00f3n del API de Moodle que comprueba si se \r\n                   \/\/ est\u00e1 autentificado para el curso con id 80\r\n\r\n$file=$_GET['file']; \/\/ recuperamos la variable file\r\nif (strcmp(\"html\",end(explode(\".\",$file)))==0) { \/\/ Se comprueba si termina en html\r\n    $pagina=file_get_contents($file); \/\/ Si es as\u00ed, se lee y se devuelve\r\n    echo $pagina;\r\n}\r\nelse {  \/\/ Si es otra (pdf) hacemos que devuelva el fichero y lo descargue.\r\n    header(\"Content-type: application\/octet-stream\");\r\n    header(\"Content-Disposition: attachment; filename=\\\"$file\\\"\");\r\n    $size=filesize($file);\r\n    header(\"Content-Length: \".$size);\r\n    header(\"Content-Transfer-Encoding: binary\");\r\n    readfile($file);\r\n}\r\n?&gt;<\/pre>\n<p>Y ya est\u00e1. Ahora, si intentamos entrar en ese directorio, nos pedir\u00e1 la autentificaci\u00f3n de Moodle (caso de no estar autentificado). OJO: se puede usar la funci\u00f3n require_login() sin argumento, pero si permitimos acceso de invitados a nuestro Moodle, podr\u00e1n entrar en los recursos de ese directorio.<\/p>\n<p>Es posible que el c\u00f3digo no sea \u00f3ptimo y que se pueda hacer de otra manera, ya digo que no soy un especialista en estas lides, pero como dicen nuestros alumnos: funciona!! \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este curso hemos usado la herramienta Forrest para generar los apuntes del t\u00edtulo de experto en programaci\u00f3n con tecnolog\u00edas web. Forrest genera un sitio web que quer\u00edamos integrar de alguna manera en Moodle. No es tan sencillo como parece, puesto &hellip; <a href=\"https:\/\/blogs.ua.es\/miguelon\/2012\/10\/control-de-acceso-a-directorio-externo-desde-moodle\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":342,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[223,374],"tags":[1307],"class_list":["post-690","post","type-post","status-publish","format-standard","hentry","category-docencia","category-programacion","tag-moodle"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/miguelon\/wp-json\/wp\/v2\/posts\/690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/miguelon\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/miguelon\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/miguelon\/wp-json\/wp\/v2\/users\/342"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/miguelon\/wp-json\/wp\/v2\/comments?post=690"}],"version-history":[{"count":2,"href":"https:\/\/blogs.ua.es\/miguelon\/wp-json\/wp\/v2\/posts\/690\/revisions"}],"predecessor-version":[{"id":692,"href":"https:\/\/blogs.ua.es\/miguelon\/wp-json\/wp\/v2\/posts\/690\/revisions\/692"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/miguelon\/wp-json\/wp\/v2\/media?parent=690"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/miguelon\/wp-json\/wp\/v2\/categories?post=690"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/miguelon\/wp-json\/wp\/v2\/tags?post=690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}