###
# ============LICENSE_START=======================================================
# ECOMP 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.openecomp.policy.xacml.custom.EcompFunctionDefinitionFactory
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.openecomp.policy.xacml.std.pap.StdEngineFactory

#
# Admin Console properties
#
xacml.AC.papEngineFactory=org.openecomp.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/ecomp_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.ecomp.dashboard.logTableLimit = 5000
xacml.ecomp.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
ecomp.smtp.host = smtp_host
ecomp.smtp.port = smtp_port
ecomp.smtp.userName = smtp_username
ecomp.smtp.password = smtp_password
ecomp.smtp.emailExtension=smtp_emailExtension
ecomp.application.name = smtp_AppName

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

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

#Micro Service Model Properties
xacml.policy.msEcompName=http://org.openecomp
xacml.policy.msPolicyName=http://org.openecomp/policy