#!/bin/bash

set -e
set -x

php_cmd () {
  {{ parameter_dict['php-bin'] }} -c {{ parameter_dict['php-ini'] }} $@
}

status=$(php_cmd {{ parameter_dict['nextcloud'] }}/occ status | grep 'installed: true' || true)

if [ ! -z "$status" ]; then
  echo "Nextcloud is installed!"
  exit 1;
fi
if [ ! -f "{{ parameter_dict['nextcloud'] }}/config/CAN_INSTALL" ]; then
  echo "CAN_INSTALL no exists in config, cannot make a new install, Nextcloud is already installed."
  exit 1
fi

php_cmd {{ parameter_dict['nextcloud'] }}/occ maintenance:install \
  --database "mysql" --database-name "{{ parameter_dict['db-name'] }}" --database-user "{{ parameter_dict['db-user'] }}" \
  --database-pass "{{ parameter_dict['db-password'] }}" --admin-user "{{ parameter_dict['admin-user'] }}" \
  --database-host "{{ parameter_dict['db-host'] }}:{{ parameter_dict['db-port'] }}" \
  --admin-pass "{{ parameter_dict['admin-password'] }}" --data-dir "{{ parameter_dict['data-dir'] }}"

{% for trusted_domain in parameter_dict['trusted-domain-list'].split() -%}
{%   if trusted_domain.strip() -%}
       php_cmd {{ parameter_dict['nextcloud'] }}/occ config:system:set trusted_domains {{ loop.index - 1 }} --value={{ trusted_domain.strip() }}
{%   endif -%}
{% endfor -%}

php_cmd {{ parameter_dict['nextcloud'] }}/occ config:system:set overwrite.cli.url --value={{ parameter_dict['cli-url'] }}
php_cmd {{ parameter_dict['nextcloud'] }}/occ background:cron


sed -i 's/^[ ]*//' {{ parameter_dict['nextcloud'] }}/config/config.php
sed -i '/);/d' {{ parameter_dict['nextcloud'] }}/config/config.php

cat <<EOF >> {{ parameter_dict['nextcloud'] }}/config/config.php
'mysql.utf8mb4' => true,
'mail_smtpmode' => 'smtp',
'mail_smtpsecure' => 'tls',
'mail_sendmailmode' => 'smtp',
'mail_from_address' => '{{ parameter_dict["mail.from"] }}',
'mail_domain' => '{{ parameter_dict["mail.domain"] }}',
'mail_smtpauthtype' => '{{ parameter_dict["mail.smtpauthtype"] }}',
'mail_smtpauth' => {{ parameter_dict["mail.smtpauth"] }},
'mail_smtpport' => '{{ parameter_dict["mail.smtpport"] }}',
'mail_smtphost' => '{{ parameter_dict["mail.smtphost"] }}',
'mail_smtpname' => '{{ parameter_dict["mail.smtpname"] }}',
'mail_smtppassword' => '{{ parameter_dict["mail.smtppassword"] }}',
'activity_expire_days' => 14,
'auth.bruteforce.protection.enabled' => true,
'forwarded_for_headers' =>
array (
  0 => 'HTTP_X_FORWARDED',
),
{% set trusted_proxy_list = parameter_dict['trusted-proxy-list'].strip().split(' ') -%}
{% if len(trusted_proxy_list) > 0 -%}
'trusted_proxies' =>
array (
{%   for proxy in trusted_proxy_list -%}
{%     if proxy -%}
         {{ '  ' ~ (loop.index - 1) }} => '{{ proxy }}',
{%     endif -%}
{%   endfor -%}
),
{% endif -%}
'blacklisted_files' =>
array (
  0 => '.htaccess',
  1 => 'Thumbs.db',
  2 => 'thumbs.db',
),
'csrf.optout' =>
array (
  0 => '/^WebDAVFS/',
  1 => '/^Microsoft-WebDAV-MiniRedir/',
  2 => '/^\\.jio_documents/',
),
'cron_log' => true,
'enable_previews' => true,
'enabledPreviewProviders' =>
array (
  0 => 'OC\\Preview\\PNG',
  1 => 'OC\\Preview\\JPEG',
  2 => 'OC\\Preview\\GIF',
  3 => 'OC\\Preview\\BMP',
  4 => 'OC\\Preview\\XBitmap',
  5 => 'OC\\Preview\\Movie',
  6 => 'OC\\Preview\\PDF',
  7 => 'OC\\Preview\\MP3',
  8 => 'OC\\Preview\\TXT',
  9 => 'OC\\Preview\\MarkDown',
),
'filesystem_check_changes' => 0,
'filelocking.enabled' => 'true',
'htaccess.RewriteBase' => '/',
'integrity.check.disabled' => false,
'knowledgebaseenabled' => false,
'logfile' => '{{ parameter_dict["data-dir"] }}/nextcloud.log',
'loglevel' => 2,
'log_rotate_size' => 104857600,
'maintenance' => false,
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'overwriteprotocol' => 'https',
'preview_max_x' => 1024,
'preview_max_y' => 768,
'preview_max_scale_factor' => 1,
'redis' =>
array (
  'host' => '{{ parameter_dict["redis-socket"] }}',
  'port' => 0,
  'timeout' => 0.0,
),
'quota_include_external_storage' => false,
'share_folder' => '/Shares',
'skeletondirectory' => '',
'theme' => '',
'trashbin_retention_obligation' => 'auto, 7',
'updater.release.channel' => 'stable',
);
EOF

# Install some nextcloud apps
{%for app_name, app_location in nextcloud_apps.items() %}
  cp -a {{ app_location }} {{ parameter_dict['nextcloud'] }}/apps/{{ app_name }}
  php_cmd {{ parameter_dict['nextcloud'] }}/occ app:enable {{ app_name }}
{%endfor%}

php_cmd {{ parameter_dict['nextcloud'] }}/occ config:app:set richdocuments wopi_url --value="{{ parameter_dict.get('collabora-url', '') }}"
php_cmd {{ parameter_dict['nextcloud'] }}/occ config:app:set spreed stun_servers --value="[\"{{ parameter_dict['stun-server'] }}\"]"
php_cmd {{ parameter_dict['nextcloud'] }}/occ config:app:set spreed turn_servers --value="[{\"server\":\"{{ parameter_dict['turn-server'] }}\",\"secret\":\"{{ parameter_dict['turn-secret'] }}\",\"protocols\":\"udp,tcp\"}]"
php_cmd {{ parameter_dict['nextcloud'] }}/occ config:app:set news useCronUpdates --value=false

if [ -f "{{ parameter_dict['nextcloud'] }}/config/CAN_INSTALL" ]; then
  rm {{ parameter_dict['nextcloud'] }}/config/CAN_INSTALL
fi

date > {{ parameter_dict['nextcloud'] }}/.slapos-install-done