#!/bin/bash
set -euo pipefail
status=1

: ${JWT_USER_PATH:=/tmp/jwt_user_u$(id -u)/token.jwt}
[ $# -gt 0 ] && JWT_USER_PATH=$1

[ -f $JWT_USER_PATH ] || {
	echo >&2 token not found: $JWT_USER_PATH
	exit 1
}

trap '[ $status = 1 ] && echo >&2 invalid token: $JWT_USER_PATH; \
	exit $status' 0 1 2 15

pad() {
	d=$1===
	c=$(echo -n $d | wc -c)
	c=$((c / 4 * 4))
	echo $d | cut -b -$c
}

date_string() {
	expired=0
	current_date=$(date +%s)
	while read a b
	do
		case $a in
		\"exp\":)
			bb=$(echo $b | cut -d, -f 1)
			[ $expired = 0 ] && expired=$((bb < current_date))
			[ $b = $bb ] && COMMA= || COMMA=,
			echo "  "$a $(date --date=@$bb)$COMMA ;;
		\"iat\":|\"auth_time\":|\"nbf\":)
			bb=$(echo $b | cut -d, -f 1)
			[ $expired = 0 ] && expired=$((bb > current_date))
			[ $b = $bb ] && COMMA= || COMMA=,
			echo "  "$a $(date --date=@$bb)$COMMA ;;
		\"*)
			echo "  "$a $b ;;
		*)
			echo $a $b ;;
		esac
	done
	[ $expired = 1 ] && echo >&2 "expired"
	return $expired
}

for i in 1 2; do
	data=$(cut -d. -f $i $JWT_USER_PATH)
	pad $data | base64 -d | jq | date_string
done
status=0
