# General
application_id:                   "web-app-keycloak"                                                                          # Internal Infinito.Nexus application id 
database_type:                    "postgres"                                                                                  # Database which will be used

# Keycloak

## General
KEYCLOAK_URL:                       "{{ domains | get_url(application_id, WEB_PROTOCOL) }}"
KEYCLOAK_REALM:                     "{{ OIDC.CLIENT.REALM }}" # This is the name of the default realm which is used by the applications
KEYCLOAK_REALM_URL:                 "{{ WEB_PROTOCOL }}://{{ KEYCLOAK_REALM }}"
KEYCLOAK_DEBUG_ENABLED:             "{{ MODE_DEBUG }}"
KEYCLOAK_CLIENT_ID:                 "{{ OIDC.CLIENT.ID }}"
KEYCLOAK_SERVER_INTERNAL_URL:       "http://127.0.0.1:8080"
KEYCLOAK_LOAD_DEPENDENCIES:         "{{ applications | get_app_conf(application_id, 'load_dependencies') }}"

# RBAC
KEYCLOAK_RBAC_GROUP_CLAIM:         "{{ RBAC.GROUP.CLAIM }}"
KEYCLOAK_RBAC_GROUP_NAME:           "{{ RBAC.GROUP.NAME }}"

## Health
KEYCLOAK_HEALTH_ENABLED:            true

## Import
KEYCLOAK_REALM_IMPORT_ENABLED:      "{{ applications | get_app_conf(application_id, 'actions.import_realm') }}"
KEYCLOAK_REALM_IMPORT_DIR_HOST:     "{{ docker_compose.directories.volumes }}import/"
KEYCLOAK_REALM_IMPORT_DIR_DOCKER:   "/opt/keycloak/data/import/"
KEYCLOAK_REALM_IMPORT_FILE_SRC:     "import/realm.json.j2"
KEYCLOAK_REALM_IMPORT_FILE_DST:     "{{ KEYCLOAK_REALM_IMPORT_DIR_HOST }}/realm.json"

## Credentials
KEYCLOAK_ADMIN:                     "{{ applications | get_app_conf(application_id, 'users.administrator.username') }}"
KEYCLOAK_ADMIN_PASSWORD:            "{{ applications | get_app_conf(application_id, 'credentials.administrator_password') }}"

## Docker
KEYCLOAK_CONTAINER:                 "{{ applications | get_app_conf(application_id, 'docker.services.keycloak.name') }}"      # Name of the keycloak docker container
KEYCLOAK_EXEC_KCADM:                "docker exec -i {{ KEYCLOAK_CONTAINER }} /opt/keycloak/bin/kcadm.sh"                      # Init script for keycloak
KEYCLOAK_IMAGE:                     "{{ applications | get_app_conf(application_id, 'docker.services.keycloak.image') }}"     # Keycloak docker image
KEYCLOAK_VERSION:                   "{{ applications | get_app_conf(application_id, 'docker.services.keycloak.version') }}"   # Keycloak docker version

## Server
KEYCLOAK_SERVER_HOST:               "127.0.0.1:{{ ports.localhost.http[application_id] }}"
  
## Update
KEYCLOAK_REDIRECT_FEATURES:         ["features.oauth2","features.oidc"]
KEYCLOAK_FRONTCHANNEL_LOGOUT_URL:   "{{ domains | get_url('web-svc-logout', WEB_PROTOCOL) }}/"
KEYCLOAK_REDIRECT_URIS:             "{{ domains | redirect_uris(applications, WEB_PROTOCOL, '/*', KEYCLOAK_REDIRECT_FEATURES) }}"
KEYCLOAK_WEB_ORIGINS: >-
  {{ KEYCLOAK_REDIRECT_URIS
      | map('regex_replace','/\\*$','')
      | map('regex_search','^(https?://[^/]+)')
      | select('string')
      | list | unique }}
KEYCLOAK_POST_LOGOUT_URIS:           "+"

## LDAP
KEYCLOAK_LDAP_ENABLED:              "{{ applications | get_app_conf(application_id, 'features.ldap', False) }}"
KEYCLOAK_LDAP_CMP_NAME:             "{{ ldap.server.domain }}"          # Name of the LDAP User Federation component in Keycloak (as shown in UI)
KEYCLOAK_LDAP_BIND_DN:              "{{ ldap.dn.administrator.data }}"
KEYCLOAK_LDAP_BIND_PW:              "{{ ldap.bind_credential }}"
KEYCLOAK_LDAP_URL:                  "{{ ldap.server.uri }}"

## API
KEYCLOAK_MASTER_API_USER:           "{{ applications | get_app_conf(application_id, 'users.administrator') }}" # Master Administrator
KEYCLOAK_MASTER_API_USER_NAME:      "{{ KEYCLOAK_MASTER_API_USER.username }}"                                  # Master Administrator Username
KEYCLOAK_MASTER_API_USER_PASSWORD:  "{{ KEYCLOAK_MASTER_API_USER.password }}"                                  # Master Administrator Password

# Dictionaries
KEYCLOAK_DICTIONARY_REALM_RAW: "{{ lookup('template', 'import/realm.json.j2') }}"
KEYCLOAK_DICTIONARY_REALM: >-
  {{
    KEYCLOAK_DICTIONARY_REALM_RAW
      if (KEYCLOAK_DICTIONARY_REALM_RAW is mapping)
      else (KEYCLOAK_DICTIONARY_REALM_RAW | from_json)
  }}
