# ***************************************************************************************************************************
# * 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.examples.rest.RootResources

# Ports to try.
# 0 means try a random port.
# 3 0's means try 3 random ports.
port = 10000, 0, 0, 0

# Authentication:  NONE, BASIC.
authType = NONE

# The BASIC auth username, password, and realm
loginUser = 
loginPassword = 
authRealm = 

# Stylesheet to use for HTML views.
# The default options are:
#  - styles/juneau.css
#  - styles/devops.css
# Other stylesheets can be referenced relative to the servlet package or working
# 	directory.
stylesheet = styles/devops.css

# 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

# Enable SSL support.
useSsl = false

#================================================================================
# Bean properties on the org.eclipse.jetty.util.ssl.SslSocketFactory class
#--------------------------------------------------------------------------------
# Ignored if REST/useSsl is false.
# 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 = sample.%g.log
dateFormat = yyyy.MM.dd hh:mm:ss
format = [{date} {level}] {msg}%n
append = false
limit = 10M
count = 5
levels = { org.apache.juneau:'INFO' }
useStackTraceHashes = true
consoleLevel = WARNING

#================================================================================
# System properties
#--------------------------------------------------------------------------------
# These are arbitrary system properties that can be set during startup.
#================================================================================
[SystemProperties]

# Configure Jetty for StdErrLog Logging
org.eclipse.jetty.util.log.class = org.eclipse.jetty.util.log.StrErrLog

# Jetty logging level
org.eclipse.jetty.LEVEL = WARN

#================================================================================
# DockerRegistryResource properties
#================================================================================
[DockerRegistry]
url = http://docker.apache.org:5000/v1

#================================================================================
# SqlQueryResource properties
#================================================================================
[SqlQueryResource]
driver = org.apache.derby.jdbc.EmbeddedDriver
directory = $SWITCH{$S{os.name},*win*,C:/testDB,/tmp/testDB}
connectionUrl = jdbc:derby:$C{SqlQueryResource/directory};create=true
allowTempUpdates = true
includeRowNums = true

#================================================================================
# Source code location
#================================================================================
[Source]
gitHub = https://github.com/apache/incubator-juneau/blob/master/juneau-examples-rest/src/main/java


