###
# ============LICENSE_START=======================================================
# ONAP Policy Engine
# ================================================================================
# 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=========================================================
###

#
# This file is set to the defaults one can use to run the XACML-PAP-ADMIN for testing and development.
#
# It is not recommended to modify this file directly, but rather copy it to another location and make any modifications
# necessary to run the application in a development or a production environment. You can set the Java VM System
# property to change where the application can find the file. For example:
#
#-Dxacml.properties=/opt/app/xacml/etc/xacml.admin.properties 
#
#
# 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
xacml.pipFinderFactory=com.att.research.xacml.std.pip.StdPIPFinderFactory
#
# 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
xacml.att.policyFinderFactory=com.att.research.xacmlatt.pdp.std.StdPolicyFinderFactory

#
# This is an extremely simple policy to demonstrate authorization
# within the Admin Console.
#
xacml.rootPolicies=admin
#
# PAP Servlet properties
#
xacml.PAP.papEngineFactory=org.onap.policy.xacml.std.pap.StdEngineFactory

#
# Admin Console properties
#
xacml.AC.papEngineFactory=org.onap.policy.xacml.admin.util.RESTfulPAPFactory

# Set your domain here:
xacml.rest.admin.domain=com
#
#
# Property to declare the max time frame for logs.
#
xacml.log.timeframe=30
#
#
#
xacml.rest.admin.closedLoopJSON =JSONConfig.json
xacml.rest.admin.microServiceModel=model.properties
xacm.restful.interface.file=RESTful.interface.properties
#
#If the Audit is set false, then Audit function will not work at the Server Run time.
#This will Syncronize the data between Roles and Userinfo Table
xacml.audit.userInfo = true
#
#The Test Environment User Login LoginIU Should provide below on seperating with Comma
#
xacml.testEnvironment.loginId = 

#Log DB properties 
xacml.log.db.driver=org.mariadb.jdbc.Driver
xacml.log.db.url=jdbc:mariadb://localhost:3306/log?connectTimeout=30000&socketTimeout=60000&log=true&sessionVariables=max_statement_time=30
xacml.log.db.user=policy_user
xacml.log.db.password=policy_user

xacml.att.log.timeframe=150

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

# Dashboard refresh rate in miliseconds
xacml.refresh.rate=40000
xacml.user.column.count=3
xacml.sqlcontainer.page.length=75
xacm.xcor.required.pattern=1,1
xacm.cache.live.time=2
xacml.max.priority.count=10

#
# These can be set so the Admin Console knows who is logged on. Ideally, you can run the console in a J2EE
# container and setup authentication as you please. Setting HttpSession attribute values will override these
# values set in the properties files.
#
# ((HttpServletRequest) request).getSession().setAttribute("xacml.rest.admin.user.name", "Homer");
#
# The default policy: Policy-Admin.xml is extremely simple.
#
# You can test authorization within the Admin Console by changing the user id.
# There are 3 supported user ids:
#	guest - Read only access
#	editor - Read/Write access
#	admin - Read/Write/Admin access
#
# An empty or null value for xacml.rest.admin.user.id results in no access to the application at all.
#
# This is for development/demonstration purposes only. A production environment should provide authentication which is
# outside the scope of this application. This application can be used to develop a XACML policy for user authorization
# within this application.
#
#xacml.rest.admin.user.name=Guest
#xacml.rest.admin.user.id=guest
#xacml.rest.admin.user.name=Editor
#xacml.rest.admin.user.id=editor
xacml.rest.admin.user.name=Administrator
xacml.rest.admin.user.id=super-admin
xacml.rest.admin.user.email=

#
# URL location for the PAP servlet.
#
xacml.rest.pap.url=http://localhost:8070/pap/

# id PAP
xacml.rest.pap.userid=testpap
# pass PAP
xacml.rest.pap.password=alpha123

# new Property Please mention your PAP-REST webapps Location here. 

xacml.rest.config.webapps=/home/users/PolicyEngine/webapps/ConfigPAP/

# pdps file - Needs to have the location of the PDPs File of the PAP-REST
xacml.rest.pdp.idfile=test.properties

#Template Versions
xacml.rest.closedLoopFault=OpenSource.version.1
xacml.rest.closedLoopPM=OpenSource.version.1
xacml.rest.microServices=OpenSource.version.1
xacml.rest.gocPolicy=OpenSource.version.1
xacml.rest.firewallPolicy=OpenSource.version.1
xacml.rest.optimization=OpenSource.version.1

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

#The name of the Admin.  Must be unique across the system
xacml.rest.admin.resource.name=site_1.admin_1

#The site name for the Admin
site_name=site_1

#Has to be one of pdp_xacml, pdp_drools, pap, pap_admin, logparser, brms_gateway, astra_gateway, elk_server
node_type=pap_admin

# 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

#Automatic Policy Distribution 
xacml.att.automatic.push = false


#Dashboard Tab Limit
xacml.onap.dashboard.logTableLimit = 5000
xacml.onap.dashboard.systemAlertTableLimit = 2000


#Diff of policies for Firewall feature
FW_GETURL=https://todo_enter_the_firewallurl
FW_AUTHOURL=https://todo_enter_the_firewallAuthurl
FW_PROXY=todo_enter_the_proxy
FW_PORT=8080

#SMTP Server Details for Java Mail
onap.smtp.host = smtp_host
onap.smtp.port = smtp_port
onap.smtp.userName = smtp_username
onap.smtp.password = smtp_password
onap.smtp.emailExtension=smtp_emailExtension
onap.application.name = smtp_AppName

#Dialect for Database
onap.dialect = org.hibernate.dialect.MySQLDialect

policyAdapter.impl.className = org.onap.policy.admin.PolicyAdapter

#Micro Service Model Properties
xacml.policy.msOnapName=http://org.onap
xacml.policy.msPolicyName=http://org.onap.policy

#Size limit (in bytes) for file uploads
file.size.limit=30000000

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