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