#!/bin/sh

# FUNCTIONS ###########################################################

# script usage
usage() {
    >&2 cat <<EOF
ADLIN token generator
EOF
}

# token generator
token_generator() {
    {
	echo -n ${PKEY}
	for d
	do
	    echo -n :${d}
	done
    } | b2sum | cut -d ' ' -f 1
}

# JSON token format helper
token_format() {
    local TID=$1
    local TOKEN=$2
    shift 2

    [ $# -gt 0 ] && {
	local DATA=',
    "data": [';
	for d; do
	    [ -z "$Z" ] && Z=1 || DATA="$DATA, "
	    DATA="$DATA\"$d\""
	done
	DATA="$DATA]"
    }

    >&2 cat <<EOF
{
    "login": "${ULGN}",
    "challenge": ${TID},
    "token": "${TOKEN}"${DATA}
}
EOF
}

# /proc/cmdline parser (from Gentoo Wiki)
cmdline() {
    local value
    value=" $(cat /proc/cmdline) "
    value="${value##* $1=}"
    value="${value%% *}"
    [ "$value" != "" ] && echo "$value"
}


# GLOBAL VARIABLES ####################################################

ULGN=$(cmdline adlin.login)
PKEY=$(cmdline adlin.key)


# MAIN ################################################################

[ $# -lt 1 ] && { usage; exit 1; }

case "$1" in
    token1|token2)
	HDATA=42
	;;
    token3|token6)
	DATA=$(date +%s%N)
    ;;
    token4)
	echo "$1 is not here! Perhaps it has been accidentally deleted?" >&2
	exit 2
    ;;
    token5)
	HDATA=$(dig +short +time=1 +tries=0 adlin.nemunai.re $2 | sed 's/"//g') || {
	    echo "Try again! Your resolver settings seems not good :(" >&2
	    exit 3
	}
	echo $HDATA | grep "not here" 2> /dev/null && exit 3
    ;;
    *)
	echo "Invalid argument: $1" >&2
	usage
	exit 1
	;;
esac

token_format "${1#token}" "$(token_generator ${1#token} ${HDATA} ${DATA})" ${DATA}
