# 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.
# pap component installation configuration parameters

# tomcat specific parameters

TOMCAT_JMX_PORT=9990
TOMCAT_SHUTDOWN_PORT=9405
SSL_HTTP_CONNECTOR_PORT=9091
SSL_AJP_CONNECTOR_PORT=8380
SSL_AJP_CONNECTOR_REDIRECT_PORT=8443

TOMCAT_X_MS_MB=1024
TOMCAT_X_MX_MB=1024

# pap properties

PAP_PDPS=${{POLICY_HOME}}/servers/pap/bin/pdps
PAP_URL=https://pap:9091/pap/

PAP_INITIATE_PDP=true
PAP_HEARTBEAT_INTERVAL=10000
PAP_HEARTBEAT_TIMEOUT=10000

REST_ADMIN_DOMAIN=com
REST_ADMIN_REPOSITORY=repository
REST_ADMIN_WORKSPACE=workspace

# PDP related properties

PAP_PDP_URL=https://pdp:8081/pdp/
PAP_PDP_HTTP_USER_ID=testpdp
PAP_PDP_HTTP_PASSWORD=alpha123

PAP_HTTP_USER_ID=testpap
PAP_HTTP_PASSWORD=alpha123

#new values added 10-21-2015
PROP_PAP_TRANS_WAIT=500000
PROP_PAP_TRANS_TIMEOUT=5000
PROP_PAP_AUDIT_TIMEOUT=300000
PROP_PAP_RUN_AUDIT_FLAG=true
PROP_PAP_AUDIT_FLAG=true

PROP_PAP_INCOMINGNOTIFICATION_TRIES=4


node_type=pap
resource_name=pap_1
dependency_groups=paplp_1
test_via_jmx=true

# The (optional) period of time in seconds between executions of the integrity audit.
# Value < 0 : Audit does not run (default value if property is not present = -1)
# Value = 0 : Audit runs continuously
# Value > 0 : The period of time in seconds between execution of the audit on a particular node
integrity_audit_period_seconds=-1
