###
# ============LICENSE_START=======================================================
# ONAP-PDP-REST
# ================================================================================
# Copyright (C) 2017-2019 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=========================================================
###

# Default XACML Properties File for PDP RESTful servlet
# NOTE:  All properties in this file are for local development environments only.
# Standard API Factories
#
xacml.dataTypeFactory=com.att.research.xacml.std.StdDataTypeFactory
xacml.pdpEngineFactory=com.att.research.xacmlatt.pdp.ATTPDPEngineFactory
xacml.pepEngineFactory=com.att.research.xacml.std.pep.StdEngineFactory
# NOT USED SEE BELOW xacml.pipFinderFactory=org.onap.policy.xacml.std.pip.StdPIPFinderFactory
xacml.traceEngineFactory=com.att.research.xacml.std.trace.LoggingTraceEngineFactory
#
# AT&T PDP Implementation Factories
#
xacml.att.evaluationContextFactory=com.att.research.xacmlatt.pdp.std.StdEvaluationContextFactory
xacml.att.combiningAlgorithmFactory=com.att.research.xacmlatt.pdp.std.StdCombiningAlgorithmFactory
xacml.att.functionDefinitionFactory=org.onap.policy.xacml.custom.OnapFunctionDefinitionFactory
# NOT USED SEE BELOW xacml.att.policyFinderFactory=org.onap.policy.pdp.std.StdPolicyFinderFactory
# creteUpdate Policy Implementation Class details. 
createUpdatePolicy.impl.className=org.onap.policy.pdp.rest.api.services.CreateUpdatePolicyServiceImpl
# AAF Implementation class details
aafClient.impl.className=org.onap.policy.utils.AAFPolicyClientImpl
#
# AT&T RESTful PDP Implementation Factories
#
xacml.pipFinderFactory=org.onap.policy.pdp.rest.impl.XACMLPdpPIPFinderFactory
xacml.att.policyFinderFactory=org.onap.policy.pdp.rest.XACMLPdpPolicyFinderFactory
#
# When set to true, this flag tells the StdPolicyFinderFactory to combined all the root policy files into
# into one PolicySet and use the given Policy Algorithm.
#
xacml.att.policyFinderFactory.combineRootPolicies=urn:com:att:xacml:3.0:policy-combining-algorithm:combined-permit-overrides
#
# PDP RESTful API properties
# 
# Set this to the address where the XACML-PAP-REST servlet is running
xacml.rest.pap.url=http://localhost:8070/pap/

#if multiple paps exist, the xacml.rest.pap.url can be removed and they can be defined like this:
#xacml.rest.pap.urls=http://localhost:9090/pap/,http://localhost:9091/pap/

#
# Give the running PDP an ID for the PAP. The url that its running as is a good choice.
# The PAP identifies PDP's using the URL of the PDP.
#
xacml.rest.pdp.id=http://localhost:8082/pdp/

# Give the port number used for the PDP

xacml.jmx.port=0


# Notification Properties
# Notifcation type: websocket, ueb or dmaap... if left blank websocket is the default
NOTIFICATION_TYPE=websocket
NOTIFICATION_SERVERS=
NOTIFICATION_TOPIC=
NOTIFICATION_DELAY=0
UEB_API_KEY=
UEB_API_SECRET=
DMAAP_AAF_LOGIN=
DMAAP_AAF_PASSWORD=

#
# Set the directory where the PDP holds its Policy Cache and PIP Configuration
#
xacml.rest.pdp.config=config

xacml.rest.pdp.webapps=/home/users/PolicyEngine/webapps/ConfigPAP/
#
# Initialize register with PAP servlet
#
xacml.rest.pdp.register=true
#
# Sleep period in seconds between register attempts
#
xacml.rest.pdp.register.sleep=15
#
# number of attempts to register. -1 means keep trying forever.
#
xacml.rest.pdp.register.retries=-1
#
# max number of bytes in a POST of a XML/JSON request
# old value #32767
xacml.rest.pdp.maxcontent=99999999 
#
# Set UserID here
xacml.rest.pdp.userid=testpdp
# Set Password here
xacml.rest.pdp.password=alpha456

# id PAP
xacml.rest.pap.userid=testpap
#if multiple paps have different logins, they can be defined like this:
#http\://localhost\:9090/pap/.xacml.rest.pap.userid=testpap

# pass PAP
xacml.rest.pap.password=alpha123
#http\://localhost\:9090/pap/.xacml.rest.pap.password=alpha123

# Delay for Notifications Don't change this. Value in milliSec.  
xacml.rest.notification.delay=30

# Client interval to ping notification service. 
CLIENT_INTERVAL=15000

# Buffer Size. 
REQUEST_BUFFER_SIZE=50

#properties for MySql xacml database:  PLEASE DO NOT REMOVE... NEEDED FOR APIs
javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
javax.persistence.jdbc.url=jdbc:mariadb://localhost:3306/onap_sdk
javax.persistence.jdbc.user=policy_user
javax.persistence.jdbc.password=policy_user


#***Properties for IntegrityMonitor integration defined in XACMLRestProperties.java***

#The name of the PDP.  Must be unique across the system
xacml.rest.pdp.resource.name=site_1.pdp_1

#***Properties for IntegrityMonitor integration defined in IntegrityMonitorProperties.java***

#Interval between forward progress counter updates in seconds
fp_monitor_interval=30

#Number of forward progress counter failures before failover
failed_counter_threshold=3

#Interval in seconds between test transactions if there is no other traffic
test_trans_interval=10

#Interval in seconds between updates of the forward progress counter in the DB
write_fpc_interval=5

#Name of the site
site_name=site_1

#Node type
node_type=pdp_xacml

#Dependency groups are groups of resources upon which a node operational state is dependent upon). 
#Each group is a comma-separated list of resource names and groups are separated by a semicolon.
#A group may contain one or more members. Resource names must match the resource names defined
#in the respective servers' properties files
dependency_groups=site_1.pdplp_1;site_1.astragw_1;site_1.brmsgw_1

# this can be DEVL, TEST, PROD 
ENVIRONMENT=DEVL
xacml.rest.pep.idfile=client.properties


#AAF cadi properties
enable_aaf=false
policy.aaf.namespace=org.onap.policy
policy.aaf.root.permission=org.onap.policy.pdpx
cm_url=https://aaf-onap-test.osaaf.org:8095/onap.org.osaaf.aaf.cm:2.1
cadi_latitude=38.000
cadi.longitude=72.000
cadi_alias=policy@policy.onap.org
cadi_loglevel=DEBUG
cadi_keyfile=../packages/base/src/files/etc/ssl/aaf-cadi.keyfile
cadi_protocols=TLSv1.1,TLSv1.2
cadi_x509_issuers=CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_7, OU=OSAAF, O=ONAP, C=US
cadi_keystore=../packages/base/src/files/etc/ssl/policy-keystore
cadi_keystore_password=Pol1cy_0nap
cadi_truststore=../packages/base/src/files/etc/ssl/policy-truststore
cadi_truststore_password=Pol1cy_0nap
aaf_env=DEV
aaf_url=https://aaf-onap-test.osaaf.org:8095/onap.org.osaaf.aaf.service:2.1
aaf_fqdn=aaf-onap-test.osaaf.org
aaf_oauth2_introspect_url=https://aaf-onap-test.osaaf.org:8095/onap.org.osaaf.aaf.introspect:2.1/introspect
aaf_oauth2_token_url=https://aaf-onap-test.osaaf.org:8095/onap.org.osaaf.aaf.token:2.1/token
fs_url=https://aaf-onap-test.osaaf.org:8095/onap.org.osaaf.aaf.fs.2.1
gui_url=https://aaf-onap-test.osaaf.org:8095/onap.org.osaaf.aaf.gui.2.1

#TOSCA MS model yaml file directory which can be changed based on systems. 
#msToscaModel.home=C://home//msyamlFiles//
msToscaModel.home=/home/users/PolicyEngine/webapps/ConfigPAP/

# Decision Response settings. 
# can be either PERMIT or DENY. 
decision.indeterminate.response=PERMIT

# AES key for password encryption in config files
#org.onap.policy.encryption.aes.key=12345678901234567890123456789012
