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

# 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=
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/AAF_NS.cm:2.1
cadi_latitude=38.000
cadi.longitude=72.000
cadi_alias=policy@policy.onap.org
cadi_loglevel=DEBUG
cadi_keyfile=/media/sf_SourceTree/gerrit-pe/engine/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=/media/sf_SourceTree/gerrit-pe/engine/packages/base/src/files/etc/ssl/policy-keystore
cadi_keystore_password=Pol1cy_0nap
cadi_truststore=/media/sf_SourceTree/gerrit-pe/engine/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/AAF_NS.service:2.1
aaf_fqdn=aaf-onap-test.osaaf.org
aaf_oauth2_introspect_url=https://aaf-onap-test.osaaf.org:8095/AAF_NS.introspect:2.1/introspect
aaf_oauth2_token_url=https://aaf-onap-test.osaaf.org:8095/AAF_NS.token:2.1/token
fs_url=https://aaf-onap-test.osaaf.org:8095/AAF_NS.fs.2.1
gui_url=https://aaf-onap-test.osaaf.org:8095/AAF_NS.gui.2.1


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