#!/bin/bash # Copyright (c) 2012-2013 Kaarle Ritvanen # See LICENSE file for license details function _acf_req { local url=$ACF_URL$1 shift local resp resp=$(curl -s -w $'\n\nStatus: %{response_code}\r\n' \ ${ACF_Auth_Token:+-H "X-ACF-Auth-Token: $ACF_Auth_Token"} \ ${ACF_Transaction_ID:+-H "X-ACF-Transaction-ID: $ACF_Transaction_ID"} \ "$@" $url) local code=$? if [ $code -gt 0 ]; then echo "Request failed, code $code" >&2 return 1 fi resp=$(echo "$resp" | sed $'s/\r//') echo "$resp" local status=$(echo "$resp" | sed 's/^Status: //;ta;d;:a;q') [ "${status:0:1}" = 2 ] && return echo "Request failed" >&2 return 1 } function _acf_start_req { local url=$1 shift local resp resp=$(_acf_req "$url" "$@" -D /proc/self/fd/1 -o /proc/self/fd/3) [ $? -eq 0 ] || return local txn_id=$ACF_Transaction_ID while read line; do eval export "$line" done < <(echo "$resp" | \ sed 's/^X-\(ACF-[-A-Za-z]\+\): /\1=/;ta;d;:a;y/-/_/') bash --rcfile "$ACF_QD_CLI" [ $? -eq 254 ] || _acf_req $url -X DELETE ACF_Transaction_ID=$txn_id } if [ "$ACF_Auth_Token" ]; then if [ "$ACF_Transaction_ID" ]; then cat >&2 <&2 < Create/update object: put Add member to list/set or perform action: post Delete object: delete Fetch metadata: meta Start transaction: start EOF if [ $ACF_Save_Required = 1 ]; then echo " Save changes persistently: save" >&2 fi cat >&2 <&2 return 1 fi _acf_req /save -X POST } fi function start { _acf_start_req /transaction -X POST } function meta { _acf_req "/meta$1" } function _acf_obj_req { local path=/config$1 shift _acf_req "$path" "$@" } function _acf_post_req { _acf_obj_req "$2" -d "$3" -X $1 } function get { _acf_obj_req "$1" } function put { _acf_post_req PUT "$@" } function post { _acf_post_req POST "$@" } function delete { _acf_obj_req "$1" -X DELETE } function commit { if [ "$ACF_Transaction_ID" ]; then if _acf_req /transaction -X PUT; then echo Committed >&2 exit 254 fi else echo "No transaction started" >&2 fi return 1 } else cat >&2 <&1 export ACF_QD_CLI=$0 export ACF_URL=http://localhost:8000 export ACF_USER=`whoami` PASSWORD= function usage { echo "Usage: $0 [-H ] [-u ] [-p ]" >&2 exit $1 } ARGS=$(getopt -o hH:p:u: -- "$@") [ $? -gt 0 ] && usage 1 eval set -- $ARGS while :; do case $1 in -h) usage 0 ;; -H) shift ACF_URL=$1 ;; -p) shift PASSWORD=$1 ;; -u) shift ACF_USER=$1 ;; --) break esac shift done if [ -z "$PASSWORD" ]; then echo -n "Password: " >&2 read PASSWORD echo >&2 fi ACF_Transaction_ID= _acf_start_req /login \ -d "{\"username\": \"$ACF_USER\", \"password\": \"$PASSWORD\"}" fi