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

  <!-- Properties for server.config -->
  <property name="wave_server_domain" value="local.net" />
  <property name="http_frontend_public_address" value="localhost:9898" />
  <property name="http_websocket_public_address" value="${http_frontend_public_address}" />
  <property name="http_websocket_presented_address" value="${http_frontend_public_address}" />
  <property name="http_frontend_addresses" value="${http_frontend_public_address}" />
  <property name="resource_bases" value="./war" />
  <property name="signer_info_store_type" value="file" />
  <property name="attachment_store_type" value="disk" />
  <property name="account_store_type" value="file" />
  <property name="delta_store_type" value="file" />
  <property name="signer_info_store_directory" value="_certificates" />
  <property name="attachment_store_directory" value="_attachments" />
  <property name="account_store_directory" value="_accounts" />
  <property name="delta_store_directory" value="_deltas" />
  <property name="sessions_store_directory" value="_sessions" />
  <property name="websocket_max_message_size" value="2" />
  <property name="websocket_max_idle_time" value="0" />
  <property name="admin_user" value="@${wave_server_domain}" />
  <property name="welcome_wave_id" value="" />
  <property name="listener_executor_thread_count" value="1" />
  <property name="wavelet_load_executor_thread_count" value="1" />
  <property name="delta_persist_executor_thread_count" value="1" />
  <property name="storage_continuation_executor_thread_count" value="1" />
  <property name="lookup_executor_thread_count" value="1" />
  <property name="disable_registration" value="false" />
  <property name="enable_ssl" value="false" />
  <property name="ssl_keystore_path" value="wiab.ks" />
  <property name="ssl_keystore_password" value="changeme" />
  <property name="enable_clientauth" value="false" />
  <property name="clientauth_cert_domain" value="" />
  <property name="disable_loginpage" value="false" />
  <property name="search_type" value="lucene" />
  <property name="index_directory" value="_indexes" />
  <property name="thumbnail_patterns_directory" value="thumbnail_patterns" />
  <property name="analytics_account" value="" />

  <!-- Properties for server.federation.config -->
  <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="create-folders">
    <mkdir dir="${signer_info_store_directory}" />
    <mkdir dir="${attachment_store_directory}" />
    <mkdir dir="${account_store_directory}" />
    <mkdir dir="${delta_store_directory}" />
    <mkdir dir="${sessions_store_directory}" />
  </target>

  <target name="server-config" depends="create-folders"
      description="Run to create the server configuration file.
	  You can pass custom values, for example:
      ant -f server-config.xml -Dwave_server_domain=example.com">
    <echo>Generating server.config</echo>
    <copy file="server.config"
          tofile="server.config.old"
          overwrite="true"
          failonerror="false" />
    <copy file="server.config.example" tofile="server.config" overwrite="true">
      <filterchain>
        <replacetokens>
          <token key="WAVE_SERVER_DOMAIN" value="${wave_server_domain}" />
          <token key="HTTP_FRONTEND_PUBLIC_ADDRESS"
                 value="${http_frontend_public_address}" />
          <token key="HTTP_WEBSOCKET_PUBLIC_ADDRESS"
                 value="${http_websocket_public_address}" />
          <token key="HTTP_WEBSOCKET_PRESENTED_ADDRESS"
                 value="${http_websocket_presented_address}" />
          <token key="HTTP_FRONTEND_ADDRESSES"
                 value="${http_frontend_addresses}" />
          <token key="RESOURCE_BASES" value="${resource_bases}" />
          <token key="SIGNER_INFO_STORE_TYPE" value="${signer_info_store_type}" />
          <token key="ATTACHMENT_STORE_TYPE" value="${attachment_store_type}" />
          <token key="ACCOUNT_STORE_TYPE" value="${account_store_type}" />
          <token key="DELTA_STORE_TYPE" value="${delta_store_type}" />
          <token key="SIGNER_INFO_STORE_DIRECTORY"
                 value="${signer_info_store_directory}" />
          <token key="ATTACHMENT_STORE_DIRECTORY"
                 value="${attachment_store_directory}" />
          <token key="ACCOUNT_STORE_DIRECTORY"
                 value="${account_store_directory}" />
          <token key="DELTA_STORE_DIRECTORY" value="${delta_store_directory}" />
          <token key="SESSIONS_STORE_DIRECTORY" value="${sessions_store_directory}" />
          <token key="WEBSOCKET_MAX_MESSAGE_SIZE" value="${websocket_max_message_size}" />
          <token key="WEBSOCKET_MAX_IDLE_TIME" value="${websocket_max_idle_time}" />
          <token key="ADMIN_USER" value="${admin_user}" />
          <token key="WELCOME_WAVE_ID" value="${welcome_wave_id}" />
          <token key="LISTENER_EXECUTOR_THREAD_COUNT" value="${listener_executor_thread_count}" />
          <token key="WAVELET_LOAD_EXECUTOR_THREAD_COUNT" value="${wavelet_load_executor_thread_count}" />
          <token key="DELTA_PERSIST_EXECUTOR_THREAD_COUNT" value="${delta_persist_executor_thread_count}" />
          <token key="STORAGE_CONTINUATION_EXECUTOR_THREAD_COUNT" value="${storage_continuation_executor_thread_count}" />
          <token key="LOOKUP_EXECUTOR_THREAD_COUNT" value="${lookup_executor_thread_count}" />
          <token key="DISABLE_REGISTRATION" value="${disable_registration}" />
          <token key="ENABLE_SSL" value="${enable_ssl}" />
          <token key="SSL_KEYSTORE_PATH" value="${ssl_keystore_path}" />
          <token key="SSL_KEYSTORE_PASSWORD" value="${ssl_keystore_password}" />
          <token key="ENABLE_CLIENTAUTH" value="${enable_clientauth}" />
          <token key="CLIENTAUTH_CERT_DOMAIN" value="${clientauth_cert_domain}" />
          <token key="DISABLE_LOGINPAGE" value="${disable_loginpage}" />
          <token key="SEARCH_TYPE" value="${search_type}" />
          <token key="INDEX_DIRECTORY" value="${index_directory}" />
          <token key="ANALYTICS_ACCOUNT" value="${analytics_account}" />
          <token key="THUMBNAIL_PATTERNS_DIRECTORY" value="${thumbnail_patterns_directory}" />
        </replacetokens>
      </filterchain>
    </copy>
  </target>

  <target name="server-federation-config" depends="server-config"
      description="Run to create both the server and federation configuration files.
      ant -f server-config.xml server-federation-config -Dserver_federation_config=server.federation.config">
    <echo>Generating federation.server.config</echo>
    <copy file="server.federation.config"
               tofile="server.federation.config.old"
               overwrite="true"
               failonerror="false" />
    <copy file="server.federation.config.example" tofile="server.federation.config" overwrite="true">
      <filterchain>
        <replacetokens>
          <token key="XMPP_SERVER_SECRET" value="${xmpp_server_secret}" />
          <token key="CERTIFICATE_PRIVATE_KEY" value="${certificate_private_key}" />
          <token key="CERTIFICATE_FILES" value="${certificate_files}" />
          <token key="CERTIFICATE_DOMAIN" value="${certificate_domain}" />
          <token key="XMPP_COMPONENT_NAME" value="${xmpp_component_name}" />
          <token key="XMPP_JID" value="${xmpp_jid}" />
          <token key="XMPP_SERVER_DESCRIPTION" value="${xmpp_server_description}" />
          <token key="XMPP_SERVER_HOSTNAME" value="${xmpp_server_hostname}" />
          <token key="XMPP_SERVER_COMPONENT_PORT" value="${xmpp_server_component_port}" />
          <token key="XMPP_SERVER_PING" value="${xmpp_server_ping}" />
          <token key="XMPP_SERVER_IP" value="${xmpp_server_ip}" />
          <token key="WAVESERVER_DISABLE_VERIFICATION" value="${waveserver_disable_verification}" />
          <token key="WAVESERVER_DISABLE_SIGNER_VERIFICATION"
            value="${waveserver_disable_signer_verification}" />
        </replacetokens>
      </filterchain>
    </copy>
  </target>

  <target name="prosody-config" depends="server-federation-config"
      description="Run to create the server, federation and prosody configuration files.
      ant -f server-config.xml server-federation-config prosody-config -Dserver_federation_config=server.federation.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>
