# vim: set filetype=nginx nofoldenable:

# Configuration for the GROS visualiation site.

location ~ ^{{#path}}{{{visualization_url}}}{{/path}}login {
    return 403;
}

# 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.
location ~ ^{{{hub_regex}}}{{#path}}{{{visualization_url}}}{{/path}}({{#join}}{{#visualization_names}}{{{.}}}|{{/visualization_names}}{{/join}})(/|\.zip) {
    {{{visualization_branch}}}
    {{#jenkins_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}(?P<name>[^/]+)/$ {{#jenkins_report}}$name/$branch/index.html{{/jenkins_report}}{{/jenkins_rewrite}}
    {{#jenkins_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}(?P<name>[^/]+)/(?P<file>.+) {{#jenkins_report}}$name/$branch/$file{{/jenkins_report}}{{/jenkins_rewrite}}
# ZIP download only available from Jenkins directly for now.
{{^jenkins_direct}}
    {{#jenkins_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}(?P<name>[^/]+)\.zip$ {{{jenkins_path}}}/job/build-$name/job/$branch/Visualization/*zip*/$name.zip{{/jenkins_rewrite}}
    proxy_pass http://{{#upstream}}jenkins:8080{{/upstream}};
{{/jenkins_direct}}
}

{{#control_host}}
location ~ ^{{{hub_regex}}}{{#path}}{{{visualization_url}}}{{/path}}encrypt {
    {{#proxy_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}encrypt https://{{{control_host}}}/auth/encrypt.py{{/proxy_rewrite}}
    proxy_ssl_verify on;
    proxy_ssl_trusted_certificate {{{auth_cert}}};
    add_header Access-Control-Allow-Origin *;
}

location ~ ^{{{hub_regex}}}{{#path}}{{{visualization_url}}}{{/path}}access {
    {{#proxy_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}access https://{{{control_host}}}/auth/access.py{{/proxy_rewrite}}
    proxy_ssl_verify on;
    proxy_ssl_trusted_certificate {{{auth_cert}}};
    add_header Access-Control-Allow-Origin *;
}
{{/control_host}}

{{#goaccess_path}}
location ~ ^{{#path}}{{{visualization_url}}}{{/path}}analytics {
    set_real_ip_from {{{proxy_range}}};
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;
    {{#allow_range}}
    allow {{{.}}};
    {{/allow_range}}
    deny all;
    root {{{goaccess_path}}};
    autoindex on;
    access_log /var/log/nginx/analytics_access.log;
}
{{/goaccess_path}}

{{#jenkins_redirect}}^{{{hub_regex}}}{{#path}}{{{visualization_url}}}{{/path}}view {{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}{{/jenkins_redirect}}
{{#jenkins_redirect}}^{{{hub_regex}}}{{#path}}{{{visualization_url}}}{{/path}}job {{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}{{/jenkins_redirect}}
{{#jenkins_redirect}}^{{{hub_regex}}}{{#path}}{{{visualization_url}}}{{/path}}(?P<name>[_0-9a-zA-Z-]+)$ {{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}$name/{{/jenkins_redirect}}

proxy_intercept_errors on;

error_page 401 {{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}401.html;
error_page 403 {{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}403.html;
error_page 404 {{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}404.html;
error_page 500 502 503 504 {{#url}}{{{visualization_server}}}/{{{hub_redirect}}}{{{visualization_url}}}{{/url}}50x.html;

location ~ ^{{{hub_regex}}}{{#path}}{{{visualization_url}}}{{/path}}(manifest\.js|vendor\.js|navbar\.css|fonts/) {
    {{{hub_branch}}}
    add_header Access-Control-Allow-Origin *;
    {{#jenkins_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}(?P<file>.+) {{#jenkins_report}}visualization-site/$branch/$file{{/jenkins_report}}{{/jenkins_rewrite}}
{{^jenkins_direct}}
    proxy_pass http://{{#upstream}}jenkins:8080{{/upstream}};
{{/jenkins_direct}}
}

location ~ ^{{{hub_regex}}}{{#path}}{{{visualization_url}}}{{/path}} {
    {{{hub_branch}}}
    {{#jenkins_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}}(?P<file>.+) {{#jenkins_report}}visualization-site/$branch/$file{{/jenkins_report}}{{/jenkins_rewrite}}
    {{#jenkins_rewrite}}^{{{hub_rewrite}}}{{#path}}{{{visualization_url}}}{{/path}} {{#jenkins_report}}visualization-site/$branch/index.html{{/jenkins_report}}{{/jenkins_rewrite}}
{{^jenkins_direct}}
    proxy_pass http://{{#upstream}}jenkins:8080{{/upstream}};
{{/jenkins_direct}}
}
