###
# ============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=com.mysql.jdbc.Driver
javax.persistence.jdbc.url=jdbc:mysql://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

#***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