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

# Federation Configuration for the Wave in a Box server
#
# Run "ant -f server-config.xml server-federation-config -Dserver_federation_config=server.federation.config"
# to generate the server.federation.config and server.config files automatically.
# To override default values pass them to the ant script. For example
# to override xmpp_server_secret pass to the ant: -Dxmpp_server_secret=yoursecret

# These will probably need to be changed
xmpp_server_secret = @XMPP_SERVER_SECRET@
# Default value: ${wave_server_domain}.key
certificate_private_key = @CERTIFICATE_PRIVATE_KEY@

# The order of certificates is important. Place intermediate certs
# after "${wave_server_domain}.crt". Please refer to 
# http://www.waveprotocol.org/federation/certificates
# for more details.
# Default value: ${wave_server_domain}.crt,sub.class1.server.ca.pem,ca.pem
certificate_files = @CERTIFICATE_FILES@

# These should be okay to leave alone
enable_federation = true

# Default value: ${wave_server_domain}
certificate_domain = @CERTIFICATE_DOMAIN@

# Default value: wave
xmpp_component_name = @XMPP_COMPONENT_NAME@

# Default value: ${xmpp_component_name}.${wave_server_domain}
xmpp_jid = @XMPP_JID@

# Default value: "Wave in a Box"
xmpp_server_description = @XMPP_SERVER_DESCRIPTION@

# Default value: ${wave_server_domain}
xmpp_server_hostname = @XMPP_SERVER_HOSTNAME@

# Default value: 5275
xmpp_server_component_port = @XMPP_SERVER_COMPONENT_PORT@

# Default value: wavesandbox.com
xmpp_server_ping = @XMPP_SERVER_PING@

# Set XMPP_SERVER_IP to localhost if the XMPP and Wave in a Box servers are
# running on the same host
# Default value: ${xmpp_server_hostname}
xmpp_server_ip = @XMPP_SERVER_IP@

# Set true to disable the verification of signed deltas
# Default value: false
waveserver_disable_verification = @WAVESERVER_DISABLE_VERIFICATION@

# Set true to disable the verification of signers (certificates)
# Default value: false
waveserver_disable_signer_verification = @WAVESERVER_DISABLE_SIGNER_VERIFICATION@
