# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.

#
# This file provides list of deployment variables for the Policy Manager Web Application 
#

#------------------------- DB CONFIG - BEGIN ----------------------------------

#DB_FLAVOR=ORACLE
#DB_FLAVOR=MYSQL
DB_FLAVOR=MYSQL
#
# The executable path to be used to invoke command-line MYSQL 
#
#SQL_COMMAND_INVOKER='mysql'
#SQL_COMMAND_INVOKER='sqlplus'
SQL_COMMAND_INVOKER='mysql'

#
# Location of DB client library (please check the location of the jar file)
#
#SQL_CONNECTOR_JAR=/usr/share/java/ojdbc6.jar
#SQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
SQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar


#
# DB password for the DB admin user-id
# **************************************************************************
# ** If the password is left empty or not-defined here, 
# ** it will be prompted to enter the password during installation process 
# **************************************************************************
#
#db_root_user=root
#db_root_user=SYS
db_root_user=root
db_root_password=
db_host=localhost

#
# DB UserId used for the XASecure schema
# 
db_name=ranger
db_user=rangeradmin
db_password=

#
# DB UserId for storing auditlog infromation
# 
# * audit_db can be same as the XASecure schema db
# * audit_db must exists in the same ${db_host} as xaserver database ${db_name} 
# * audit_user must be a different user than db_user (as audit user has access to only audit tables)
#
audit_db_name=ranger_audit
audit_db_user=rangerlogger
audit_db_password=

#------------------------- DB CONFIG - END ----------------------------------

#
# ------- PolicyManager CONFIG ----------------
#

policymgr_external_url=http://localhost:6080
policymgr_http_enabled=true

#
# ------- PolicyManager CONFIG - END ---------------
#


#
# ------- UNIX User CONFIG ----------------
#
unix_user=ranger
unix_group=ranger

#
# ------- UNIX User CONFIG  - END ----------------
#

#
# UNIX authentication service for Policy Manager
#
# PolicyManager can authenticate using UNIX username/password
# The UNIX server specified here as authServiceHostName needs to be installed with xasecure-unix-ugsync package.
# Once the service is installed on authServiceHostName, the UNIX username/password from the host <authServiceHostName> can be used to login into policy manager
#
# ** The installation of xasecure-unix-ugsync package can be installed after the policymanager installation is finished.
#
#LDAP|ACTIVE_DIRECTORY|UNIX|NONE
authentication_method=NONE
remoteLoginEnabled=true
authServiceHostName=localhost
authServicePort=5151

####LDAP settings - Required only if have selected LDAP authentication ####
#
# Sample Settings
#
#xa_ldap_url="ldap://71.127.43.33:389"
#xa_ldap_userDNpattern="uid={0},ou=users,dc=xasecure,dc=net"
#xa_ldap_groupSearchBase="ou=groups,dc=xasecure,dc=net"
#xa_ldap_groupSearchFilter="(member=uid={0},ou=users,dc=xasecure,dc=net)"
#xa_ldap_groupRoleAttribute="cn"

xa_ldap_url=
xa_ldap_userDNpattern=
xa_ldap_groupSearchBase=
xa_ldap_groupSearchFilter=
xa_ldap_groupRoleAttribute=

####ACTIVE_DIRECTORY settings - Required only if have selected AD authentication ####
#
# Sample Settings
#
#xa_ldap_ad_domain="xasecure.net"
#xa_ldap_ad_url="ldap://ad.xasecure.net:389"

xa_ldap_ad_domain=
xa_ldap_ad_url=
#
# -----------------------------------------------------------
#

# #################  DO NOT MODIFY ANY VARIABLES BELOW #########################
#
# --- These deployment variables are not to be modified unless you understand the full impact of the changes
#
################################################################################

XAPOLICYMGR_DIR=$PWD
app_home=$PWD/ews/webapp
TMPFILE=$PWD/.fi_tmp
LOGFILE=$PWD/logfile
LOGFILES="$LOGFILE"

JAVA_BIN='java'
JAVA_VERSION_REQUIRED='1.7'
JAVA_ORACLE='Java(TM) SE Runtime Environment'

mysql_create_user_file=${PWD}/db/create_dev_user.sql
mysql_core_file=${PWD}/db/xa_core_db.sql
mysql_audit_file=${PWD}/db/xa_audit_db.sql
mysql_asset_file=${PWD}/db/reset_asset.sql

#oracle_create_user_file=${PWD}/db/oracle/create_dev_user_oracle.sql
oracle_core_file=${PWD}/db/oracle/xa_core_db_oracle.sql
oracle_audit_file=${PWD}/db/oracle/xa_audit_db_oracle.sql
#oracle_asset_file=${PWD}/db/oracle/reset_asset_oracle.sql
#

cred_keystore_filename=$app_home/WEB-INF/classes/conf/.jceks/rangeradmin.jceks
