#! /bin/sh
set -e

usage()
{
    echo "Usage: $0 [OPTIONS] SITE_NAME" >&2
    echo >&2
    echo "Options:" >&2
    echo "--no-admin    do not create an admin user and do not ask for a password" >&2
    exit $1
}

args="$(getopt -o h --long help,no-admin -n $0 -- "$@")"
eval set -- "$args"

while [ $1 != '--' ]
do
    case $1
    in
        -h|--help) usage 0;;
        --no-admin) noadmin=1; shift;;
        *) usage 1;;
    esac
done
shift

if [ $# -ne 1 ]
then
    usage 1
fi

site_name="$1"
site_dir="/var/lib/dokuwiki/farm/$site_name"
conf_dir="/etc/dokuwiki/farm/$site_name"
now=$(date --rfc-2822)

echo "Creating site $site_name"


#######################
# Directory structure #
#######################

echo "Creating directory structure..."
install -d -o www-data -g root -m 0700 "$site_dir/acl"
install -d -o www-data -g root -m 0700 "$site_dir/data"
install -d -o www-data -g root -m 0700 "$site_dir/data/attic"
install -d -o www-data -g root -m 0700 "$site_dir/data/cache"
install -d -o www-data -g root -m 0700 "$site_dir/data/index"
install -d -o www-data -g root -m 0700 "$site_dir/data/locks"
install -d -o www-data -g root -m 0700 "$site_dir/data/log"
install -d -o www-data -g root -m 0700 "$site_dir/data/media"
install -d -o www-data -g root -m 0700 "$site_dir/data/meta"
install -d -o www-data -g root -m 0700 "$site_dir/data/pages"
install -d -o www-data -g root -m 0700 "$site_dir/data/tmp"
install -d -o www-data -g root -m 0700 "$site_dir/data/media_attic"
install -d -o www-data -g root -m 0700 "$site_dir/data/media_meta"
install -d -o root -g www-data -m 0775 "$conf_dir"


######################
# Main configuration #
######################

echo "Creating basic configuration..."

dokuwikiconf="$conf_dir/local.php"
install -o root -g www-data -m 0664 /dev/null "$dokuwikiconf"

cat >> "$dokuwikiconf" <<EOF
<?php
/**
 * Dokuwiki's Main Configuration File - Local Settings
 * Auto-generated by Debian dokuwiki-addsite script
 * Date: $now
 */

\$conf['title'] = '$site_name';
\$conf['license'] = 'cc-by-sa';
#\$conf['lang'] = 'en';
\$conf['useacl'] = 1;
\$conf['superuser'] = '@admin';
EOF


#######################
# Fixed configuration #
#######################

echo "Setting fixed configuration..."

install -o root -g www-data -m 0644 /dev/null "$conf_dir/local.protected.php"
cat >> "$conf_dir/local.protected.php" <<EOF
<?php
/**
 * Dokuwiki's Fixed Configuration File - Local Settings
 * Auto-generated by Debian dokuwiki-addsite script
 * Date: $now
 */

\$conf['savedir'] = '$site_dir/data';
EOF


#########################
# Access control system #
#########################

echo "Setting basic permissions..."

aclauth="$site_dir/acl/acl.auth.php"
install -o www-data -g root -m 0640 /dev/null "$aclauth"

cat >> "$aclauth" <<-EOF
# acl.auth.php
# <?php exit()?>
# Don't modify the lines above
#
# Access Control Lists
#
# Auto-generated by Debian dokuwiki-addsite script
# Date: $now

*               @ALL          1
*               @user         8
EOF

ln -s "$site_dir/acl/acl.auth.php"   "$conf_dir/"


#########################
# Administrator account #
#########################

usersauth="$site_dir/acl/users.auth.php"
install -o www-data -g root -m 0640 /dev/null "$usersauth"

if [ "$noadmin" != 1 ]
then
    echo "Adding admin user..."

    superuser="admin"
    fullname="DokuWiki Administrator"
    email="webmaster@localhost"
    password="password"
    confirm="confirm"
    stty -echo
    while [ "$password" != "$confirm" ]
    do
        printf "Choose an administrator password: "
        read -r password
        echo
        printf "Retype the administrator password: "
        read -r confirm
        echo
        if [ "$password" != "$confirm" ]
        then
            echo "Sorry, password do not match" >&2
        fi
    done
    stty echo
    password=$(echo -n "$password" | md5sum -b | cut -d' ' -f1)
    echo "$superuser:$password:$fullname:$email:admin,user" >> $usersauth
fi

ln -s "$site_dir/acl/users.auth.php" "$conf_dir/"
 
 
############
# Finished #
############

echo "Finished!"
echo "Bye!"
 
exit 0
