################################################################################
#
# 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 following file is used to customize system properties for the Apache Unomi application running in Apache Karaf.
${optionals}=unomi.custom.system.properties
#######################################################################################################################
## Hazelcast clustering settings                                                                                     ##
#######################################################################################################################
org.apache.unomi.hazelcast.group.name=${env:UNOMI_HAZELCAST_GROUP_NAME:-cellar}
org.apache.unomi.hazelcast.group.password=${env:UNOMI_HAZELCAST_GROUP_PASSWORD:-pass}
# This list can be comma separated and use ranges such as 192.168.1.0-7,192.168.1.21
org.apache.unomi.hazelcast.tcp-ip.members=${env:UNOMI_HAZELCAST_TCPIP_MEMBERS:-127.0.0.1}
org.apache.unomi.hazelcast.network.port=${env:UNOMI_HAZELCAST_NETWORK_PORT:-5701}

#######################################################################################################################
## Security settings                                                                                                 ##
#######################################################################################################################
org.apache.unomi.security.root.password=${env:UNOMI_ROOT_PASSWORD:-karaf}

# These parameters control the list of classes that are allowed or forbidden when executing expressions.
org.apache.unomi.scripting.allow=${env:UNOMI_ALLOW_SCRIPTING_CLASSES:-org.apache.unomi.api.Event,org.apache.unomi.api.Profile,org.apache.unomi.api.Session,org.apache.unomi.api.Item,org.apache.unomi.api.CustomItem,ognl.*,java.lang.Object,java.util.Map,java.util.HashMap,java.lang.Integer,org.mvel2.*,java.lang.String}
org.apache.unomi.scripting.forbid=${env:UNOMI_FORBID_SCRIPTING_CLASSES:-}

# This parameter controls the whole expression filtering system. It is not recommended to turn it off. The main reason
# to turn it off would be to check if it is interfering with something, but it should always be active in production.
org.apache.unomi.scripting.filter.activated=${env:UNOMI_SCRIPTING_FILTER_ACTIVATED:-true}

# The following parameters tells the expression filtering system which configurations to expect. By default only
# MVEL and/or OGNL are accepted values, but in the future these might be replaced by new scripting sub-systems.
org.apache.unomi.scripting.filter.collections=${env:UNOMI_SCRIPTING_FILTER_COLLECTIONS:-mvel,ognl}

# For each scripting sub-system, there is an allow and a forbid property that reference a .json files,
# you can either edit this files or reference your own file directly in the following config.
# Note: You can add new expressions to the "allow" file, although it is better to add them inside any plugins you may be adding.
#       This configuration is only designed to compensate for the cases where something was not properly designed or to deal with compatibility issues.
#       Just be VERY careful to make your patterns AS SPECIFIC AS POSSIBLE in order to avoid introducing a way to abuse the expression filtering.
# Note: It is NOT recommended to change the built-in "forbid" value unless you are having issues with its value.
# Note: mvel-allow.json contains an empty array: [], this mean nothing is allowed, so far.
#       If you want to allow all expression, just remove the property org.apache.unomi.scripting.filter.mvel.allow, but this is not recommended
#       It's better to list your expressions, and provide them in the mvel-allow.json file
#       example: ["\\Qsession.size + 1\\E"]
org.apache.unomi.scripting.filter.mvel.allow=${env:UNOMI_SCRIPTING_FILTER_MVEL_ALLOW:-${karaf.etc}/mvel-allow.json}
org.apache.unomi.scripting.filter.mvel.forbid=${env:UNOMI_SCRIPTING_FILTER_MVEL_FORBID:-${karaf.etc}/mvel-forbid.json}
org.apache.unomi.scripting.filter.ognl.allow=${env:UNOMI_SCRIPTING_FILTER_OGNL_ALLOW:-${karaf.etc}/ognl-allow.json}
org.apache.unomi.scripting.filter.ognl.forbid=${env:UNOMI_SCRIPTING_FILTER_OGNL_FORBID:-${karaf.etc}/ognl-forbid.json}

# This parameter controls whether OGNL scripting is allowed in expressions. Because of security reasons it is
# deactivated by default. If you run into compatibility issues you could reactivate it but it is at your own risk.
org.apache.unomi.security.properties.useOGNLScripting=${env:UNOMI_SCRIPTING_USE_OGNL:-false}
# This parameter controls the condition sanitizing done on the ContextServlet (/context.json). If will remove any
# expressions that start with "script::". It is not recommended to change this value, unless you run into compatibility issues.
org.apache.unomi.security.personalization.sanitizeConditions=${env:UNOMI_SECURITY_SANITIZEPERSONALIZATIONCONDITIONS:-true}

#######################################################################################################################
## HTTP Settings                                                                                                     ##
#######################################################################################################################
org.ops4j.pax.web.ssl.keystore=${env:UNOMI_SSL_KEYSTORE:-${karaf.etc}/keystore}
org.ops4j.pax.web.ssl.password=${env:UNOMI_SSL_PASSWORD:-changeme}
org.ops4j.pax.web.ssl.keypassword=${env:UNOMI_SSL_KEYPASSWORD:-changeme}

org.osgi.service.http.secure.enabled = true
org.osgi.service.http.port=${env:UNOMI_HTTP_PORT:-8181}
org.osgi.service.http.port.secure=${env:UNOMI_SECURE_HTTP_PORT:-9443}
org.apache.unomi.admin.servlet.context=${env:UNOMI_ADMIN_CONTEXT:-/cxs}

#######################################################################################################################
## Cluster Settings                                                                                                  ##
#######################################################################################################################
org.apache.unomi.cluster.group=${env:UNOMI_CLUSTER_GROUP:-default}
# To simplify testing we set the public address to use HTTP, but for production environments it is highly recommended
# to switch to using HTTPS with a proper SSL certificate installed.
org.apache.unomi.cluster.public.address=${env:UNOMI_CLUSTER_PUBLIC_ADDRESS:-http://localhost:8181}
org.apache.unomi.cluster.internal.address=${env:UNOMI_CLUSTER_INTERNAL_ADDRESS:-https://localhost:9443}
# The nodeStatisticsUpdateFrequency controls the frequency of the update of system statistics such as CPU load,
# system load average and uptime. This value is set in milliseconds and is set to 10 seconds by default. Each node
# will retrieve the local values and broadcast them through a cluster event to all the other nodes to update
# the global cluster statistics.
org.apache.unomi.cluster.nodeStatisticsUpdateFrequency=${env:UNOMI_CLUSTER_NODESTATISTICS_UPDATEFREQUENCY:-10000}

#######################################################################################################################
## ElasticSearch settings                                                                                            ##
#######################################################################################################################
org.apache.unomi.elasticsearch.cluster.name=${env:UNOMI_ELASTICSEARCH_CLUSTERNAME:-contextElasticSearch}
# The elasticSearchAddresses may be a comma seperated list of host names and ports such as
# hostA:9200,hostB:9200
# Note: the port number must be repeated for each host.
org.apache.unomi.elasticsearch.addresses=${env:UNOMI_ELASTICSEARCH_ADDRESSES:-localhost:9200}
# refresh policy per item type in Json.
# Valid values are WAIT_UNTIL/IMMEDIATE/NONE. The default refresh policy is NONE.
# Example: "{"event":"WAIT_UNTIL","rule":"NONE"}
org.apache.unomi.elasticsearch.itemTypeToRefreshPolicy=${env:UNOMI_ELASTICSEARCH_REFRESH_POLICY_PER_ITEM_TYPE:-}
org.apache.unomi.elasticsearch.fatalIllegalStateErrors=${env:UNOMI_ELASTICSEARCH_FATAL_STATE_ERRORS:-}
org.apache.unomi.elasticsearch.index.prefix=${env:UNOMI_ELASTICSEARCH_INDEXPREFIX:-context}
org.apache.unomi.elasticsearch.monthlyIndex.nbShards=${env:UNOMI_ELASTICSEARCH_MONTHLYINDEX_SHARDS:-5}
org.apache.unomi.elasticsearch.monthlyIndex.nbReplicas=${env:UNOMI_ELASTICSEARCH_MONTHLYINDEX_REPLICAS:-0}
org.apache.unomi.elasticsearch.monthlyIndex.indexMappingTotalFieldsLimit=${env:UNOMI_ELASTICSEARCH_MONTHLYINDEX_MAPPINGTOTALFIELDSLIMIT:-1000}
org.apache.unomi.elasticsearch.monthlyIndex.indexMaxDocValueFieldsSearch=${env:UNOMI_ELASTICSEARCH_MONTHLYINDEX_MAXDOCVALUEFIELDSSEARCH:-1000}
org.apache.unomi.elasticsearch.monthlyIndex.itemsMonthlyIndexedOverride=${env:UNOMI_ELASTICSEARCH_MONTHLYINDEX_ITEMSMONTHLYINDEXED:-event,session}
org.apache.unomi.elasticsearch.defaultIndex.nbShards=${env:UNOMI_ELASTICSEARCH_DEFAULTINDEX_SHARDS:-5}
org.apache.unomi.elasticsearch.defaultIndex.nbReplicas=${env:UNOMI_ELASTICSEARCH_DEFAULTINDEX_REPLICAS:-0}
org.apache.unomi.elasticsearch.defaultIndex.indexMappingTotalFieldsLimit=${env:UNOMI_ELASTICSEARCH_DEFAULTINDEX_MAPPINGTOTALFIELDSLIMIT:-1000}
org.apache.unomi.elasticsearch.defaultIndex.indexMaxDocValueFieldsSearch=${env:UNOMI_ELASTICSEARCH_DEFAULTINDEX_MAXDOCVALUEFIELDSSEARCH:-1000}
org.apache.unomi.elasticsearch.defaultQueryLimit=${env:UNOMI_ELASTICSEARCH_DEFAULTQUERYLIMIT:-10}
org.apache.unomi.elasticsearch.aggregateQueryBucketSize=${env:UNOMI_ELASTICSEARCH_AGGREGATEBUCKETSIZE:-5000}
org.apache.unomi.elasticsearch.maximumIdsQueryCount=${env:UNOMI_ELASTICSEARCH_MAXIMUMIDSQUERYCOUNT:-5000}
org.apache.unomi.elasticsearch.clientSocketTimeout=${env:UNOMI_ELASTICSEARCH_CLIENT_SOCKET_TIMEOUT:-}
org.apache.unomi.elasticsearch.pastEventsDisablePartitions=${env:UNOMI_ELASTICSEARCH_PAST_EVENTS_DISABLE_PARTITIONS:-false}
org.apache.unomi.elasticsearch.aggQueryThrowOnMissingDocs=${env:UNOMI_ELASTICSEARCH_AGG_QUERY_THROW_ON_MISSING_DOCS:-false}
org.apache.unomi.elasticsearch.aggQueryMaxResponseSizeHttp=${env:UNOMI_ELASTICSEARCH_AGG_QUERY_MAX_RESPONSE_SIZE_HTTP:-}
# The following settings control the behavior of the BulkProcessor API. You can find more information about these
# settings and their behavior here : https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.4/java-docs-bulk-processor.html
# The values used here are the default values of the API
org.apache.unomi.elasticsearch.bulkProcessor.concurrentRequests=${env:UNOMI_ELASTICSEARCH_BULK_CONCURRENTREQUESTS:-1}
org.apache.unomi.elasticsearch.bulkProcessor.bulkActions=${env:UNOMI_ELASTICSEARCH_BULK_ACTIONS:-1000}
org.apache.unomi.elasticsearch.bulkProcessor.bulkSize=${env:UNOMI_ELASTICSEARCH_BULK_SIZE:-5MB}
org.apache.unomi.elasticsearch.bulkProcessor.flushInterval=${env:UNOMI_ELASTICSEARCH_BULK_FLUSHINTERVAL:-5s}
org.apache.unomi.elasticsearch.bulkProcessor.backoffPolicy=${env:UNOMI_ELASTICSEARCH_BULK_BACKOFFPOLICY:-exponential}
# Errors
org.apache.unomi.elasticsearch.throwExceptions=${env:UNOMI_ELASTICSEARCH_THROW_EXCEPTIONS:-false}
# Authentication
org.apache.unomi.elasticsearch.username=${env:UNOMI_ELASTICSEARCH_USERNAME:-}
org.apache.unomi.elasticsearch.password=${env:UNOMI_ELASTICSEARCH_PASSWORD:-}
org.apache.unomi.elasticsearch.sslEnable=${env:UNOMI_ELASTICSEARCH_SSL_ENABLE:-false}
org.apache.unomi.elasticsearch.sslTrustAllCertificates=${env:UNOMI_ELASTICSEARCH_SSL_TRUST_ALL_CERTIFICATES:-false}

#######################################################################################################################
## Service settings                                                                                                  ##
#######################################################################################################################

# Purge job interval (in days)
org.apache.unomi.profile.purge.interval=${env:UNOMI_PROFILE_PURGE_INTERVAL:-1}
# Purge profiles that have been inactive for a specific number of days
org.apache.unomi.profile.purge.inactiveTime=${env:UNOMI_PROFILE_PURGE_INACTIVETIME:-180}
# Purge profiles that have been created for a specific number of days
org.apache.unomi.profile.purge.existTime=${env:UNOMI_PROFILE_PURGE_EXISTTIME:--1}
# Purge all monthly indexes (sessions/events) that have been created for a specific number of months
org.apache.unomi.monthly.index.purge.existTime=${env:UNOMI_MONTHLY_INDEX_PURGE_EXISTTIME:-12}
# Refresh Elasticsearch after saving a profile
org.apache.unomi.profile.forceRefreshOnSave=${env:UNOMI_PROFILE_REFRESH_ON_SAVE:-false}
# When performing segment updates, this controls the size of the scrolling query size used to iterate over all the
# profiles that need updating
org.apache.unomi.segment.update.batchSize=${env:UNOMI_SEGMENT_UPDATE_BATCHSIZE:-1000}
# Run Batch request separately for updating segments in profiles
org.apache.unomi.segment.batch.update=${env:UNOMI_SEGMENT_BATCH_PROFILE_UPDATE:-false}
# Send Profile Updated Event for every profile segment update
org.apache.unomi.segment.send.profile.update.event=${env: UNOMI_SEGMENT_SEND_PROFILE_UPDATE_EVENT:-true}
# Daily hour once a day to recalculate segment with dateExpr condition
org.apache.unomi.segment.daily.dateexpr.evaluation.hourutc=${env: UNOMI_SEGMENT_DAILY_DATEEXPR_EVALUATION_HOUR_UTC:-5}
# When performing segment updates, can retry an update in case of an error to a single profile
org.apache.unomi.services.segment.max.retries.update.profile.segment=${env:UNOMI_SEGMENT_UPDATE_MAX_RETRIES:-0}
# When performing retry of segment update after a request was failed, delay of requests
org.apache.unomi.services.segment.update.segment.retry.seconds.delay=${env:UNOMI_SEGMENT_UPDATE_RETRY_DELAY:-1}
# The interval in milliseconds to use to reload the definitions (condition types and action types)
org.apache.unomi.definitions.refresh.interval=${env:UNOMI_DEFINITIONS_REFRESH_INTERVAL:-10000}
# The interval in milliseconds to use to reload the property types
org.apache.unomi.properties.refresh.interval=${env:UNOMI_PROPERTIES_REFRESH_INTERVAL:-10000}
# The interval in milliseconds to use to reload the segments and scoring plans
org.apache.unomi.segment.refresh.interval=${env:UNOMI_SEGMENT_REFRESH_INTERVAL:-1000}
# The interval in days to use to recalculate segments/scoring plans on profile
org.apache.unomi.segment.recalculate.period=${env:UNOMI_SEGMENT_RECALCULATE_PERIOD:-1}
# The interval in milliseconds to use to reload the rules
org.apache.unomi.rules.refresh.interval=${env:UNOMI_RULES_REFRESH_INTERVAL:-1000}
# The interval in milliseconds to use to reload the scopes
org.apache.unomi.scopes.refresh.interval=${env:UNOMI_SCOPES_REFRESH_INTERVAL:-1000}
# The interval in milliseconds to use to reload the rules statistics
org.apache.unomi.rules.statistics.refresh.interval=${env:UNOMI_RULES_STATISTICS_REFRESH_INTERVAL:-10000}
# If this setting is active, the rules engine will try to classify the events by event type internally which makes
# rules execution a lot faster. If there are any problems detected with rules execution, you might want to try to turn
# off the optimization and file a bug report if this fixed the problem.
org.apache.unomi.rules.optimizationActivated=${env:UNOMI_RULES_OPTIMIZATION_ACTIVATED:-true}
# The number of threads to compose the pool size of the scheduler.
org.apache.unomi.scheduler.thread.poolSize=${env:UNOMI_SCHEDULER_THREAD_POOL_SIZE:-5}

#######################################################################################################################
## Third Party server settings                                                                                       ##
#######################################################################################################################
# Define secured events and the thirdparty servers which are allowed to send
# them.

# Example : provider1 is allowed to send login and download events from
# localhost , with key provided in X-Unomi-Peer
#
org.apache.unomi.thirdparty.provider1.key=${env:UNOMI_THIRDPARTY_PROVIDER1_KEY:-670c26d1cc413346c3b2fd9ce65dab41}
org.apache.unomi.thirdparty.provider1.ipAddresses=${env:UNOMI_THIRDPARTY_PROVIDER1_IPADDRESSES:-127.0.0.1,::1}
org.apache.unomi.thirdparty.provider1.allowedEvents=${env:UNOMI_THIRDPARTY_PROVIDER1_ALLOWEDEVENTS:-login,updateProperties}

#######################################################################################################################
## Profile cookie & download settings                                                                                ##
#######################################################################################################################
# Configure here the domain to use the for cookies setup by the Apache Unomi context servlet
# by default the current request will be used to set the domain.
org.apache.unomi.profile.cookie.domain=${env:UNOMI_PROFILE_COOKIE_DOMAIN:-}
# This setting controls the name of the cookie use to track profiles using Apache Unomi
org.apache.unomi.profile.cookie.name=${env:UNOMI_PROFILE_COOKIE_NAME:-context-profile-id}
# This setting controls the maximum age of the profile cookie. By default it is set to a year.
org.apache.unomi.profile.cookie.maxAgeInSeconds=${env:UNOMI_PROFILE_COOKIE_MAXAGEINSECONDS:-31536000}
# This setting controls if the cookie should be flagged as HttpOnly or not.
org.apache.unomi.profile.cookie.httpOnly=${env:UNOMI_PROFILE_COOKIE_HTTPONLY:-false}
#Allowed profile download formats, actually only csv (horizontal and vertical), json, text and yaml are allowed.
org.apache.unomi.profile.download.formats=${env:UNOMI_PROFILE_DOWNLOAD_FORMATS:-csv,yaml,json,text}
# This setting allow for request size (Content-length) protection. Checking that the requests do not exceed the limit.
# It's only applied on POST requests on public endpoints like /context.js or /eventcollector. (limit set to 200000 bytes by default)
# In case a request exceed this limit, it will be rejected with the HTTP status code 400 with an error message returned.
# To disable this limit you can set the value to 0 or a negative value.
org.apache.unomi.public.post.request.bytes.limit=${env:UNOMI_PUBLIC_POST_REQUEST_BYTES_LIMIT:-200000}

#######################################################################################################################
## SSH Server settings                                                                                               ##
#######################################################################################################################
# These properties are used to configure Karaf's ssh shell.
#
# Via sshPort and sshHost you define the address you can login into Karaf.
#
org.apache.unomi.shell.sshPort=${env:UNOMI_SHELL_SSHPORT:-8102}
org.apache.unomi.shell.sshHost=${env:UNOMI_SHELL_SSHHOST:-0.0.0.0}
#
# The sshIdleTimeout defines the inactivity timeout to logout the SSH session.
# The sshIdleTimeout is in milliseconds, and the default is set to 30 minutes.
#
org.apache.unomi.shell.sshIdleTimeOut=${env:UNOMI_SHELL_SSHIDLETIMEOUT:-1800000}
#
# The location of the hostKey file defines where the private/public key of the server
# is located. If no file is at the defined location it will be ignored.
#
org.apache.unomi.shell.hostKey=${env:UNOMI_SHELL_HOSTKEY:-${karaf.etc}/host.key}
#
# The format used for hostKey.
# Possible values are simple (Karaf internal), or PEM (OpenSSH format)
#
org.apache.unomi.shell.hostKeyFormat=${env:UNOMI_SHELL_HOSTKEYFORMAT:-simple}

#
# shRole defines the role required to access the console through ssh
#
org.apache.unomi.shell.sshRole=${env:UNOMI_SHELL_SSHROLE:-ssh}
#
# Specify an additional welcome banner to be displayed when a user logs into the server.
#
org.apache.unomi.shell.welcomeBanner=${env:UNOMI_SHELL_WELCOMEBANNER:-}
#
# Defines the completion mode on the Karaf shell console. The possible values are:
# - GLOBAL: it's the same behavior as in previous Karaf releases. The completion displays all commands and all aliases
#           ignoring if you are in a subshell or not.
# - FIRST: the completion displays all commands and all aliases only when you are not in a subshell. When you are
#          in a subshell, the completion displays only the commands local to the subshell.
# - SUBSHELL: the completion displays only the subshells on the root level. When you are in a subshell, the completion
#             displays only the commands local to the subshell.
# This property define the default value when you use the Karaf shell console.
# You can change the completion mode directly in the shell console, using shell:completion command.
#
org.apache.unomi.shell.completionMode=${env:UNOMI_SHELL_COMPLETIONMODE:-GLOBAL}

#######################################################################################################################
## Log settings                                                                                                      ##
#######################################################################################################################
org.apache.unomi.logs.root.level=${env:UNOMI_LOGS_ROOT_LEVEL:-INFO}
org.apache.unomi.logs.sshd.level=${env:UNOMI_LOGS_SSHD_LEVEL:-INFO}
org.apache.unomi.logs.cxf.level=${env:UNOMI_LOGS_CXF_LEVEL:-WARN}
org.apache.unomi.logs.fileName=${env:UNOMI_LOGS_FILENAME:-${karaf.data}/log/karaf.log}
org.apache.unomi.logs.filePattern=${env:UNOMI_LOGS_FILEPATTERN:-${karaf.data}/log/karaf.log.%i}
org.apache.unomi.logs.audit.fileName=${env:UNOMI_LOGS_AUDIT_FILENAME:-${karaf.data}/security/audit.log}
org.apache.unomi.logs.audit.filePattern=${env:UNOMI_LOGS_AUDIT_FILEPATTERN:-${karaf.data}/security/audit.log.%i}

#######################################################################################################################
## GeoNames Database settings                                                                                        ##
#######################################################################################################################
org.apache.unomi.geonames.location=${env:UNOMI_GEONAMES_DB:-${karaf.etc}/allCountries.zip}
org.apache.unomi.geonames.forceImport=${env:UNOMI_GEONAMES_FORCEIMPORT:-false}
# The interval in milliseconds to use to check if the database is ready to be loaded
org.apache.unomi.geonames.refresh.interval=${env:UNOMI_GEONAMES_REFRESH_INTERVAL:-5000}


#######################################################################################################################
## Groovy action settings                                                                                            ##
#######################################################################################################################
# The interval in milliseconds to reload the groovy actions in memory
org.apache.unomi.groovy.actions.refresh.interval=${env:UNOMI_GROOVY_ACTION_REFRESH_INTERVAL:-1000}

#######################################################################################################################
## MaxMind IP Database settings                                                                                      ##
#######################################################################################################################
org.apache.unomi.ip.database.location=${env:UNOMI_IP_DB:-${karaf.etc}/GeoLite2-City.mmdb}
org.apache.unomi.ip.default.countryCode=${env:UNOMI_IP_DEFAULT_COUNTRYCODE:-CH}
org.apache.unomi.ip.default.countryName=${env:UNOMI_IP_DEFAULT_COUNTRYNAME:-Switzerland}
org.apache.unomi.ip.default.city=${env:UNOMI_IP_DEFAULT_CITY:-Geneva}
org.apache.unomi.ip.default.subdiv1=${env:UNOMI_IP_DEFAULT_SUBDIV1:-2660645}
org.apache.unomi.ip.default.subdiv2=${env:UNOMI_IP_DEFAULT_SUBDIV2:-6458783}
org.apache.unomi.ip.default.isp=${env:UNOMI_IP_DEFAULT_ISP:-Cablecom}
org.apache.unomi.ip.default.latitude=${env:UNOMI_IP_DEFAULT_LATITUDE:-46.1884341}
org.apache.unomi.ip.default.longitude=${env:UNOMI_IP_DEFAULT_LONGITUDE:-6.1282508}

#######################################################################################################################
## Mail sending settings                                                                                             ##
#######################################################################################################################
org.apache.unomi.mail.server.hostname=${env:UNOMI_MAIL_HOSTNAME:-smtp.gmail.com}
org.apache.unomi.mail.server.port=${env:UNOMI_MAIL_PORT:-465}
org.apache.unomi.mail.server.username=${env:UNOMI_MAIL_USERNAME:-}
org.apache.unomi.mail.server.password=${env:UNOMI_MAIL_PASSWORD:-}
org.apache.unomi.mail.server.sslOnConnect=${env:UNOMI_MAIL_SSLONCONNECT:-true}

#######################################################################################################################
## baseplugin settings                                                                                                 ##
#######################################################################################################################
org.apache.unomi.plugins.base.maxProfilesInOneMerge=${env:UNOMI_MAX_PROFILES_IN_ONE_MERGE:--1}

#######################################################################################################################
## Security settings                                                                                                 ##
#######################################################################################################################
org.apache.unomi.security.encryption.enabled=${env:UNOMI_ENCRYPTION_ENABLED:-false}
#
# Encryption Service name
#   the default one is 'basic'
#   a more powerful one named 'jasypt' is available
#       when installing the encryption feature
#
org.apache.unomi.security.encryption.name=${env:UNOMI_ENCRYPTION_NAME:-}
#
# Set the encryption algorithm to use in Karaf JAAS login module
# Supported encryption algorithms follow:
#   MD2
#   MD5
#   SHA-1
#   SHA-256
#   SHA-384
#   SHA-512
#
org.apache.unomi.security.encryption.algorithm=${env:UNOMI_ENCRYPTION_ALGORITHM:-SHA-512}
#
# Encoding of the encrypted password.
# Can be:
#   hexadecimal
#   base64
#
org.apache.unomi.security.encryption.encoding=${env:UNOMI_ENCRYPTION_ENCODING:-hexadecimal}

#######################################################################################################################
## Profile import/export router settings                                                                             ##
#######################################################################################################################
#Configuration Type values {'nobroker', 'kafka'}
org.apache.unomi.router.config.type=${env:UNOMI_ROUTER_CONFIG_TYPE:-nobroker}

#Kafka (only used if configuration type is set to kafka
org.apache.unomi.router.kafka.host=${env:UNOMI_ROUTER_KAFKA_HOST:-localhost}
org.apache.unomi.router.kafka.port${env:UNOMI_ROUTER_KAFKA_PORT:-9092}
org.apache.unomi.router.kafka.import.topic=${env:UNOMI_ROUTER_KAFKA_IMPORT_TOPIC:-import-deposit}
org.apache.unomi.router.kafka.export.topic=${env:UNOMI_ROUTER_KAFKA_EXPORT_TOPIC:-export-deposit}
org.apache.unomi.router.kafka.import.groupId=${env:UNOMI_ROUTER_KAFKA_IMPORT_GROUPID:-unomi-import-group}
org.apache.unomi.router.kafka.export.groupId=${env:UNOMI_ROUTER_KAFKA_EXPORT_GROUPID:-unomi-import-group}
org.apache.unomi.router.kafka.consumerCount=${env:UNOMI_ROUTER_KAFKA_CONSUMERCOUNT:-10}
org.apache.unomi.router.kafka.autoCommit=${env:UNOMI_ROUTER_KAFKA_AUTOCOMMIT:-true}

#Import One Shot upload directory
org.apache.unomi.router.import.oneshot.uploadDir=${env:UNOMI_ROUTER_IMPORT_ONESHOT_UPLOADDIR:-${karaf.data}/tmp/unomi_oneshot_import_configs/}

#Import/Export executions history size
org.apache.unomi.router.executionsHistory.size=${env:UNOMI_ROUTER_EXECUTIONSHISTORY_SIZE:-5}

#errors report size
org.apache.unomi.router.executions.error.report.size=${env:UNOMI_ROUTER_EXECUTIONS_ERROR_REPORT_SIZE:-200}

#Allowed source endpoints
org.apache.unomi.router.config.allowedEndpoints=${env:UNOMI_ROUTER_CONFIG_ALLOWEDENDPOINTS:-file,ftp,sftp,ftps}

#######################################################################################################################
## Salesforce connector settings                                                                                     ##
#######################################################################################################################
org.apache.unomi.sfdc.login.endpoint=${env:UNOMI_SFDC_LOGIN_ENDPOINT:-https://login.salesforce.com}
org.apache.unomi.sfdc.user.username=${env:UNOMI_SFDC_USER_USERNAME:-}
org.apache.unomi.sfdc.user.password=${env:UNOMI_SFDC_USER_PASSWORD:-}
org.apache.unomi.sfdc.user.securityToken=${env:UNOMI_SFDC_USER_SECURITYTOKEN:-}
org.apache.unomi.sfdc.consumer.key=${env:UNOMI_SFDC_CONSUMER_KEY:-}
org.apache.unomi.sfdc.consumer.secret=${env:UNOMI_SFDC_CONSUMER_SECRET:-}
org.apache.unomi.sfdc.channel=${env:UNOMI_SFDC_CHANNEL:-/topic/LeadUpdates}
# Property Mapping Example: unomiPropertyId<=>SFDCPropertyId
org.apache.unomi.sfdc.fields.mappings=${env:UNOMI_SFDC_FIELDS_MAPPINGS:-email<=>Email,firstName<=>FirstName,lastName<=>LastName,company<=>Company,phoneNumber<=>Phone,jobTitle<=>Title,city<=>City,zipCode<=>PostalCode,address<=>Street,sfdcStatus<=>Status,sfdcRating<=>Rating}
org.apache.unomi.sfdc.fields.mappings.identifier=${env:UNOMI_SFDC_FIELDS_MAPPINGS_IDENTIFIER:-email<=>Email}
org.apache.unomi.sfdc.checkIfContactExistBeforeLeadCreation=${env:UNOMI_SFDC_CHECKIFCONTACTSEXISTS:-false}
org.apache.unomi.sfdc.session.timeout=${env:UNOMI_SFDC_SESSION_TIMEOUT:-900000}
# Consent Mapping Example: unomiConsentId<=>SFDCPropertyId
org.apache.unomi.sfdc.fields.consents=${env:UNOMI_SFDC_FIELDS_CONSENTS:-}

#######################################################################################################################
## MailChimp connector settings                                                                                      ##
#######################################################################################################################
org.apache.unomi.mailchimp.apiKey=${env:UNOMI_MAILCHIMP_APIKEY:-yourApiKey}
org.apache.unomi.mailchimp.url.subDomain=${env:UNOMI_MAILCHIMP_URL_SUBDOMAIN:-us16}
# MC address type mapping format
# unomiId<=>mcTagName<=>mcSubTagName
# MC other type mapping format
# unomiId<=>mcTagName
# The following is a complete example of mapping if you wish to use it please make sure to create/replace MailChimp tag name
org.apache.unomi.mailchimp.list.merge-fields.mapping=${env:UNOMI_MAILCHIMP_LIST_MERGEFIELDS_MAPPING:-firstName<=>FNAME,lastName<=>LNAME,company<=>COMPANY,phoneNumber<=>PHONE,jobTitle<=>JOBTITLE,address<=>ADDRESS<=>addr1,city<=>ADDRESS<=>city,zipCode<=>ADDRESS<=>zip,countryName<=>ADDRESS<=>country,birthDate<=>BIRTHDATE,income<=>NUMBER}
# If you wish you can stop the mapping by setting the following property to false
org.apache.unomi.mailchimp.list.merge-fields.activate=${env:UNOMI_MAILCHIMP_LIST_MERGEFIELDS_ACTIVATE:-true}

#######################################################################################################################
## Weather update connector settings                                                                                 ##
#######################################################################################################################
org.apache.unomi.weatherUpdate.apiKey=${env:UNOMI_WEATHERUPDATE_APIKEY:-YOUR_WEATHER_APIKEY}
org.apache.unomi.weatherUpdate.url.base=${env:UNOMI_WEATHERUPDATE_URL_BASE:-http://api.openweathermap.org}
org.apache.unomi.weatherUpdate.url.attributes=${env:UNOMI_WEATHERUPDATE_URL_ATTRIBUTES:-data/2.5/weather}

#######################################################################################################################
## Settings for GraphQL                                                                                              ##
#######################################################################################################################
org.apache.unomi.graphql.feature.activated=${env:UNOMI_GRAPHQL_FEATURE_ACTIVATED:-false}

#######################################################################################################################
## Settings for migration                                                                                            ##
#######################################################################################################################
org.apache.unomi.migration.recoverFromHistory=${env:UNOMI_MIGRATION_RECOVER_FROM_HISTORY:-true}