#
#
# ============LICENSE_START==========================================
# org.onap.dmaap
# ===================================================================
# Copyright © 2018 AT&T Intellectual Property. All rights reserved.
# ===================================================================
# Licensed 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.
# ============LICENSE_END============================================
# ECOMP is a trademark and service mark of AT&T Intellectual Property.
#
#
#	Configuration parameters fixed at startup for the DMaaP Bus Controller
#
#
#	URI to retrieve dynamic DR configuration
#
UnitTest: Yes
ProvisioningURI:	/internal/prov
#
#	Allow http access to API 
#
HttpAllowed:	true
#
#	The port number for http as seen within the server
#
IntHttpPort:	8080
#
#	The port number for https as seen within the server
#   Set to 0 if no certificate is available yet...
#
IntHttpsPort:	0
#
#	The external port number for https taking port mapping into account
#
ExtHttpsPort:	0
#
#	The type of keystore for https
#
KeyStoreType:	jks
#
#	The path to the keystore for https
#
KeyStoreFile:	etc/keystore
#
#	The password for the https keystore
#
KeyStorePassword:	changeit
#
#	The password for the private key in the https keystore
#
KeyPassword:	changeit
#
#	The type of truststore for https
#
TrustStoreType:	jks
#
#	The path to the truststore for https
#
TrustStoreFile:	${DMAAPBC_TSTOREFILE}
#
#	The password for the https truststore
#
TrustStorePassword:	changeit
#
#	The path to the file used to trigger an orderly shutdown
#
QuiesceFile:	etc/SHUTDOWN
#
#	Enable postgress
#
UsePGSQL:	false
#
#	The host for postgres access
#
DB.host:	none
#
#	For postgres access
#
DB.cred:	none
#
#	Name of this environment
#
DmaapName:	onap-cit
#
#	Name of DR prov server
#
DR.provhost:	localhost
#
# handling of feed delete
# DeleteOnDR - means use the DR API to DELETE a feed. (default for backwards compatibility)
# SimulateDelete - means preserve the feed on DR (after cleaning it up), and mark as DELETED in DBCL.  Better for cfy environments
Feed.deleteHandling: DeleteOnDR

################################################################################
# MR Related Properties:
#
#   Value of the CNAME DNS entry which resolves to the primary central MR cluster (when there are more than one central clusters).
#   if there is only one MR cluster in an environment, set this to the DNS name for that cluster
#
MR.CentralCname:  notSet.onap.org
#
#   MR Client Delete Level thoroughness:
#   0 = don't delete
#   1 = delete from persistent store
#   2 = delete from persistent store (DB) and authorization store (AAF)
MR.ClientDeleteLevel: 1
#
#   MR Topic Factory Namespace
#
MR.TopicFactoryNS: org.onap.dmaap.mr.topicFactory
#
#   MR TopicMgr Role
MR.TopicMgrRole:    org.onap.dmaap-bc.TopicMgr

#   MR topic name style
MR.topicStyle:	FQTN_LEGACY_FORMAT

#   MR topic ProjectID
MR.projectID:  23456

MR.multisite:  true
#
# end of MR Related Properties
################################################################################

#
#	The Role and credentials of the MirrorMaker Provisioner.  This is used by DMaaP Bus Controller to pub to the provisioning topic
#   Not part of 1701
#
MM.ProvRole: org.onap.dmaapBC.MMprov.prov
MM.ProvUserMechId: idNotSet@namespaceNotSet
MM.ProvUserPwd: pwdNotSet
#
#	The Role of the MirrorMaker Agent. This is used by MM to sub to provisioning topic
#
MM.AgentRole: org.onap.dmaapBC.MMagent.agent
#################
# AAF Properties:
#
# regarding password encryption:
# In the dependencies that Maven retrieves (e.g., under dcae_dmaapbc/target/deps/ is a jar file cadi-core-version.jar.  Generate the key file with:
#
# java \u2013jar wherever/cadi-core-*.jar keygen keyfilename
# chmod 400 keyfilename
#
# To encrypt a key:
#
# java \u2013jar wherever/cadi-core-*.jar digest password-to-encrypt keyfilename
#
# This will generate a string.  Put \u201Cenc:\u201D on the front of the string, and put the result in this properties file.
#
# Location of the Codec Keyfile which is used to decrypt passwords in this properties file before they are passed to AAF
#
# REF: https://wiki.domain.notset.com/display/cadi/CADI+Deployment
#
CredentialCodecKeyfile:	etc/LocalKey
#
# This overrides the Class used for Decryption.
# This allows for a plugin encryption/decryption method if needed.
# Call this Class for decryption at runtime.
#AafDecryption.Class: com.company.proprietaryDecryptor 

#
# This overrides the Class used for API Permission check.
# This allows for a plugin policy check, if needed
ApiPermission.Class: org.onap.dmaap.dbcapi.authentication.AllowAll

#
# URL of AAF environment to use.
#
aaf.URL:	https://localhost:8100/proxy
#
# TopicMgr mechid@namespace
#
aaf.TopicMgrUser:	idNotSet@namespaceNotSet
#
# TopicMgr password
# 
aaf.TopicMgrPassword:	pwdNotSet
#
# Bus Controller Namespace Admin  mechid@namespace
#
aaf.AdminUser:	idNotSet@namespaceNotSet
#
# Bus Controller Namespace Admin password
#
aaf.AdminPassword:	pwdNotSet
#
# endof AAF Properties
#################
#################
# PolicyEngine Properties
#
# Name of PolicyEngineApi properties file
PolicyEngineProperties: config/PolicyEngineApi.properties
#
# Namespace for URI values for API used to create AAF permissions
# e.g. if ApiNamespace is X.Y..dmaapBC.api then for URI /topics we create an AAF perm X.Y..dmaapBC.api.topics
ApiNamespace: org.onap.dmaapBC.api
#
# endof PolicyEngineProperties
#################
