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

#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 Policy Name space
#Not Mandatory for Open Onap
policy.aaf.namespace = 
policy.aaf.resource = 
# Decision Response settings. 
# can be either PERMIT or DENY. 
decision.indeterminate.response=PERMIT