#
#
# ============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:  false
#
# 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://localhost: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://localhost: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
#################
