From 411862b8baddaac29feb534a9c2975a7c872d80b Mon Sep 17 00:00:00 2001
From: Olaf Bohlen <olbohlen@eenfach.de>
Date: Mon, 02 Jan 2023 12:58:57 +0100
Subject: [PATCH] fixed various quoting issues and some bugs related to write code while half asleep

---
 receipt-processor.ksh |   53 +++++++++++++++++++++++++++--------------------------
 1 files changed, 27 insertions(+), 26 deletions(-)

diff --git a/receipt-processor.ksh b/receipt-processor.ksh
index 2f7be4d..0179d0d 100644
--- a/receipt-processor.ksh
+++ b/receipt-processor.ksh
@@ -13,13 +13,15 @@
 
 CURLOPTS="-s --cacert ${CACRT} -H 'Accept: application/json' -H 'User-Agent: ksh93 receipt processor 0.1' -H 'Authorization: Bearer ${TOKEN}'"
 
-updatedreceipts=""
 
 while sleep 5; do
     # MAIN loop
 
+    # we will later store here modified receipt uids, so we clear it for every run
+    updatedreceipts=""
+
     # get a CookieReceiptList item from the API and store the json in a variable
-    respjson=$(curl -XGET ${CURLOPTS} '${APIURL}/apis/de.eenfach.olbohlen/v1/namespaces/${NAMESPACE}/cookiereceipts?limit=500')
+    respjson=$(eval curl -XGET ${CURLOPTS} "${APIURL}/apis/de.eenfach.olbohlen/v1/namespaces/${NAMESPACE}/cookiereceipts?limit=500")
 
     # check if we got the expected resource:
     kind=$(echo "${respjson}" | jq .kind)
@@ -29,7 +31,7 @@
     fi
     
     # how many receipts are there?
-    numreceipts=$(echo "${respjson}" | jq .items[].metadata.name | wc -l)
+    numreceipts=$(echo "${respjson}" | jq .items\[\].metadata.name | wc -l)
 
     # populate the in memory arrays with json metadata, we need
     # - the name
@@ -38,54 +40,53 @@
     # for every receipt to figure out if we need to process them
     i=0
     while [ ${i} -lt ${numreceipts} ]; do
-	##foo[${xid}]=$(echo  "${RESPJSON}" | jq .items[1].metadata.name)
-	receiptuid=$(echo "${respjson}" | jq .items[${i}].metadata.uid)
-	receiptname[${receiptuid}]=$(echo "${respjson}" | jq .items[${i}].metadata.name)
+	receiptuid=$(echo "${respjson}" | jq -r .items[${i}].metadata.uid)
+	receiptname[${receiptuid}]=$(echo "${respjson}" | jq -r .items[${i}].metadata.name)
 	
-	#receiptversion[${receiptuid}]=$(echo "${respjson}" | jq .items[${i}].metadata.resourceVersion)
 	# check if we already have processed this version of the receipt, if not
 	# store the uid of that receipt in the updatedreceipts var
-	newversion=$(echo "${respjson}" | jq .items[${i}].metadata.resourceVersion)
+	newversion=$(echo "${respjson}" | jq -r .items[${i}].metadata.resourceVersion)
 	if [ "x${newversion}" != "x${receiptversion[${receiptuid}]}" ]; then
 	       # we have an update!
-	       updatedreceipts="${updatedreceipts} ${newversion}"
-	       receiptsversion[${receiptuid}]="${newversion}"
+	       updatedreceipts="${updatedreceipts} ${receiptuid}"
+	       receiptversion[${receiptuid}]="${newversion}"
 	fi
 	i=$(( ${i} + 1 ))
     done
+
     # now that we have a list of updated receipts, we are going to process them
     for r in ${updatedreceipts}; do
 	# get the name for the UID and fetch only that object
-	receipt=$( curl -XGET ${CURLOPTS} '${APIURL}/apis/de.eenfach.olbohlen/v1/namespaces/${NAMESPACE}/cookiereceipts/${receiptname[${r}]}' )
+	receipt=$(eval curl -XGET ${CURLOPTS} '${APIURL}/apis/de.eenfach.olbohlen/v1/namespaces/${NAMESPACE}/cookiereceipts/${receiptname[${r}]}' )
 
 	# receipt contains now the json for one receipt, now we parse that
 	# we set scale to Fahrenheit if sanescale is false, else scale will use Celsius
-	scale_b=$( echo "${receipt}" | jq .spec.sanescale )
+	scale_b=$( echo "${receipt}" | jq -r .spec.sanescale )
 	if [ "x${sanescale}" == "xfalse" ]; then
 	    scale=Fahrenheit
 	fi
 	
-	temperature=$( echo ${receipt} | jq .spec.temperature )
+	temperature=$( echo ${receipt} | jq -r .spec.temperature )
 	
-	preheat_b=$( echo "${receipt}" | jq .spec.preheat )
+	preheat_b=$( echo "${receipt}" | jq -r .spec.preheat )
 	if [ "x${preheat_b}" == "xtrue" ]; then
 	    printf "Pre: we heat up the oven to %s degrees %s\n" "${temperature}" "${scale:-Celsius}"
 	fi
 
 	# how many ingredients do we have?
-	num_in=$(echo "${receipt}" | jq .spec.ingredients[].name | wc -l)
+	num_in=$(echo "${receipt}" | jq .spec.ingredients\[\].name | wc -l)
 
 	# list up that we fetch needed ingredients
 	i=0
 	while [ ${i} -lt ${num_in} ]; do
-	    in_name=$( echo "${receipt}" | jq .spec.ingredients[${i}].name )
-	    in_amount=$( echo "${receipt}" | jq .spec.ingredients[${i}].amount )
-	    in_unit=$( echo "${receipt}" | jq .spec.ingredients[${i}].unit )
-	    in_remarks=$( echo "${receipt}" | jq .spec.ingredients[${i}].remarks )
+	    in_name=$( echo "${receipt}" | jq -r .spec.ingredients[${i}].name )
+	    in_amount=$( echo "${receipt}" | jq -r .spec.ingredients[${i}].amount )
+	    in_unit=$( echo "${receipt}" | jq -r .spec.ingredients[${i}].unit )
+	    in_remarks=$( echo "${receipt}" | jq -r .spec.ingredients[${i}].remarks )
 		    
-	    printf "Fetching %s%s of %s" ${in_amount} ${in_unit} ${in_name}
+	    printf "Fetching %s%s of %s" "${in_amount}" "${in_unit}" "${in_name}"
 	    if [ "x${in_remarks}" != "xnull" ]; then
-		printf " (%s)" ${in_remarks}
+		printf " (%s)" "${in_remarks}"
 	    fi
 	    printf "\n"
 	    sleep 1
@@ -98,14 +99,14 @@
 	# an "order" attribute in each list item, and we select on that.
 	# first again, we need the amount of instructions...
 
-	num_steps=$(echo "${receipt}" | jq .spec.steps[].order | wc -l)
+	num_steps=$(echo "${receipt}" | jq .spec.steps\[\].order | wc -l)
 
 	# now let's iterate over that
-	i=0
+	i=1
 	while [ ${i} -lt ${num_steps} ]; do
-	    instruction=$( echo "${receipt}" | jq ".spec.steps[] | select(.order == ${i}) | { instruction | join (' ')" )
-	    ##echo "${receipt}" | jq '.spec.steps[] | select(.order == 5) | { instruction } | join (" ")'
-	    printf "Step %i/%i: %s..." $(( ${i} + 1 )) ${num_steps} "${instruction}"
+	    instruction=$( echo "${receipt}" | jq '.spec.steps[] | select(.order == '${i}') | { instruction | join (" ")' )
+
+	    printf "Step %i/%i: %s..." ${i} ${num_steps} "${instruction}"
 	    sleep $(( ${RANDOM} % 6 + 1 ))
 	    printf "done\n"
 	    sleep 1

--
Gitblit v1.9.3