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

spring:
  main:
    allow-bean-definition-overriding: true
  data:
    mongodb:
      username: admin
      password: MONGO_PASSWORD
      database: dlabdb
      port: 27017
      host: MONGO_HOST
dlab:
  sbn: SERVICE_BASE_NAME
  bigQueryDataset: DATASET_NAME
  cron: 0 0 * * * *

server:
  port: 8088
  servlet:
    contextPath: /api/billing

server.ssl.key-store-type: JKS
server.ssl.key-store: /home/OS_USER/keys/endpoint.keystore.jks
server.ssl.key-store-password: KEY_STORE_PASSWORD
server.ssl.key-alias: endpoint

logging:
  file: /var/opt/dlab/log/ssn/billing.log
  level:
    com:
      epam: trace

keycloak:
  bearer-only: true
  realm: dlab
  resource: KEYCLOAK_CLIENT_ID
  credentials.secret: CLIENT_SECRET
  ssl-required: none
  auth-server-url: KEYCLOAK_AUTH_SERVER_URL