global
    log stdout format raw local0
    lua-prepend-path /usr/local/etc/haproxy/lua/?.lua
    lua-load /usr/local/etc/haproxy/lua/auth-request.lua

defaults
    log     global
    timeout connect 5000
    timeout client  50000
    timeout server  50000
    errorfile 403 /usr/local/etc/haproxy/errors/403.http

frontend http_front
    bind *:8080
    bind *:8443 ssl crt /usr/local/etc/haproxy/ssl/certs/gerrit-ci.pem
    redirect scheme https code 301 if !{ ssl_fc }
    mode http
    option httplog
    log-format "${HAPROXY_HTTP_LOG_FMT} auth_response_code:%{+Q}[var(txn.auth_response_code)] auth_response_successful:%{+Q}[var(txn.auth_response_successful)]"

    # Redirect transparently to the archive-ci for Gerrit EOL releases
    acl is_eol_gerrit path_reg .*-stable-(2\.*|3\.[0-9]|3\.1[0-1])/.*
    redirect prefix https://archive-ci.gerritforge.com if is_eol_gerrit

    acl is_artifact_download path_reg -i /artifact/.*(json|jar|war|version)$
    acl is_home_api_json path_reg -i /api/json$
    acl is_plugin_manager_list path_reg -i /(job|view)/[a-z0-9\-\./]+/api/json$
    acl is_log_browsing path_reg -i /(console|consoleText|consoleFull|progressiveHtml)$
    acl is_static_asset path_end .js || path_end .css || path_end .svg || path_end .ico
    acl is_get method GET
    acl is_head method HEAD
    acl is_login_flow path_reg -i /(securityRealm/commenceLogin|securityRealm/finishLogin|login/oauth/authorize)
    acl is_envinject_plugin_path path_reg -i /injectedEnvVars/
    acl is_theme path_beg /css/
    acl is_plugin_manager path_beg /plugin-manager/

    # Deny access to injected variables in any case
    http-request deny if is_envinject_plugin_path

    # Jenkins CSS theme and static assets
    use_backend http_static_back if is_theme || is_plugin_manager || is_eol_gerrit

    # Always allow the request if no authentication is needed (this is set during development)
    http-request allow if { env(USE_SECURITY) -i -m str false }
    http-request allow if is_static_asset || is_theme || is_plugin_manager || is_eol_gerrit

    # Allow any requests if the user is authenticated.
    # We check whether the use is authenticated by performing an HTTP request to the /me/api/json endpoint
    # of Jenkins, which will return 200 OK, if the user is logged in.
    http-request lua.auth-intercept http_back /me/api/json GET cookie cookie -
    http-request allow if { var(txn.auth_response_successful) -m bool }

    # Otherwise, only allow GET requests that are either downloading artifacts, browsing logs, listing plugins or logins
    http-request deny if !is_get !is_head
    http-request deny if !is_log_browsing !is_artifact_download !is_plugin_manager_list !is_login_flow !is_theme !is_plugin_manager !is_home_api_json


    default_backend http_back

backend http_back
    mode http
    server jenkins jenkins:8080 check

backend http_static_back
    mode http
    server nginx nginx:80 check
