#!/bin/bash # rest-apiv1.sh # description: Script to access Inbucket REST API version 1 API_HOST="localhost" URL_ROOT="http://$API_HOST:9000/api/v1" set -eo pipefail [ $TRACE ] && set -x usage() { echo "Usage: $0 [argument1 [argument2 [..]]]" >&2 echo >&2 echo "Options:" >&2 echo " -h - show this help" >&2 echo " -i - show HTTP headers" >&2 echo >&2 echo "Commands:" >&2 echo " list - list mailbox contents" >&2 echo " body - print message body" >&2 echo " source - print message source" >&2 echo " delete - delete message" >&2 echo " purge - delete all messages in mailbox" >&2 } arg_check() { declare command="$1" expected="$2" received="$3" if [ $expected != $received ]; then echo "Error: Command '$command' requires $expected arguments, but received $received" >&2 echo >&2 usage exit 1 fi } main() { # Process options local curl_opts="" local pretty="true" for arg in $*; do if [[ $arg == -* ]]; then case "$arg" in -h) usage exit ;; -i) curl_opts="$curl_opts -i" pretty="" ;; **) echo "Unknown option: $arg" >&2 echo usage exit 1 ;; esac shift else break fi done # Store command declare command="$1" shift local url="" local method="GET" local is_json="" case "$command" in body) arg_check "$command" 2 $# url="$URL_ROOT/mailbox/$1/$2" is_json="true" ;; delete) arg_check "$command" 2 $# method=DELETE url="$URL_ROOT/mailbox/$1/$2" ;; list) arg_check "$command" 1 $# url="$URL_ROOT/mailbox/$1" is_json="true" ;; purge) arg_check "$command" 1 $# method=DELETE url="$URL_ROOT/mailbox/$1" ;; source) arg_check "$command" 2 $# url="$URL_ROOT/mailbox/$1/$2/source" ;; *) echo "Unknown command $command" >&2 echo >&2 usage exit 1 ;; esac # Use jq to pretty-print if installed and we are expecting JSON output if [ $pretty ] && [ $is_json ] && type -P jq >/dev/null; then curl -s $curl_opts -H "Accept: application/json" --noproxy "$API_HOST" -X "$method" "$url" | jq . else curl -s $curl_opts -H "Accept: application/json" --noproxy "$API_HOST" -X "$method" "$url" fi } if [ $# -lt 1 ]; then usage exit 1 fi main $*