# ***************************************************************************************************************************
# * 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.                                              *
# ***************************************************************************************************************************

#================================================================================
# Basic configuration file for SaaS microservices
# Subprojects can use this as a starting point.
#================================================================================

#================================================================================
# REST settings
#================================================================================
[REST]

resources = org.apache.juneau.server.test.Root

port = 10001

# Authentication:  NONE, BASIC.
authType = NONE

# What to do when the config file is saved.
# Possible values:
# 	NOTHING - Don't do anything. 
#	RESTART_SERVER - Restart the Jetty server.
#	RESTART_SERVICE - Shutdown and exit with code '3'.
saveConfigAction = RESTART_SERVER

useSsl = false

#================================================================================
# Bean properties on the org.eclipse.jetty.util.ssl.SslSocketFactory class
#--------------------------------------------------------------------------------
# Specify any of the following fields:
# 	allowRenegotiate (boolean)
# 	certAlias (String)
# 	crlPath (String)
# 	enableCRLDP (boolean)
# 	enableOCSP (boolean)
# 	excludeCipherSuites (String[]) 
# 	excludeProtocols (String[])
# 	includeCipherSuites (String[])
# 	includeProtocols (String...)
# 	keyManagerPassword (String)
# 	keyStore (String)
# 	keyStorePassword (String)
# 	keyStorePath (String)
# 	keyStoreProvider (String)
# 	keyStoreType (String)
# 	maxCertPathLength (int)
# 	needClientAuth (boolean)
# 	ocspResponderURL (String)
# 	protocol (String)
# 	provider (String)
# 	secureRandomAlgorithm (String)
# 	sessionCachingEnabled (boolean) 
# 	sslKeyManagerFactoryAlgorithm (String)
# 	sslSessionCacheSize (int)
# 	sslSessionTimeout (int)
# 	trustAll (boolean)
# 	trustManagerFactoryAlgorithm (String)
# 	trustStore (String)
# 	trustStorePassword (String)
# 	trustStoreProvider (String)
# 	trustStoreType (String)
# 	validateCerts (boolean)
# 	validatePeerCerts (boolean)
# 	wantClientAuth (boolean)			
#================================================================================
[REST-SslContextFactory]
keyStorePath = client_keystore.jks
keyStorePassword* = {HRAaRQoT}
excludeCipherSuites = TLS_DHE.*, TLS_EDH.*
excludeProtocols = SSLv3
allowRenegotiate = false

#================================================================================
# Logger settings
# See FileHandler Java class for details.
#================================================================================
[Logging]
logDir = logs
logFile = test.%g.log
dateFormat = yyyy.MM.dd hh:mm:ss
format = [{date} {level}] {msg}%n
append = false
limit = 10M
count = 5
levels = { com.foo.team:'INFO' }
useStackTraceHashes = true
consoleLevel = WARNING

[Test]
int1 = 1
int2 = 1,2,3
int3 = $C{Test/int1, -1}
int4 = $C{Test/int3, -1}
int5 = $C{XXX, -1}
boolean1 = true
boolean2 = true,true
path = $E{PATH}
testManifestEntry = $MF{Test-Entry}
