#!/bin/bash

if [ ! -f /etc/cvmfs-user-pub.conf ]; then
    exit
fi

PREFIX="`sed -n 's/^prefix\s*//p' /etc/cvmfs-user-pub.conf`"
if [ -z "$PREFIX" ]; then
    PREFIX=sw
fi
MYHOSTLONG="`hostname`"
MYHOSTSHORT="`hostname -s`"
ADDEDONE=false
for HOSTREPO in `sed -n 's/^hostrepo\s*//p' /etc/cvmfs-user-pub.conf`; do
    HOST="`echo $HOSTREPO|sed 's/:.*//'`"
    REPO="`echo $HOSTREPO|sed 's/.*://'`"
    if [ "$HOST" = "$MYHOSTLONG" ] || [ "$HOST" = "$MYHOSTSHORT" ]; then
        if [ ! -d /srv/cvmfs/$REPO ]; then
            if ! cvmfs_server mkfs -o cvmfspub -G '1 day ago' -z $REPO; then
                continue
            fi
            ADDEDONE=true
        fi
        SERVERCONF=/etc/cvmfs/repositories.d/$REPO/server.conf
        for OPT in  CVMFS_IGNORE_XDIR_HARDLINKS=true \
                    CVMFS_GENERATE_LEGACY_BULK_CHUNKS=false \
                    CVMFS_AUTOCATALOGS=true \
                    CVMFS_ENFORCE_LIMITS=true \
                    CVMFS_FORCE_REMOUNT_WARNING=false \
                    CVMFS_AUTO_GC=false \
                    CVMFS_REPOSITORY_TTL=15 \
                    CVMFS_PRINT_STATISTICS=true \
        ; do
            if ! grep -q "^$OPT$" $SERVERCONF; then
                echo "$OPT" >>$SERVERCONF
            fi
        done
        if [ ! -f /cvmfs/$REPO/.cvmfsdirtab ]; then
            if ! cvmfs_server transaction $REPO; then
                echo "Cannot start transaction, skipping making .cvmfsdirtab"
            else
                (echo "/*";
                echo "/$PREFIX/*";
                echo "/ts/*") >/cvmfs/$REPO/.cvmfsdirtab
                chown cvmfspub /cvmfs/$REPO/.cvmfsdirtab
                rm -f /cvmfs/$REPO/new_repository
                cvmfs_server publish $REPO
            fi
        fi
    elif [ ! -d /srv/cvmfs/$REPO ]; then
        PUB=/etc/cvmfs/keys/$REPO.pub
        if [ ! -f $PUB ]; then
            DOMAIN="`echo $REPO|cut -d. -f2-`"
            PUB=/etc/cvmfs/keys/$DOMAIN.pub
            if [ ! -f $PUB ]; then
                PUB=/etc/cvmfs/keys/$DOMAIN
                if [ ! -d $PUB ]; then
                    echo "No key found for $REPO"
                    continue
                fi
            fi
        fi
        ADDEDONE=true
        if ! cvmfs_server add-replica -o cvmfspub http://$HOST/cvmfs/$REPO $PUB; then
            echo "Failed to replicate $REPO from $HOST with key $PUB"
        elif ! cvmfs_server snapshot $REPO; then
            echo "Failed to make initial snapshot of $REPO from $HOST"
        fi
    fi
done

if $ADDEDONE; then
    systemctl stop cvmfs-user-pub
    systemctl start cvmfs-user-pub
fi

