#!/bin/sh
set -eu
usage() {
	cat >&2 <<'EOF'
Usage:
  mail-secret get SERVICE HOST USER
  mail-secret store SERVICE HOST USER

Examples:
  mail-secret store smtp outgoing.mit.edu benjames
  mail-secret get   smtp outgoing.mit.edu benjames

  mail-secret store imap imap.csail.mit.edu benjames
  mail-secret get   imap imap.csail.mit.edu benjames
EOF
	exit 2
}

die() {
	printf "%s\n" "$*" >&2
	exit 1
}

[ "$#" -eq 4 ] || usage

cmd="$1"
service="$2"
host="$3"
user="$4"

case "$(uname -s)" in
Darwin)
	backend=macos-keychain
	;;
Linux)
	backend=secret-tool
	;;
NetBSD)
	backend=secret-tool
	;;
FreeBSD)
	backend=secret-tool
	;;
*)
	die "Unsupported OS $(uname -s)"
	;;
esac

case "$backend:$cmd" in
macos-keychain:get)
	exec security find-generic-password \
		-a "$user" \
		-s "mail:$service:$host" \
		-w
	;;
macos-keychain:store)
	security add-generic-password \
		-a "$user" \
		-s "mail:$service:$host" \
		-D "mail password" \
		-U \
		-w
	;;
secret-tool:get)
	command -v secret-tool >/dev/null 2>&1 || die "secret-tool not found"
	secret-tool lookup \
		app mail \
		service "$service" \
		host "$host" \
		user "$user"
	;;
secret-tool:store)
	command -v secret-tool >/dev/null 2>&1 || die "secret-tool not found"
	secret-tool store \
		--label "mail:$service:$host:$user" \
		app mail \
		service "$service" \
		host "$host" \
		user "$user"

	;;
*)
	usage
	;;
esac
