#!/bin/bash # # This script allows you to serve different TiddlyWiki editions. # # It respects a TW_SERVE_EDITION_PATH environment variable. # If this variable is set it will be used. A command line parameter will overwrite it. # # Ensure your server tiddlywiki.info configuration contains # these plugins, otherwise saving is not possible: # - "tiddlywiki/tiddlyweb" # - "tiddlywiki/filesystem" # Global settings # set -o nounset #exit if a variable is not set set -o errexit #exit on error # Get command name and path info needed for help text ARG0=$(basename $0) #ARG0DIR=$(dirname $0) #[ $ARG0DIR == "." ] && ARG0DIR=$PWD # ---- helper functions ---- version () { echo "$ARG0, TiddlyWiki serve script version 0.0.2" echo } usage() { version echo Usage:$'\t'$ARG0 [edition dir] [username] [password] [host] [port] echo } help() { usage echo Optional parameters echo echo $'\t'\$1 .. edition directory .. full or relative path to edition directory echo $'\t'\$2 .. username for signing edits - can be empty like this: \"\" echo $'\t'\$3 .. password - can be empty like this: \"\" echo $'\t'\$4 .. IP address or HOST name .. defaults to: localhost echo $'\t'\$5 .. PORT .. defaults to: 8080 echo echo $'\t'-v .. Version echo $'\t'-h .. Help echo echo Example 1 ./serve ./editions/tw5.com-server username echo Example 2 ./serve ./editions/tw5.com-server \"\" \"\" localhost 9090 echo .. Example 2 defines: empty username, empty password echo } _log () { echo echo "---> $1" } # error handling for wrong parameters error() { echo "$ARG0: $*" 1>&2 exit 1 } # start the server serve () { #echo 1:$1 2:$2 3:$3 4:$4 5:$5 node ./tiddlywiki.js \ "$1" \ --verbose \ --server "$5" $:/core/save/all text/plain text/html "$2" "$3" "$4" \ || exit 1 } check_edition_directory () { # The editions directory must exist and should contain a tiddlywiki.info file if [ ! -d $TW_SERVE_EDITION_PATH ]; then _log "Edition directory: '$TW_SERVE_EDITION_PATH' does not exist" exit 1 fi } # -------------------------------------------------- # command line parameter handler while getopts vh flag do case "$flag" in (h) help; exit 0;; (v) version; exit 0;; (*) help error exit 1;; esac done shift $(expr $OPTIND - 1) #---------------------------------------------------- # If no edition parameter is provided, use Jeremy's defaults if [ $# -eq 0 ]; then # check if the edition path environment variable is set. If yes use it. [ -z $TW_SERVE_EDITION_PATH ] && TW_SERVE_EDITION_PATH="./editions/tw5.com-server" # directory must exist check_edition_directory # serve the default settings. serve "$TW_SERVE_EDITION_PATH" "" "" localhost 8080 else if [ -z "$5" ]; then PORT=8080 else PORT=$5 fi # If the 1st parameter (edition) is set, it has priority. TW_SERVE_EDITION_PATH=$1 # directory must exist check_edition_directory serve "$TW_SERVE_EDITION_PATH" "$2" "$3" "$4" $PORT fi