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

# NAR and Working Directories #
nifi.stateless.nar.directory=./lib
nifi.stateless.working.directory=./work/stateless

# Content Repository #
# If not specified, content is stored in Java's heap. Content is lost upon restart, regardless.
nifi.stateless.content.repository.directory=

# Security Properties #
nifi.stateless.security.keystore=
nifi.stateless.security.keystoreType=
nifi.stateless.security.keystorePasswd=
nifi.stateless.security.keyPasswd=
nifi.stateless.security.truststore=
nifi.stateless.security.truststoreType=
nifi.stateless.security.truststorePasswd=
nifi.stateless.sensitive.props.key=

# Extension Client Configuration #
# Zero or more Nexus repositories may be specified here.
# The following client communicates with Maven Central. To use it, uncomment the following 4 lines.
# Additional clients can be added by adding duplicate properties but changing mvn-central to a different key.
nifi.stateless.extension.client.mvn-central.type=nexus
nifi.stateless.extension.client.mvn-central.timeout=30 sec
nifi.stateless.extension.client.mvn-central.baseUrl=https://repo1.maven.org/maven2/
nifi.stateless.extension.client.mvn-central.useSslContext=false

# Kerberos Properties #
nifi.stateless.kerberos.krb5.file=/etc/krb5.conf
