#!/bin/sh

CERT_FILE=/mnt/shadow/client-certificate.pem
TOKEN_FILE=/mnt/shadow/cert-fix-token.txt

PROCID=$(qiba-get-params.sh | grep serialno | awk -F '=' '{print $2;}')

DATE_URL=http://manage.barix.com/clock

if [ -n "$(get-proxy-env http)" ]; then
  export http_proxy=$(get-proxy-env http)
fi

get_date() {
    while true; do
        headerDate=$(wget -S -O - --max-redirect 0 "$DATE_URL" 2>&1 | grep "Date:" | sed 's/Date: [A-Z][a-z][a-z], //g'| sed 's/\r//');
        
        if [ -n "$headerDate" ]; then
            read DAY MONTH_STR YEAR TIME TZ <<< $headerDate

            case "$MONTH_STR" in                                                                                                                                                                                                  
                Jan)                                                                                                                                                                                                          
                    MONTH="01";;                                                                                                                                                                                              
                Fev)                                                                                                                                                                                                          
                    MONTH="02";;                                                                                                                                                                                              
                Mar)                                                                                                                                                                                                          
                    MONTH="03";;                                                                                                                                                                                              
                Apr)                                                                                                                                                                                                          
                    MONTH="04";;                                                                                                                                                                                              
                May)                                                                                                                                                                                                          
                    MONTH="05";;                                                                                                                                                                                              
                Jun)                                                                                                                                                                                                          
                    MONTH="06";;                                                                                                                                                                                              
                Jul)                                                                                                                                                                                                          
                    MONTH="07";;                                                                                                                                                                                              
                Aug)                                                                                                                                                                                                          
                    MONTH="08";;                                                                                                                                                                                              
                Sep)                                                                                                                                                                                                          
                    MONTH="09";;                                                                                                                                                                                              
                Oct)                                                                                                                                                                                                          
                    MONTH="10";;                                                                                                                                                                                              
                Nov)                                                                                                                                                                                                          
                    MONTH="11";;                                                                                                                                                                                              
                Dec)                                                                                                                                                                                                          
                    MONTH="12";;                                                                                                                                                                                              
                *)                                                                                                                                                                                                          
                    exit 1;;                                                                                                                                                                                                                                                                                                                                                                                                                        
            esac                                                                                                                                                                                                                  
            echo "Setting system time to $YEAR-$MONTH-$DAY $TIME ..."
            date -u -s "$YEAR-$MONTH-$DAY $TIME"
            break
        else
            echo "Unable to retrieve date. Retrying in 10s"
            sleep 10
        fi
    done
}


if ! openssl x509 -in $CERT_FILE >/dev/null 2>&1; then
    echo "Recovering broken certificate..."
    mount -o remount,rw /mnt/shadow
    get_date
    cert-fix get eth0 $PROCID $TOKEN_FILE $CERT_FILE
    reboot
    false
elif openssl x509 -enddate -noout -in $CERT_FILE -checkend 0 | grep -q "Certificate will expire" >/dev/null 2>&1; then
    echo "Recovering invalid certificate..."
    mount -o remount,rw /mnt/shadow
    get_date
    cert-fix get eth0 $PROCID $TOKEN_FILE $CERT_FILE
    reboot
    false
elif [ -f $TOKEN_FILE ]; then
    echo "Acknowledging new certificate..."
    mount -o remount,rw /mnt/shadow
    get_date
    if cert-fix ack eth0 $PROCID $TOKEN_FILE; then
        rm $TOKEN_FILE
        rm $(which cert-fix)
        mount -o remount,ro /mnt/shadow
        true
    else
        rm $CERT_FILE
        reboot
        false
    fi
else
    true
fi
