diff --git a/stack/monitor/buildout.cfg b/stack/monitor/buildout.cfg index a0ceadccf216a829835089941ff1bf3ccf4948f3..83e6c5aa847297ef68fdba2b5e25ab6f1b6109c3 100644 --- a/stack/monitor/buildout.cfg +++ b/stack/monitor/buildout.cfg @@ -41,7 +41,7 @@ recipe = slapos.recipe.template url = ${:_profile_base_location_}/monitor.cfg.in output = ${buildout:directory}/monitor.cfg filename = monitor.cfg -md5sum = 852a0e205e005969547cce8192e531cd +md5sum = 20dc52c906e03a7c0b1234db7f999853 mode = 0644 [monitor-bin] @@ -57,7 +57,7 @@ mode = 0644 recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/${:filename} download-only = true -md5sum = 335e618be6bbe02328cd3aaa30e29d9c +md5sum = 2d48f8b8e01fa0fdde964ed1c1547f05 filename = cgi-httpd.conf.in mode = 0644 @@ -65,7 +65,7 @@ mode = 0644 recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/webfile-directory/${:filename} download-only = true -md5sum = af1adc107b73290afb98d011f7307de1 +md5sum = e759977b21c70213daa4c2701f2c2078 destination = ${buildout:directory}/parts/monitor-index filename = index.cgi.in mode = 0644 @@ -75,7 +75,7 @@ recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/webfile-directory/${:filename} download-only = true destination = ${buildout:directory}/parts/monitor-template-index -md5sum = 05051a2ff81ce7dc2eef3106d75b33f9 +md5sum = 7400c8cfa16a15a0d41f512b8bbb1581 filename = index.html.jinja2 mode = 0644 diff --git a/stack/monitor/cgi-httpd.conf.in b/stack/monitor/cgi-httpd.conf.in index ee26e6c6a44ee8bfbea4e9e16248c11c060436d5..300e71041fc1435ec2ef0e8c69e91f5da48a9956 100644 --- a/stack/monitor/cgi-httpd.conf.in +++ b/stack/monitor/cgi-httpd.conf.in @@ -21,6 +21,9 @@ LoadModule autoindex_module modules/mod_autoindex.so LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule authn_file_module modules/mod_authn_file.so +LoadModule proxy_module modules/mod_proxy.so +LoadModule proxy_http_module modules/mod_proxy_http.so +LoadModule rewrite_module modules/mod_rewrite.so # SSL Configuration <IfDefine !SSLConfigured> @@ -61,3 +64,16 @@ Require valid-user Options Indexes FollowSymLinks Satisfy all </Directory> + +<Location /rewrite> +AuthType Basic +AuthName "Private access" +AuthUserFile "{{ monitor_parameters.get('htaccess-file') }}" +Require valid-user +</Location> + +ProxyVia On +RewriteEngine On +{% for key, value in monitor_rewrite_rule.iteritems() %} +RewriteRule ^/rewrite/{{ key }}($|/.*) {{ value }}/$1 [P,L] +{% endfor %} diff --git a/stack/monitor/monitor.cfg.in b/stack/monitor/monitor.cfg.in index f091a8fe202fd54fc809077a2cb2ba5982959219..ec9dcb6671c3ece80638f264d8ac2c1a74192a3b 100644 --- a/stack/monitor/monitor.cfg.in +++ b/stack/monitor/monitor.cfg.in @@ -105,6 +105,7 @@ context = key apache_update_command :update-apache-access raw extra_eggs_interpreter ${buildout:directory}/bin/${extra-eggs:interpreter} raw default_page /static/welcome.html + section rewrite_element monitor-rewrite-rule [deploy-index-template] recipe = hexagonit.recipe.download @@ -234,6 +235,8 @@ status-history-length = 5 recipe = slapos.cookbook:zero-knowledge.read filename = $${public:filename} +[monitor-rewrite-rule] + # XXX could it be something lighter? [monitor-httpd-configuration] pid-file = $${monitor-directory:run}/cgi-httpd.pid @@ -252,6 +255,7 @@ context = section directory monitor-directory section monitor_parameters monitor-parameters section httpd_configuration monitor-httpd-configuration + section monitor_rewrite_rule monitor-rewrite-rule [cgi-httpd-wrapper] recipe = slapos.cookbook:wrapper diff --git a/stack/monitor/webfile-directory/index.cgi.in b/stack/monitor/webfile-directory/index.cgi.in index ff0adc83a33c15118bd9af91d06d64c1a8c6a135..52ae379f2997a72417650c2c8dd92cb4227d5513 100755 --- a/stack/monitor/webfile-directory/index.cgi.in +++ b/stack/monitor/webfile-directory/index.cgi.in @@ -23,6 +23,8 @@ monitor_password_script_path = "{{ monitor_password_script_path }}" monitor_apache_password_command = "{{ apache_update_command }}" +monitor_rewrite = "{{ ' '.join(rewrite_element.keys()) }}" + ######## # Password functions ####### @@ -185,4 +187,4 @@ else: else: html_base = jinja2.Template(open('{{ index_template }}').read()) print - print html_base.render(tree=make_menu(), default_page="{{ default_page }}") + print html_base.render(tree=make_menu(), default_page="{{ default_page }}", monitor_rewrite=monitor_rewrite) diff --git a/stack/monitor/webfile-directory/index.html.jinja2 b/stack/monitor/webfile-directory/index.html.jinja2 index a67c533d0e6eb68b557d04596eb4d0d69e6a4608..2dcf05dc2f919ac13bb6e3f391a13618ff122141 100644 --- a/stack/monitor/webfile-directory/index.html.jinja2 +++ b/stack/monitor/webfile-directory/index.html.jinja2 @@ -19,6 +19,11 @@ {% endfor %} <li class="pure-menu-heading category">Files</li> <li><a href="./private/" class="link"> User: admin</br> Password is yours</a></li> + <li class="pure-menu-heading category">Local Service</li> + {% set rewrite_list = monitor_rewrite.split() %} + {% for path in rewrite_list %} + <li><a href="./rewrite/{{path}}/" class="link">{{path}}</a></li> + {% endfor %} </ul> </div> </div>