# vim: set filetype=apache nofoldenable: # Configuration for the GROS visualiation site. {{#branch_maps}}visualization{{/branch_maps}} {{#branch_maps}}hub{{/branch_maps}} {{{hub_branch}}} {{#jenkins_redirect}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}view {{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}{{/jenkins_redirect}} {{#jenkins_redirect}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}job {{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}{{/jenkins_redirect}} {{#jenkins_redirect}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}([_0-9a-zA-Z-]+)$ {{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}$1/{{/jenkins_redirect}} {{#jenkins_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}(manifest\.js|vendor\.js|navbar\.css|fonts/.+) {{#jenkins_report}}visualization-site/$branch/$1{{/jenkins_report}} [ENV=CORS:true]{{/jenkins_rewrite}} {{#control_host}} {{#proxy_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}encrypt "https://{{{control_host}}}/auth/encrypt.py" [ENV=CORS:true]{{/proxy_rewrite}} {{#proxy_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}access "https://{{{control_host}}}/auth/access.py" [ENV=CORS:true]{{/proxy_rewrite}} {{/control_host}} Header set Access-Control-Allow-Origin * env=CORS {{#jenkins_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}(.+) {{#jenkins_report}}visualization-site/$branch/$1{{/jenkins_report}}{{/jenkins_rewrite}} {{#jenkins_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}$ {{#jenkins_report}}visualization-site/$branch/index.html{{/jenkins_report}}{{/jenkins_rewrite}} # Somehow the "Header set" does not work, even outside LocationMatch (order of # rule processing for LocationMatch rules?), instead use a FilesMatch to blanket # allow access to these remotely. # This is mostly for development where loading in the "visualization-site" # resources is helpful, but may also be used in production if visualization and # prediction are on different hostnames, and does not introduce security issues. Header set Access-Control-Allow-Origin * Require all denied # Handle visualizations from Jenkins. The job name must start with # "build-" and the remainder is the name in the URL path. The job is # a multibranch pipeline job which generates an HTML report for the # master branch, using the publishHTML post build step from the HTML # Publisher plugin, with the name "Visualization" and an index page of # index.html. {{#join}}{{#visualization_names}}{{{.}}}|{{/visualization_names}}{{/join}})(/|\.zip)"> {{{visualization_branch}}} {{#jenkins_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}[^/]+/$ {{#jenkins_report}}$name/$branch/index.html{{/jenkins_report}}{{/jenkins_rewrite}} {{#jenkins_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}[^/]+/(.+) {{#jenkins_report}}$name/$branch/$1{{/jenkins_report}}{{/jenkins_rewrite}} # ZIP download only available from Jenkins directly for now. {{^jenkins_direct}} {{#jenkins_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}([^/]+)\.zip$ {{#jenkins_report}}$1/$branch/*zip*/$1.zip{{/jenkins_report}}{{/jenkins_rewrite}} {{/jenkins_direct}} {{#control_host}} # For control host encrypt/access proxy SSLProxyEngine on SSLProxyCACertificateFile {{{auth_cert}}} SSLProxyVerifyDepth 0 SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off RemoteIPInternalProxy {{{proxy_range}}} RemoteIPHeader X-Forwarded-For ProxyErrorOverride On {{/control_host}} {{#goaccess_path}} Require ip{{#allow_range}} {{{.}}}{{/allow_range}} Options Indexes RewriteRule ^{{#path}}{{{visualization_url}}}{{/path}}analytics/ {{{goaccess_path}}} [L,ENV=ANALYTICS:true] CustomLog analytics_access.log main env=ANALYTICS {{/goaccess_path}} # ErrorDocuments must start with a slash (before expression expansion) in order # for it to be considered a local path URL (and not a string). ErrorDocument 401 /{{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}401.html ErrorDocument 403 /{{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}403.html ErrorDocument 404 /{{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}404.html ErrorDocument 500 /{{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}50x.html ErrorDocument 502 /{{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}50x.html ErrorDocument 503 /{{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}50x.html ErrorDocument 504 /{{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}50x.html