# configs component installation configuration parameters

# tomcat specific parameters

TOMCAT_JMX_PORT=9993
TOMCAT_SHUTDOWN_PORT=8090
SSL_HTTP_CONNECTOR_PORT=8443
SSL_HTTP_CONNECTOR_REDIRECT_PORT=8443
SSL_AJP_CONNECTOR_PORT=8383
SSL_AJP_CONNECTOR_REDIRECT_PORT=8443

TOMCAT_X_MS_MB=2048
TOMCAT_X_MX_MB=2048

# ------------------ console properties ---------------------------

#
# Authorization Policy

ROOT_POLICIES=admin
ADMIN_FILE=Policy-Admin.xml


# Set your domain here:

REST_ADMIN_DOMAIN=com

#
# Location where the GIT repository is located
#
REST_ADMIN_REPOSITORY=repository

#
# Location where all the user workspaces are located.
#
REST_ADMIN_WORKSPACE=${{POLICY_HOME}}/servers/console/bin/workspace

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

REST_ADMIN_USER_NAME=Administrator
REST_ADMIN_USER_ID=super-admin

#
#
# Property to declare the max time frame for logs.
#
LOG_TIMEFRAME=30

# Property to declare the number of visible rows for users in MicroService Policy
COLUMN_COUNT=3

# Dashboard refresh rate in miliseconds
REFRESH_RATE=40000

#
# URL location for the PAP servlet.
#


REST_PAP_URL=http://pap:9091/pap/

#
# Config/Action Properties location.
#

REST_CONFIG_HOME=${{POLICY_HOME}}/servers/pap/webapps/Config/
REST_ACTION_HOME=${{POLICY_HOME}}/servers/pap/webapps/Action/
REST_CONFIG_URL=http://pap:9091/
REST_CONFIG_WEBAPPS=${{POLICY_HOME}}/servers/pap/webapps/

# PAP account information
CONSOLE_PAP_HTTP_USER_ID=testpap
CONSOLE_PAP_HTTP_PASSWORD=alpha123


node_type=pap_admin
resource_name=console_1

# 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 
automatic_push=false

#Diff of policies for Firewall feature
FW_GETURL=
FW_AUTHOURL=
FW_PROXY=
FW_PORT=

#SMTP Server Details for Java Mail
onap_smtp_host=
onap_smtp_port=25
onap_smtp_userName=
onap_smtp_password=
onap_smtp_emailExtension=
onap_application_name=

#-----------------------ONAP-PORTAL-Properties----------------------

ONAP_REDIRECT_URL=http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/login.htm
ONAP_REST_URL=http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/auxapi
ONAP_UEB_URL_LIST=
ONAP_PORTAL_INBOX_NAME=
ONAP_UEB_APP_KEY=
ONAP_UEB_APP_SECRET=
ONAP_UEB_APP_MAILBOX_NAME=
APP_DISPLAY_NAME=ONAP Policy
ONAP_SHARED_CONTEXT_REST_URL=http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/context
