# Copyright (c) 2022 VEXXHOST, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

_keystone_helm_values:
  endpoints: "{{ openstack_helm_endpoints }}"
  images:
    tags: "{{ atmosphere_images | vexxhost.atmosphere.openstack_helm_image_tags('keystone') }}"
  pod:
    replicas:
      api: 3
    mounts:
      keystone_api:
        keystone_api:
          volumeMounts: "{{ keystone_domains | vexxhost.atmosphere.keystone_domains_to_mounts }}"
          volumes:
            - name: keystone-openid-metadata
              configMap:
                name: keystone-openid-metadata
  conf:
    keystone:
      DEFAULT:
        log_config_append: null
      auth:
        methods: password,token,openid,application_credential
      cors:
        allowed_origins: "*"
      openid:
        remote_id_attribute: HTTP_OIDC_ISS
      federation:
        # TODO(mnaser): Lookup using openstack_helm_endpoints
        trusted_dashboard: "https://{{ openstack_helm_endpoints_horizon_api_host }}/auth/websso/"
      oslo_messaging_notifications:
        driver: noop
    wsgi_keystone: |
      LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
      Listen 0.0.0.0:5000
      TransferLog /dev/stdout
      ErrorLog /dev/stderr
      <VirtualHost *:5000>
        # WSGI
        WSGIDaemonProcess keystone-public processes=4 threads=1 user=keystone group=keystone display-name=%{GROUP}
        WSGIProcessGroup keystone-public
        WSGIScriptAlias / /var/www/cgi-bin/keystone/keystone-wsgi-public
        WSGIApplicationGroup %{GLOBAL}
        WSGIPassAuthorization On
        # NOTE(mnaser): This is to by-pass large header limits for large tokens
        LimitRequestFieldSize 16384
        # OIDC
        OIDCClaimPrefix "OIDC-"
        OIDCMetadataDir /var/lib/apache2/oidc
        OIDCSSLValidateServer "{{ keystone_oidc_ssl_validate_server }}"
        OIDCCryptoPassphrase {{ keystone_oidc_crypto_passphrase }}
        OIDCRedirectURI {{ keystone_oidc_redirect_uri }}
        OIDCRedirectURLsAllowed {{ keystone_oidc_redirect_urls_allowed | join(' ') }}
        # NOTE(mnaser): These are Atmosphere specific settings.
        OIDCSessionType client-cookie:store_id_token
        OIDCXForwardedHeaders X-Forwarded-Host X-Forwarded-Proto
        <Location /v3/auth/OS-FEDERATION/identity_providers/redirect>
          AuthType openid-connect
          Require valid-user
        </Location>
        <Location /v3/auth/OS-FEDERATION/websso/openid>
          Require valid-user
          AuthType openid-connect
        </Location>
        {% for domain in keystone_domains %}
        <Location /v3/OS-FEDERATION/identity_providers/{{ domain.name }}/protocols/openid/auth>
          Require valid-user
          AuthType oauth20
        </Location>
        <Location /v3/auth/OS-FEDERATION/identity_providers/{{ domain.name }}/protocols/openid/websso>
          Require valid-user
          AuthType openid-connect
          OIDCDiscoverURL {{ keystone_oidc_redirect_uri }}?iss={{ domain | vexxhost.atmosphere.urlencoded_issuer_from_domain }}
        </Location>
        {% endfor %}
      </VirtualHost>
    ks_domains: "{{ keystone_domains | vexxhost.atmosphere.to_ks_domains }}"
  manifests:
    job_credential_cleanup: false
    ingress_api: false
    service_ingress_api: false
