#! /bin/sh

set -e

# Input environment variables:
# URL
# USERNAME
# PASSWORD

check()
{
	var="$1"

	test -n "$(printenv $var)" ||
		(printf "Please define environment variable $var\n" >&2; exit 1)
}

usage()
{
	printf "%s <artifact> [...]\n" "$0" >&2
}

login()
{
	curl -X POST \
		--fail-with-body \
		-c "$cookiejar" \
		--data-urlencode "username@$username" \
		--data-urlencode "password@$password" \
		"$URL/login"
}

upload()
{
	f="$1"

	curl -X POST \
		--fail-with-body \
		-b "$cookiejar" \
		-F dir="/" \
		-F "file=@$f;filename=$(basename -- "$f")" \
		"$URL/upload"
}

upload_all()
{
	for f in $*
	do
		upload "$f" || (printf "Failed to upload %s\n" "$f"; exit 1)
		share "$f" || (printf "Failed to share %s\n" "$f"; exit 1)
	done
}

share()
{
	f="$1"
	resp="$(mktemp)"

	curl -s -X POST \
		--fail-with-body \
		-b "$cookiejar" \
		--data-urlencode "name=/$f" \
		"$URL/share" > "$resp"

	pub=$(grep -Poe '/public/[a-f0-9]+' "$resp")
	printf "%s: %s%s\n" "$f" "$URL" "$pub"
}

cleanup()
{
	rm -f "$cookiejar" "$password" "$username"
}

check URL
check USERNAME
check PASSWORD

test $# -ge 1 || (usage; exit 1)
cookiejar="$(mktemp)"
username="$(mktemp)"
password="$(mktemp)"
trap cleanup INT QUIT TERM EXIT
printenv USERNAME | tr -d '\n' > "$username"
printenv PASSWORD | tr -d '\n' > "$password"
login || (printf "Failed to log in\n"; exit 1)
upload_all $@ || (printf "Failed to upload files\n"; exit 1)
