#!/usr/bin/bash
# /etc/rc.d/init.d/cvmfs-user-pub
#chkconfig: - 88 12
#description: mounts and unmounts /cvmfs2 repositories
#   and cleans up after reboot
#
# This source file is Copyright (c) 2019, FERMI NATIONAL ACCELERATOR
#    LABORATORY.  All rights reserved.
# For details of the Fermitools (BSD) license see COPYING.

if [ -f /etc/init.d/functions ]; then
    . /etc/init.d/functions
fi

OP="$1"
REPOS="`sed -n 's/^hostrepo.*://p' /etc/cvmfs-user-pub.conf`"

if [ "$OP" = status ]; then
    MOUNTS="`mount`"
    for REPO in $REPOS; do
        if ! echo "$MOUNTS"|grep -q " /cvmfs2/$REPO"; then
            echo "cvmfs-user-pub not running"
            exit 3
        fi
    done
    echo "cvmfs-user-pub running"
    exit
fi

if [ "$OP" = reload ]; then
    OP=restart
fi

if [ "$OP" = start ]; then
    # this needs to be done at boot time
    cvmfs_server mount -a
fi

for REPO in $REPOS; do
    if [ "$OP" = stop ] || [ "$OP" = restart ]; then
        # shut down the web service
        curl -s http://localhost/pubapi/shutdown
        if mount|grep -q " /cvmfs2/$REPO "; then
            umount /cvmfs2/$REPO
        fi
    fi

    if [ "$OP" = start ]; then
        RL1=/srv/cvmfs/$REPO/.cvmfsreflog 
        RL2=/var/spool/cvmfs/$REPO/reflog.chksum 
        if [ ! -f $RL1 ] || [ ! -f $RL2 ] || \
            [ "$(cvmfs_publish hash -a sha1 < $RL1)" != "$(< $RL2)" ]; then
            # sometimes a crash corrupts these
            rm -f $RL1 $RL2
            cvmfs_server abort -f $REPO || true
            cvmfs_server check -r $REPO || true
        fi
    fi

    if [ "$OP" = start ] || [ "$OP" = restart ]; then
        if ! mount|grep -q "^/cvmfs2/$REPO " && [ -d /srv/cvmfs/$REPO ]; then
            mkdir -p /cvmfs2/$REPO
            PUB=/etc/cvmfs/keys/$REPO.pub
            if [ -f $PUB ]; then
                KEY="CVMFS_PUBLIC_KEY=$PUB"
            else
                DOMAIN="`echo $REPO|cut -d. -f2-`"
                PUB=/etc/cvmfs/keys/$DOMAIN.pub
                if [ -f $PUB ]; then
                    KEY="CVMFS_PUBLIC_KEY=$PUB"
                else
                    KEY="CVMFS_KEYS_DIR=/etc/cvmfs/keys/$DOMAIN"
                fi
            fi
            cat >/etc/cvmfs/config.d/$REPO.local <<xEOFx
# generated by $0, do not edit
CVMFS_SERVER_URL=http://localhost/cvmfs/@fqrn@
CVMFS_HTTP_PROXY=DIRECT
$KEY
xEOFx
            CVMFS_BASE_ENV=1 CVMFS_USER=cvmfs CVMFS_MOUNT_DIR=cvmfs2 CVMFS_RELOAD_SOCKETS=/var/run/cvmfs mount -t cvmfs $REPO /cvmfs2/$REPO
        fi
    fi

done

if [ "$OP" = start ] || [ "$OP" = restart ]; then
    # kicks off initialization
    curl -s http://localhost/pubapi/startup
fi
