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

# web properties #
nifi.registry.web.war.directory=${nifi.registry.web.war.directory}
nifi.registry.web.http.host=${nifi.registry.web.http.host}
nifi.registry.web.http.port=${nifi.registry.web.http.port}
nifi.registry.web.https.host=${nifi.registry.web.https.host}
nifi.registry.web.https.port=${nifi.registry.web.https.port}
nifi.registry.web.jetty.working.directory=${nifi.registry.jetty.work.dir}
nifi.registry.web.jetty.threads=${nifi.registry.web.jetty.threads}

# security properties #
nifi.registry.security.keystore=${nifi.registry.security.keystore}
nifi.registry.security.keystoreType=${nifi.registry.security.keystoreType}
nifi.registry.security.keystorePasswd=${nifi.registry.security.keystorePasswd}
nifi.registry.security.keyPasswd=${nifi.registry.security.keyPasswd}
nifi.registry.security.truststore=${nifi.registry.security.truststore}
nifi.registry.security.truststoreType=${nifi.registry.security.truststoreType}
nifi.registry.security.truststorePasswd=${nifi.registry.security.truststorePasswd}
nifi.registry.security.needClientAuth=${nifi.registry.security.needClientAuth}
nifi.registry.security.authorizers.configuration.file=${nifi.registry.security.authorizers.configuration.file}
nifi.registry.security.authorizer=${nifi.registry.security.authorizer}
nifi.registry.security.identity.providers.configuration.file=${nifi.registry.security.identity.providers.configuration.file}
nifi.registry.security.identity.provider=${nifi.registry.security.identity.provider}

# sensitive property protection properties #
# nifi.registry.sensitive.props.additional.keys=

# providers properties #
nifi.registry.providers.configuration.file=${nifi.registry.providers.configuration.file}

# registry alias properties #
nifi.registry.registry.alias.configuration.file=${nifi.registry.registry.alias.configuration.file}

# extensions working dir #
nifi.registry.extensions.working.directory=${nifi.registry.extensions.working.directory}

# legacy database properties, used to migrate data from original DB to new DB below
# NOTE: Users upgrading from 0.1.0 should leave these populated, but new installs after 0.1.0 should leave these empty
nifi.registry.db.directory=${nifi.registry.db.directory}
nifi.registry.db.url.append=${nifi.registry.db.url.append}

# database properties
nifi.registry.db.url=${nifi.registry.db.url}
nifi.registry.db.driver.class=${nifi.registry.db.driver.class}
nifi.registry.db.driver.directory=${nifi.registry.db.driver.directory}
nifi.registry.db.username=${nifi.registry.db.username}
nifi.registry.db.password=${nifi.registry.db.password}
nifi.registry.db.maxConnections=${nifi.registry.db.maxConnections}
nifi.registry.db.sql.debug=${nifi.registry.db.sql.debug}

# extension directories #
# Each property beginning with "nifi.registry.extension.dir." will be treated as location for an extension,
# and a class loader will be created for each location, with the system class loader as the parent
#
#nifi.registry.extension.dir.1=/path/to/extension1
#nifi.registry.extension.dir.2=/path/to/extension2

# Identity Mapping Properties #
# These properties allow normalizing user identities such that identities coming from different identity providers
# (certificates, LDAP, Kerberos) can be treated the same internally in NiFi. The following example demonstrates normalizing
# DNs from certificates and principals from Kerberos into a common identity string:
#
# nifi.registry.security.identity.mapping.pattern.dn=^CN=(.*?), OU=(.*?), O=(.*?), L=(.*?), ST=(.*?), C=(.*?)$
# nifi.registry.security.identity.mapping.value.dn=$1@$2
# nifi.registry.security.identity.mapping.transform.dn=NONE

# nifi.registry.security.identity.mapping.pattern.kerb=^(.*?)/instance@(.*?)$
# nifi.registry.security.identity.mapping.value.kerb=$1@$2
# nifi.registry.security.identity.mapping.transform.kerb=UPPER

# Group Mapping Properties #
# These properties allow normalizing group names coming from external sources like LDAP. The following example
# lowercases any group name.
#
# nifi.registry.security.group.mapping.pattern.anygroup=^(.*)$
# nifi.registry.security.group.mapping.value.anygroup=$1
# nifi.registry.security.group.mapping.transform.anygroup=LOWER


# kerberos properties #
nifi.registry.kerberos.krb5.file=${nifi.registry.kerberos.krb5.file}
nifi.registry.kerberos.spnego.principal=${nifi.registry.kerberos.spnego.principal}
nifi.registry.kerberos.spnego.keytab.location=${nifi.registry.kerberos.spnego.keytab.location}
nifi.registry.kerberos.spnego.authentication.expiration=${nifi.registry.kerberos.spnego.authentication.expiration}
