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

#
# 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?failOverReadOnly=false&autoReconnect=true
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