#
#
# 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.
#

---
# No symlink, user_data_dir is same as real_user_data_dir
user_data_dir: "{{ real_user_data_dir }}"
#airavata_django_git_branch: "simccs"
vhost_servername: "dev.ampgateway.org"
vhost_ssl: true

# TODO: while developing django app, turn off SELinux, but turn it back on
# once code execution issues are ironed out
httpd_selinux_mode: "permissive"

airavata_django_extra_dependencies:
  - "git+ssh://git@github.com/SciGaP/trecx-django-app.git#egg=trecx-django-app"

# tus isn't setup yet
tusd_vhost_servername:
# sudo certbot --apache certonly -d django.simccs.scigap.org
ssl_certificate_file: "/etc/letsencrypt/live/dev.ampgateway.org/cert.pem"
ssl_certificate_chain_file: "/etc/letsencrypt/live/dev.ampgateway.org/fullchain.pem"
ssl_certificate_key_file: "/etc/letsencrypt/live/dev.ampgateway.org/privkey.pem"

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

auth_options:
  password:
    name: "Dev AMP"
  external:
    - name: "Existing Institute Login"
      idp_alias: "cilogon"

gateway_id: "amp"
experiment_data_dir: "{{ user_data_dir }}/django-amp"
gateway_data_store_resource_id: "dev.ampgateway.org_b8228bc7-fad2-45db-8ed1-47de359a54a5"
gateway_data_store_hostname: "dev.ampgateway.org"
# gateway_data_store_ssh_public_key: "TODO"

django_error_emails: "[('Marcus Christie', 'machrist@iu.edu'), ('Eroma Abeysinghe', 'eabeysin@iu.edu'), ('Sudhakar Pamidighantam', 'pamidigs@iu.edu'), ('Dinuka De Silva', 'dinsdesi@iu.edu')]"

portal_email_host: "smtp.gmail.com"
portal_email_port: 587
portal_email_tls: true
portal_email_username: "pga.airavata@gmail.com"
portal_email_password: "{{ vault_portal_email_password }}"
portal_server_email: "{{ portal_email_username }}"
portal_title: "Dev AMP Gateway"

django_extra_settings:
  TRECX:
    TRECX_APPLICATION_ID: "tRecX_70fc89f8-424f-4495-99e3-f3aa6a75f967"
...
