#! /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 . set -e cd /data WRITEFREELY=/writefreely/writefreely attempts=0 max_attempts=5 validate_url() { URL="$1" if echo "$URL" | grep -Eq "^https?://[a-zA-Z0-9._-]+"; then return 0 # Success else return 1 # Failure fi } # Validate WRITEFREELY_HOST if ! validate_url "$WRITEFREELY_HOST"; then echo "Error: $WRITEFREELY_HOST is not a valid URL. It must start with http:// or https:// and be followed by a valid hostname." exit 1 fi if [ -e ./config.ini ] && [ -e ./keys/email.aes256 ]; then ${WRITEFREELY} -migrate exec ${WRITEFREELY} fi if [ -e ./config.ini ]; then until ${WRITEFREELY} --init-db; do attempts=$((attempts+1)) if [ $attempts -ge $max_attempts ]; then echo "Failed to initialize database after $attempts attempts." exit 1 fi echo "Retrying --init-db ($attempts/$max_attempts)..." sleep 5 done echo "Generating keys..." ${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 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 <