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

server:
  applicationConnectors:
    - type: http
      port: 9090
  adminConnectors:
    - type: http
      port: 9091

# ---------------------------------------------
# Eagle Authentication Configuration
# ---------------------------------------------
auth:
  # indicating if authentication is enabled, true for enabled, false for disabled
  enabled: true

  # indicating authentication mode, "simple" or "ldap"
  mode: simple

  # indicating whether to use cache: cache is usually used for authentications that may
  # not handle high throughput (an RDBMS or LDAP server, for example)
  caching: false

  # indicating the cache policy, containing maximumSize and expireAfterWrite, e.g. maximumSize=10000, expireAfterWrite=10m
  cachePolicy: maximumSize=10000, expireAfterWrite=1m

  # for basic authentication, effective only when auth.mode=simple
  # default password is "secret"
  simple:
    accounts:
      - name: admin
        password: rWV/cdTCr01wTLBQ/rUilkExd2TJKrifXuCCTEwig1o08K8Mi0b1qQAgVXpPqflb
        roles: ADMINISTRATOR
        firstName: Admin
        lastName: Test
        email: mock-admin@eagle.apache.org
      - name: user
        password: rWV/cdTCr01wTLBQ/rUilkExd2TJKrifXuCCTEwig1o08K8Mi0b1qQAgVXpPqflb
        roles: USER
        firstName: User
        lastName: Test
        email: mock-user@eagle.apache.org
      - name: app
        password: rWV/cdTCr01wTLBQ/rUilkExd2TJKrifXuCCTEwig1o08K8Mi0b1qQAgVXpPqflb
        firstName: Application
        lastName: Test
        roles: APPLICATION
        email: mock-support@eagle.apache.org

  # for ldap authentication, effective only when auth.mode=ldap
  ldap:
    # url providing ldap service. By convention, the port for typical ldap service is 389, and ldap service over ssl
    # uses port 636 with protocol "ldaps", which requires certificates pre-installed.
    providerUrl: ldap://server.address.or.domain:port

    # template string containing ${USERNAME} placeholder. This is designed for some orgs who don't use plain usernames
    # to authenticate, e.g. they may use its members' email address as the name: ${USERNAME}@some.org. When name
    # is supposed to be recognized originally, just configure this parameter as ${USERNAME}
    principalTemplate: ${USERNAME}@maybe.email.suffix

    # string of strategy used by ldap service. "simple" is usually supported in most circumstances, we can use it by
    # default or leave it a blank string.
    strategy: simple

    # the absolute path of ssl certificate file. This attribute is required conditional only when the auth -> mode is set
    # as "ldap" and providerUrl starting with "ldaps://".
    certificateAbsolutePath: /certificate/absolute/path

    # timeout expression for connecting to ldap service endpoint
    connectingTimeout: 500ms

    # timeout expression for reading from ldap service
    readingTimeout: 500ms
