<!--
 * 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.
 -->
<project name="server config" basedir="." default="prosody-config">
  <description>Creates the server configuration file.</description>

  <property name="wave_server_domain" value="local.net" />
  <property name="xmpp_server_secret" value="opensesame" />
  <property name="certificate_private_key" value="${wave_server_domain}.key" />
  <property name="certificate_files" value="${wave_server_domain}.crt,sub.class1.server.ca.pem,ca.pem" />
  <property name="certificate_domain" value="${wave_server_domain}" />
  <property name="xmpp_component_name" value="wave" />
  <property name="xmpp_jid" value="${xmpp_component_name}.${wave_server_domain}" />
  <property name="xmpp_server_description" value="&quot;Wave in a Box&quot;" />
  <property name="xmpp_server_hostname" value="${wave_server_domain}" />
  <property name="xmpp_server_component_port" value="5275" />
  <property name="xmpp_server_to_server_port" value="5269" />
  <property name="xmpp_server_ping" value="wavesandbox.com" />
  <property name="xmpp_server_ip" value="${xmpp_server_hostname}" />
  <property name="waveserver_disable_verification" value="false" />
  <property name="waveserver_disable_signer_verification" value="false" />


  <target name="prosody-config"
      description="Run to create the prosody configuration files.
      ant -f server-config.xml prosody-config">
      <echo>Generating ${certificate_domain}.cfg.lua</echo>
    <copy file="${certificate_domain}.cfg.lua"
               tofile="${certificate_domain}.cfg.lua.old"
               overwrite="true"
               failonerror="false" />
    <copy file="prosody.cfg.lua.example" tofile="${certificate_domain}.cfg.lua" overwrite="true">
      <filterchain>
        <replacetokens>
          <token key="BASEDIR" value="${basedir}" />
          <token key="XMPP_SERVER_SECRET" value="${xmpp_server_secret}" />
          <token key="CERTIFICATE_PRIVATE_KEY" value="${certificate_private_key}" />
          <token key="CERTIFICATE_DOMAIN" value="${certificate_domain}" />
          <token key="XMPP_JID" value="${xmpp_jid}" />
          <token key="XMPP_SERVER_DESCRIPTION" value="${xmpp_server_description}" />
          <token key="XMPP_SERVER_COMPONENT_PORT" value="${xmpp_server_component_port}" />
          <token key="XMPP_SERVER_TO_SERVER_PORT" value="${xmpp_server_to_server_port}" />
        </replacetokens>
      </filterchain>
    </copy>
    <echo>Please, manually copy ${certificate_domain}.cfg.lua to your prosody configuration directory.</echo>
    <echo>E.g. sudo cp ${certificate_domain}.cfg.lua /etc/prosody/conf.d/${certificate_domain}.cfg.lua</echo>
    <echo>Additionally, ensure your ${certificate_domain} SRV record points to port ${xmpp_server_to_server_port}</echo>
  </target>
</project>
