#! /bin/sh
## Writefreely wrapper for Docker
## Copyright (C) 2019 Gergely Nagy
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program.  If not, see <http://www.gnu.org/licenses/>.

set -e

cd /data

WRITEFREELY=/writefreely/writefreely

if [ -e ./config.ini ] && [ -e ./keys/email.aes256 ]; then
    ${WRITEFREELY} -migrate
    exec ${WRITEFREELY}
fi

if [ -e ./config.ini ]; then
    ${WRITEFREELY} -init-db
    ${WRITEFREELY} -gen-keys
    exec ${WRITEFREELY}
fi

WRITEFREELY_BIND_PORT="${WRITEFREELY_BIND_PORT:-8080}"
WRITEFREELY_BIND_HOST="${WRITEFREELY_BIND_HOST:-0.0.0.0}"
WRITEFREELY_SITE_NAME="${WRITEFREELY_SITE_NAME:-A Writefreely blog}"
WRITEFREELY_SITE_DESCRIPTION="${WRITEFREELY_SITE_DESCRIPTION:-My Writefreely blog}"

cat >./config.ini <<EOF
[server]
hidden_host           =
port                  = ${WRITEFREELY_BIND_PORT}
bind                  = ${WRITEFREELY_BIND_HOST}
tls_cert_path         =
tls_key_path          =
autocert              =
templates_parent_dir  = /writefreely
static_parent_dir     = /writefreely
pages_parent_dir      = /writefreely
keys_parent_dir       =
hash_seed             =
gopher_port           = 0

[database]
type                  = ${WRITEFREELY_DATABASE_DATABASE}
filename              = ${WRITEFREELY_SQLITE_FILENAME}
username              = ${WRITEFREELY_DATABASE_USERNAME}
password              = ${WRITEFREELY_DATABASE_PASSWORD}
database              = ${WRITEFREELY_DATABASE_NAME}
host                  = ${WRITEFREELY_DATABASE_HOST}
port                  = ${WRITEFREELY_DATABASE_PORT}
tls                   = false

[app]
site_name             = ${WRITEFREELY_SITE_NAME}
site_description      = ${WRITEFREELY_SITE_DESCRIPTION}
host                  = ${WRITEFREELY_HOST:-http://${WRITEFREELY_BIND_HOST}:${WRITEFREELY_BIND_PORT}}
theme                 = write
editor                =
disable_js            = false
webfonts              = true
landing               =
simple_nav            = false
wf_modesty            = false
chorus                = false
forest                = false
disable_drafts        = false
single_user           = ${WRITEFREELY_SINGLE_USER:-false}
open_registration     = ${WRITEFREELY_OPEN_REGISTRATION:-false}
min_username_len      = ${WRITEFREELY_MIN_USERNAME_LEN:-3}
max_blogs             = ${WRITEFREELY_MAX_BLOG:-4}
federation            = ${WRITEFREELY_FEDERATION:-true}
public_stats          = ${WRITEFREELY_PUBLIC_STATS:-false}
monetization          = false
notes_only            = false
private               = ${WRITEFREELY_PRIVATE:-false}
local_timeline        = ${WRITEFREELY_LOCAL_TIMELINE:-false}
user_invites          = ${WRITEFREELY_USER_INVITES}
update_checks         = false
disable_password_auth = false

[email]
domain          =
mailgun_private =

[oauth.slack]
client_id          =
client_secret      =
team_id            =
callback_proxy     =
callback_proxy_api =

[oauth.writeas]
client_id          =
client_secret      =
auth_location      =
token_location     =
inspect_location   =
callback_proxy     =
callback_proxy_api =

[oauth.gitlab]
client_id          =
client_secret      =
host               =
display_name       =
callback_proxy     =
callback_proxy_api =

[oauth.gitea]
client_id          =
client_secret      =
host               =
display_name       =
callback_proxy     =
callback_proxy_api =

[oauth.generic]
client_id          =
client_secret      =
host               =
display_name       =
callback_proxy     =
callback_proxy_api =
token_endpoint     =
inspect_endpoint   =
auth_endpoint      =
scope              =
allow_disconnect   = false
map_user_id        =
map_username       =
map_display_name   =
map_email          =
EOF

chmod 600 ./config.ini

${WRITEFREELY} --init-db
${WRITEFREELY} --gen-keys

if [ -n "$WRITEFREELY_ADMIN_USER" ]; then
  ${WRITEFREELY} user create --admin ${WRITEFREELY_ADMIN_USER}:${WRITEFREELY_ADMIN_PASSWORD}
  echo Created user ${WRITEFREELY_ADMIN_USER}
else
  echo Admin user not defined
  exit 1
fi
if [ -n "$WRITEFREELY_WRITER_USER" ]; then
  ${WRITEFREELY} user create ${WRITEFREELY_WRITER_USER}:${WRITEFREELY_WRITER_PASSWORD}
  echo Created user ${WRITEFREELY_WRITER_USER}
fi

exec ${WRITEFREELY}