#
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.
#

---
#airavata_django_git_branch: "simccs"
vhost_servername: "nexttdb.sciencegateway.scigap.org"
vhost_ssl: true
# sudo certbot --apache certonly -d django.simccs.scigap.org
ssl_certificate_file: "/etc/letsencrypt/live/nexttdb.sciencegateway.scigap.org/cert.pem"
ssl_certificate_chain_file: "/etc/letsencrypt/live/nexttdb.sciencegateway.scigap.org/fullchain.pem"
ssl_certificate_key_file: "/etc/letsencrypt/live/nexttdb.sciencegateway.scigap.org/privkey.pem"

## Keycloak related variables
tenant_domain: "nexttdb"
oauth_client_key: "{{ vault_oauth_client_key }}"
oauth_client_secret: "{{ vault_oauth_client_secret }}"

auth_options:
  password:
    name: "Next Generation Thermodynamics Gateway"
  external:
    - name: "Existing Institute"
      idp_alias: "cilogon"

gateway_id: "nexttdb"
experiment_data_dir: "{{ user_data_dir }}/django-nexttdb"
# gateway_data_store_ssh_public_key: "TODO"

portal_title: "Next Generation Thermodynamics"
...
