#!/bin/sh

set -e

email="{{ gpg_key_email }}"
realname="{{ gpg_key_realname }}"
changed="no"
comment="Nothing done"

export GNUPGHOME=~{{ gpg_user }}/.gnupg
unset XDG_RUNTIME_DIR

if [ ! -d "$GNUPGHOME" ]; then
	# Implicitly creates the GnuPG home directory
	gpg --list-keys >/dev/null
fi

if which gpgconf >/dev/null 2>&1; then
	use_gpgconf="yes"
fi

start_agent() {
	if [ "$use_gpgconf" = "yes" ]; then
		gpgconf --launch gpg-agent
	fi
}

stop_agent() {
	if [ "$use_gpgconf" = "yes" ]; then
		gpgconf --kill gpg-agent
	fi
}

get_keyid() {
	KEYID=$(gpg --list-secret-keys --with-colons "$realname <$email>" | head -n 1 | cut -d : -f 5)
}

gen_key() {
	gpg --batch --gen-key <<EOF
%echo Generating {{ gpg_user }}'s GPG key...
%no-protection
Key-Type: {{ gpg_key_type|default('RSA') }}
Key-Length: {{ gpg_key_length|default(2048) }}
Key-Usage: {{ gpg_key_usage|default('sign') }}
Name-Real: $realname
Name-Email: $email
Expire-Date: {{ gpg_expire_date|default(0) }}
%commit
%echo done
EOF
}

start_agent

if ! gpg --list-secret-keys "$realname <$email>" >/dev/null; then
	gen_key
	get_keyid
	changed="yes"
	comment="Created private key $KEYID for ${email}."
else
	get_keyid
fi

stop_agent

echo ""
echo "changed=$changed comment='$comment' keyid=$KEYID"
