# ***************************************************************************************************************************
# * 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.
#================================================================================

#================================================================================
# Services
#================================================================================
[Services]
REST = org.apache.juneau.microservice.rest.RestApplication

#================================================================================
# REST settings
#================================================================================
[REST]

# The HTTP port number to use.
# Default is Rest-Port setting in manifest file, or 8000.
port = 10000

# A JSON map of servlet paths to servlet classes.
# Example:  
# 	resourceMap = {'/*':'com.foo.MyServlet'}
# Either resourceMap or resources must be specified if it's not defined in
# 	the manifest file.
resourceMap = 

# A comma-delimited list of names of classes that extend from Servlet.
# Resource paths are pulled from @RestResource.path() annotation, or
# 	"/*" if annotation not specified.
# Example:  
# 	resources = com.foo.MyServlet
# Default is Rest-Resources in manifest file.
# Either resourceMap or resources must be specified if it's not defined in
# 	the manifest file.
resources = 

# The context root of the Jetty server.
# Default is Rest-ContextPath in manifest file, or "/".
contextPath = 

# Authentication:  NONE, BASIC.
# Default is Rest-AuthType in manifest file, or NONE.
authType = NONE

# The BASIC auth username.
# Default is Rest-LoginUser in manifest file.
loginUser = 

# The BASIC auth password.
# Default is Rest-LoginPassword in manifest file.
loginPassword = 

# The BASIC auth realm.
# Default is Rest-AuthRealm in manifest file.
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. (default)
#	RESTART_SERVER - Restart the Jetty server.
#	RESTART_SERVICE - Shutdown and exit with code '3'.
saveConfigAction = RESTART_SERVER

# Enable SSL support.
# Default is false.
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]

# The directory where to create the log file.
# Default is "."
logDir = logs

# The name of the log file to create for the main logger.
# The logDir and logFile make up the pattern that's passed to the FileHandler
# constructor.
# If value is not specified, then logging to a file will not be set up.
logFile = microservice.%g.log

# Whether to append to the existing log file or create a new one.
# Default is false.
append = 

# The SimpleDateFormat format to use for dates.
# Default is "yyyy.MM.dd hh:mm:ss".
dateFormat = 

# The log message format.
# The value can contain any of the following variables:
# 	{date} - The date, formatted per dateFormat.
#	{class} - The class name.
#	{method} - The method name.
#	{logger} - The logger name.
#	{level} - The log level name.
#	{msg} - The log message.
#	{threadid} - The thread ID.
#	{exception} - The localized exception message.
# Default is "[{date} {level}] {msg}%n".
format =

# The maximum log file size.
# Suffixes available for numbers.
# See ConfigFile.getInt(String,int) for details.
# Default is 1M.
limit = 10M

# Max number of log files.
# Default is 1.
count = 5

# Default log levels.
# Keys are logger names.
# Values are serialized Level POJOs.
levels = { org.apache.juneau:'INFO' }

# Only print unique stack traces once and then refer to them by a simple 8 character hash identifier.
# Useful for preventing log files from filling up with duplicate stack traces.
# Default is false.
useStackTraceHashes = true

# The default level for the console logger.
# Default is WARNING.
consoleLevel = 

#================================================================================
# System properties
#--------------------------------------------------------------------------------
# These are arbitrary system properties that are 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
