{%- from "keystone/map.jinja" import server with context %}
{%- set site = salt['pillar.get']('apache:server:site:'+site_name) %}
{% macro setup_oidc() -%}
    SetEnv HTTP_OIDC_ISS {{ server.federation.oidc.remote_id_attribute_value }}
    {% if server.federation.oidc.oidc_claim_prefix is defined %}
    OIDCClaimPrefix "{{ server.federation.oidc.oidc_claim_prefix }}"
    {%- endif %}
    OIDCClientID "{{ server.federation.oidc.oidc_client_id}}"
    {% if server.federation.oidc.oidc_client_secret is defined %}
    OIDCClientSecret "{{ server.federation.oidc.oidc_client_secret }}"
    {%- endif %}
    OIDCCryptoPassphrase "{{ server.federation.oidc.oidc_crypto_passphrase }}"
    OIDCRedirectURI "{{ server.federation.oidc.oidc_redirect_uri }}"
    {% if server.federation.oidc.oidc_provider_metadata_url is defined %}
    OIDCProviderMetadataURL "{{ server.federation.oidc.oidc_provider_metadata_url }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_response_type is defined %}
    OIDCResponseType "{{ server.federation.oidc.oidc_response_type }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_scope is defined %}
    OIDCScope "{{ server.federation.oidc.oidc_scope }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_ssl_validate_server is defined %}
    OIDCSSLValidateServer "{{ server.federation.oidc.oidc_ssl_validate_server }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_oauth_ssl_validate_server is defined %}
    OIDCOAuthSSLValidateServer "{{ server.federation.oidc.oidc_oauth_ssl_validate_server }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_oauth_introspection_endpoint is defined %}
    OIDCOAuthIntrospectionEndpoint "{{ server.federation.oidc.oidc_oauth_introspection_endpoint }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_oauth_introspection_token_param_name is defined %}
    OIDCOAuthIntrospectionTokenParamName "{{ server.federation.oidc.oidc_oauth_introspection_token_param_name }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_oauth_remote_user_claim is defined %}
    OIDCOAuthRemoteUserClaim "{{ server.federation.oidc.oidc_oauth_remote_user_claim }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_oauth_verify_jwks_uri is defined %}
    OIDCOAuthVerifyJwksUri "{{ server.federation.oidc.oidc_oauth_verify_jwks_uri }}"
    {%- endif %}
    {% if server.federation.oidc.odic_token_iat_slack is defined %}
    OIDCIDTokenIatSlack "{{ server.federation.oidc.odic_token_iat_slack }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_provider_issuer is defined %}
    OIDCProviderIssuer "{{ server.federation.oidc.oidc_provider_issuer }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_provider_authorization_endpoint is defined %}
    OIDCProviderAuthorizationEndpoint "{{ server.federation.oidc.oidc_provider_authorization_endpoint }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_provider_token_endpoint is defined %}
    OIDCProviderTokenEndpoint "{{ server.federation.oidc.oidc_provider_token_endpoint }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_provider_token_endpoint_auth is defined %}
    OIDCProviderTokenEndpointAuth "{{ server.federation.oidc.oidc_provider_token_endpoint_auth }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_provider_user_info_endpoint is defined %}
    OIDCProviderUserInfoEndpoint "{{ server.federation.oidc.oidc_provider_user_info_endpoint }}"
    {%- endif %}
    {% if server.federation.oidc.oidc_provider_jwks_uri is defined %}
    OIDCProviderJwksUri "{{ server.federation.oidc.oidc_provider_jwks_uri }}"
    {%- endif %}
    {%- if server.federation.oidc.oidc_oauth_verify_shared_keys is defined %}
    {%- set shared_keys_list = [] %}
    {%- for shared_key_def in server.federation.oidc.oidc_oauth_verify_shared_keys %}
    {%- do shared_keys_list.append("\""+shared_key_def.type+"#"+shared_key_def.kid+"#"+shared_key_def.key+"\"") %}
    {%- endfor %}
    OIDCOAuthVerifySharedKeys {{ shared_keys_list|join(" ") }}
    {%- endif %}
    {%- if server.federation.oidc.oidc_oauth_verify_cert_files is defined %}
    {%- set cert_files_list = [] %}
    {%- for cert_file_def in server.federation.oidc.oidc_oauth_verify_cert_files %}
    {%- do cert_files_list.append("\""+cert_file_def.kid+"#"+cert_file_def.filename+"\"") %}
    {%- endfor %}
    OIDCOAuthVerifyCertFiles {{ cert_files_list|join(" ") }}
    {%- endif %}

    <LocationMatch /v3/OS-FEDERATION/identity_providers/.*?/protocols/oidc/auth>
      AuthType oauth20
      Require valid-user
    </LocationMatch>
    <LocationMatch "/v3/auth/OS-FEDERATION/websso/oidc">
      AuthType openid-connect
      Require valid-user
    </LocationMatch>
    <LocationMatch "/v3/auth/OS-FEDERATION/identity_providers/.*?/protocols/oidc/websso">
      AuthType openid-connect
      Require valid-user
    </LocationMatch>
{% endmacro -%}
{% macro setup_saml2() -%}
    {% if server.federation.saml2.shib_url_scheme is defined %}
    ShibURLScheme {{ server.federation.saml2.shib_url_scheme }}
    {%- endif %}
    {% if server.federation.saml2.shib_compat_valid_user is defined %}
    ShibCompatValidUser {{ server.federation.saml2.shib_compat_valid_user }}
    {%- endif %}
    <Location /Shibboleth.sso>
      SetHandler shib
    </Location>
    <LocationMatch /v3/auth/OS-FEDERATION/identity_providers/.*?/protocols/saml2/websso>
      ShibRequestSetting requireSession 1
      AuthType shibboleth
      ShibExportAssertion Off
      Require valid-user
    </LocationMatch>
    <LocationMatch /v3/auth/OS-FEDERATION/websso/saml2>
      ShibRequestSetting requireSession 1
      AuthType shibboleth
      ShibExportAssertion Off
      Require valid-user
    </LocationMatch>
    <LocationMatch /v3/OS-FEDERATION/identity_providers/.*?/protocols/saml2/auth>
      ShibRequestSetting requireSession 1
      AuthType shibboleth
      ShibExportAssertion Off
      Require valid-user
    </LocationMatch>
{% endmacro -%}

Listen {% if server.bind.address is defined %}{{ server.bind.address }}{% else %}{{ server.bind.public_address }}{% endif %}:5000
Listen {% if server.bind.address is defined %}{{ server.bind.address }}{% else %}{{ server.bind.public_address }}{% endif %}:35357

<VirtualHost {% if server.bind.address is defined %}{{ server.bind.address }}{% else %}{{ server.bind.public_address }}{% endif %}:5000>
{%- include "apache/files/_name.conf" %}
{%- include "apache/files/_core.conf" %}
{%- include "apache/files/_ssl.conf" %}
{%- include "apache/files/_locations.conf" %}

    WSGIDaemonProcess keystone-public processes={{ grains.num_cpus }} threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    LimitRequestBody 114688
    <IfVersion >= 2.4>
      ErrorLogFormat "%{cu}t %M"
    </IfVersion>
{%- include "apache/files/_log.conf" %}

    <Directory /usr/bin>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
    </Directory>

    {% if server.get('federation', {}).saml2 is defined %}
    WSGIScriptAliasMatch ^(/v3/OS-FEDERATION/identity_providers/.*?/protocols/.*?/auth)$ /usr/bin/keystone-wsgi-public/$1
    {{ setup_saml2() }}
    {%- endif %}
    {% if server.get('federation', {}).oidc is defined %}
    {{ setup_oidc() }}
    {%- endif %}

    Alias /identity_admin /usr/bin/keystone-wsgi-admin
    <Location /identity_admin>
        SetHandler wsgi-script
        Options +ExecCGI

        WSGIProcessGroup keystone-admin
        WSGIApplicationGroup %{GLOBAL}
        WSGIPassAuthorization On
    </Location>
</VirtualHost>

<VirtualHost {% if server.bind.address is defined %}{{ server.bind.address }}{% else %}{{ server.bind.public_address }}{% endif %}:35357>
{%- include "apache/files/_name.conf" %}
{%- include "apache/files/_core.conf" %}
{%- include "apache/files/_ssl.conf" %}
{%- include "apache/files/_locations.conf" %}

    WSGIDaemonProcess keystone-admin processes={{ grains.num_cpus }} threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    LimitRequestBody 114688
    <IfVersion >= 2.4>
      ErrorLogFormat "%{cu}t %M"
    </IfVersion>
{%- include "apache/files/_log.conf" %}

    <Directory /usr/bin>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
    </Directory>

    {% if server.get('federation', {}).saml2 is defined %}
    WSGIScriptAliasMatch ^(/v3/OS-FEDERATION/identity_providers/.*?/protocols/.*?/auth)$ /usr/bin/keystone-wsgi-admin/$1
    {{ setup_saml2() }}
    {%- endif %}

    {% if server.get('federation', {}).oidc is defined %}
    {{ setup_oidc() }}
    {%- endif %}

    Alias /identity /usr/bin/keystone-wsgi-public
    <Location /identity>
        SetHandler wsgi-script
        Options +ExecCGI

        WSGIProcessGroup keystone-public
        WSGIApplicationGroup %{GLOBAL}
        WSGIPassAuthorization On
    </Location>
</VirtualHost>
