#!/bin/bash

restoreDir=/etc/restore
ldapDir="$restoreDir/openldap"

hook_before() {
    if [[ -d "$ldapDir" ]]; then
        rm -rf "$ldapDir" || exit 1
    fi
    mkdir -p "$ldapDir" || exit 1
    pushd "$restoreDir" || exit 2

    slapcat -n 0 -l "$ldapDir/config.ldif"
    slapcat -n 1 -l "$ldapDir/data.ldif"

    cat > ldaprestore.sh <<EOF
#!/bin/bash

if [[ ! -d openldap ]]; then
    echo "This needs to be run in the restore directory."
    exit 1
fi
if [[ ! -f openldap/config.ldif ]]; then
    echo "This needs to be run in the restore directory."
    exit 1
fi

currDate="\$(date '+%Y-%m-%d')"

systemctl stop slapd
sleep 5
pkill slapd

if [[ -d /etc/ldap/slapd.d ]]; then
    mv /etc/ldap/slapd.d "/etc/ldap/slapd.d.\$currDate"
    mkdir -p /etc/ldap/slapd.d
    slapadd -n 0 -F /etc/ldap/slapd.d -l openldap/config.ldif
    chown -R ldap:ldap /etc/ldap/slapd.d
fi

if [[ -d /var/lib/ldab ]]; then
    mv /var/lib/ldap "/var/lib/ldap.\$currDate"
    mkdir -p /var/lib/ldap

    if [[ -d /etc/ldap/slapd.d ]]; then
        slapadd -n 1 -F /etc/ldap/slapd.d -l openldap/data.ldif -w
    fi
    chown -R ldap:ldap /var/lib/ldap
fi

echo "Backups have been restored. If you see no errors above, then you can start your server back up."
EOF

    popd || exit 2
}

hook_after() {
    rm -rf "$ldapDir" || exit 1
}

hook_fail() {
    :
}

hook_final() {
    :
}

case "$1" in
    before)     hook_before     || exit $?;;
    after)      hook_after      || exit $?;;
    fail)       hook_fail       || exit $?;;
    finally)    hook_final      || exit $?;;
esac