# Licensed 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_port = @XMPP_SERVER_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@
