#
#	Configuration parameters fixed at startup for the DMaaP Bus Controller
#
#
#	URI to retrieve dynamic DR configuration
#
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:	dmaap-drps
#
# 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.dcae.dmaap.topicFactory
#
#   MR TopicMgr Role
MR.TopicMgrRole:    org.onap.dmaapBC.TopicMgr

#   MR topic name style
MR.topicStyle:	FQTN_LEGACY_FORMAT

#   MR topic ProjectID
MR.projectID:  23456
#
# 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: com.company.policy.DecisionPolicy

#
# URL of AAF environment to use.
#
aaf.URL:	https://authentication.simpledemo.onap.org:8095/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
#
# Flag to turn on/off Authentication
UsePE: false
#
# Argument to decisionAttributes.put("AAF_ENVIRONMENT", X); 
# where X is:  TEST= UAT, PROD = PROD, DEVL = TEST
#
PeAafEnvironment: DEVL
PeAafUrl.DEVL:  https://aafdev.onap.org:8095/proxy/
PeAafUrl.TEST:  https://aafist..onap.org:8095/proxy/
PeAafUrl.PROD:  https://aafprod.onap.org:8095/proxy/

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