#!/bin/sh ############################## # configuration prefix_file="${API_PREFIX_FILE:-/app/data/api_prefix}" db_file="${RAILS_DB_PATH:-/app/data/rynDNS.sqlite3}" default_admin_file="${API_DEFAULT_KEY_FILE:-/app/data/api_default_admin}" rails_bin="${RAILS_BINARY:-/app/bin/rails}" demo_cycle="${RAILS_DEMO_RESET:-60m}" demo_prefix="zW3If4s5" seed_default_key_text="Created default admin with api_key" # for grep'ing the default admin key # end configuration ############################## function log() { local time=$(date +%F_%T) local prefix="LOG" case $1 in ERR | ERROR) prefix="ERR" shift ;; WAR | WARNING) prefix="WAR" shift ;; INF | INFO) prefix="INF" shift ;; esac local func=$1; shift # remove any \n #local text=$(echo "$@"| tr '\n' '#' | sed 's|#|\\n |g') case "$logfile" in "") echo "[$time]:[$prefix]:[$0][$func]: $@" 2>&1 ;; *) echo "[$time]:[$prefix]:[$0][$func]: $@" >> $logfile ;; esac } function random_sting() { echo -n "$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w "${1:-32}" | head -n 1)" } function get_prefix_file() { if [ -f "$prefix_file" ]; then echo -n "$(head -1 $prefix_file)" else new_prefix=$(random_sting 8) log get_prefix_file no prefix file, generating new one echo -n "$new_prefix" > "$prefix_file" echo -n "$new_prefix" fi } function set_api_prefix() { if [ -z "$RAILS_API_KEY_PREFIX" ]; then log set_api_prefix setting prefix from file RAILS_API_KEY_PREFIX=$(get_prefix_file | tail -1) export RAILS_API_KEY_PREFIX else log set_api_prefix saving prefix from ENV to file echo -n "$RAILS_API_KEY_PREFIX" > "$prefix_file" fi } function demo_cleaner() { while true; do log demo_cleaner cleaning up; db_setup # starting sleep in subshell to be able to quickly terminate sleep $demo_cycle & wait done } function demo() { if [ ! -z "$RAILS_API_DEMO" ]; then log demo "setting prefix to $demo_prefix" RAILS_API_KEY_PREFIX="$demo_prefix" export RAILS_API_KEY_PREFIX log demo "setting up demo cleaner, resetting every $demo_cycle" demo_cleaner & fi } function db_setup() { if [ ! -f $db_file ]; then log db_setup running first time migrations echo "$($rails_bin db:migrate)" fi log db_setup seeding database seed_log="$($rails_bin db:seed)" echo "$seed_log" # save default login to file default_admin=$(echo "$seed_log" | grep "$seed_default_key_text") [ "${#default_admin}" -gt 8 ] && echo -n "$default_admin" > $default_admin_file log db_setup "see \`docker exec \$CONTAINER cat $default_admin_file\` for initial admin api_key" } function main() { set_api_prefix log main prefix: $RAILS_API_KEY_PREFIX db_setup [ "$(id -u)" -eq 0 ] && log WARN main running server as root demo log main starting server exec $rails_bin s } main "$@"