## Management Server configuration.
MSIP={{ local_mgmt_ip }}
MGMT_PORT={{ ms_ext_mgmt_port }}
# Edge sys admin username and password as set when you installed Edge.
ADMIN_EMAIL={{ opdk_user_email }}
APIGEE_ADMINPW='{{ opdk_user_pass }}'
# Set the protocol for the Edge management API. Default is http.
# Set to https if you enabled TLS on the management API.
MS_SCHEME={{ ms_scheme | default('http') }}

## Postgres configuration.
PG_HOST={{ pgmaster_ip | default(pg_ip) }}
PG_PORT=5432
# Postgres username and password as set when you installed Edge.
PG_USER={{ pg_user }}
PG_PWD='{{ pg_pass }}'

# apigee-sso configuration.
SSO_PROFILE={{ sso_profile | default("saml") }}
# Externally accessible IP or DNS name of apigee-sso.
SSO_PUBLIC_URL_HOSTNAME=$MSIP
# Default port is 9099. If changing, set both properties to the same value.
SSO_PUBLIC_URL_PORT={{ sso_public_url_port | default(9099) }}
SSO_TOMCAT_PORT={{ sso_tomcat_port | default(9099) }}
# Set Tomcat TLS mode to DEFAULT to use HTTP access to apigee-sso.
SSO_TOMCAT_PROFILE={{ sso_tomcat_profile | default('DEFAULT') }}
SSO_PUBLIC_URL_SCHEME={{ sso_public_url_scheme | default('http') }}

# SSO admin user name. The default is ssoadmin.
SSO_ADMIN_NAME={{ sso_admin_name | default('ssoadmin') }}
# SSO admin password using uppercase, lowercase, number, and special chars.
SSO_ADMIN_SECRET='{{ sso_admin_secret | default(opdk_user_pass) }}'

# Path to signing key and secret from "Create the TLS keys and certificates" above.
SSO_JWT_SIGNINIG_KEY_FILEPATH={{ sso_jwt_signinig_key_filepath | default('/opt/apigee/customer/application/apigee-sso/jwt-keys/privkey.pem') }}
SSO_JWT_VERIFICATION_KEY_FILEPATH={{  sso_jwt_verification_key_filepath | default('/opt/apigee/customer/application/apigee-sso/jwt-keys/pubkey.pem') }}

# Name of SAML IDP. For example, okta or adfs.
SSO_SAML_IDP_NAME={{ sso_saml_ipd_name | default('okta') }}
# Text displayed to user when they attempt to access Edge UI.
SSO_SAML_IDP_LOGIN_TEXT="{{ sso_saml_ipd_login_text | default("Please log in to your IDP") }}"

# The metadata URL from your IDP.
# If you have a metadata file, and not a URL,
# see "Specifying a metadata file instead of a URL" below.
SSO_SAML_IDP_METADATA_URL={{ sso_saml_idp_metadata_url }}

# Specifies to skip TLS validation for the URL specified
# by SSO_SAML_IDP_METADATA_URL. Necessary if URL uses a self-signed cert.
# Default value is "n".
SSO_SAML_IDPMETAURL_SKIPSSLVALIDATION={{ sso_saml_idpmetaurl_skipsslvalidation | default('n') }}

# SAML service provider key and cert from "Create the TLS keys and certificates" above.
SSO_SAML_SERVICE_PROVIDER_KEY={{ sso_saml_service_provider_key | default('/opt/apigee/customer/application/apigee-sso/saml/server.key') }}
SSO_SAML_SERVICE_PROVIDER_CERTIFICATE={{  sso_saml_service_provider_certificate | default('/opt/apigee/customer/application/apigee-sso/saml/selfsigned.crt') }}
# The passphrase used when you created the SAML cert and key.
# The section "Create the TLS keys and certificates" above removes the passphrase,
# but this property is available if you require a passphrase.
# SSO_SAML_SERVICE_PROVIDER_PASSWORD='{{ sso_saml_service_provider_password | default('samlSP123') }}'

# Must configure an SMTP server so Edge SSO can send emails to users.
SMTPMAILFROM="{{ opdk_smtp_mail_from }} <{{  opdk_user_email }}>"

SKIP_SMTP={{ opdk_smtp_skip }}
{% if opdk_smtp_skip | trim == 'n' %}
    SMTPHOST={{ opdk_smtp_host }}
    SMTPPORT={{ opdk_smtp_port }}
    SMTPUSER={{ opdk_smtp_user }}
    SMTPPASSWORD='{{ opdk_smtp_password }}'
    SMTPSSL={{ opdk_smtp_ssl }}
{% endif %}

