Browse Source

Initial commit with shell script "api"

Joe Ceresini 7 years ago
commit
d13ef99f34
1 changed files with 78 additions and 0 deletions
  1. 78 0
      contains_all_chars.sh

+ 78 - 0
contains_all_chars.sh

@@ -0,0 +1,78 @@
+#!/bin/bash
+# Bash script to be run as CGI and act as a
+# JSON api with a single method
+#
+# This is not the least bit practical but
+# I thought it would be a fun exercise
+
+
+#####################
+# HTTP functions
+#####################
+http_response() {
+	echo "HTTP/1.1 $response_code"
+	for h in "${headers[@]}"; do
+		echo $h
+	done
+	echo -n -e "\n\n"
+}
+
+send_response() {
+	http_response
+	echo $body
+	exit
+}
+
+#####################
+# API method(s)
+#####################
+contains_all_lowercase_chars_in_latin_alphabet() {
+	input_string=$1
+	wanted_chars='abcdefghijklmnopqrstuvwxyz'
+
+	# count unique characters in $wanted_chars
+	wanted_chars_c=$(echo $wanted_chars | grep -o . | sort | uniq | wc -l)
+
+	# remove non-matching characters from input, and count unique remaining characters
+	uniq_matching_chars_c=$(echo $input_string | tr -dc "$wanted_chars" | grep -o . | sort | uniq | wc -l )
+
+	# if counts match, it contains all chars, return appropriate exit codes
+	if [[ $uniq_matching_chars_c -eq $wanted_chars_c ]]; then
+        	return 0
+	else
+		return 1
+	fi
+}
+
+
+#####################
+# Do the things
+#####################
+
+# variables needed for responses
+response_code="200 OK"
+headers=()
+body=''
+
+# this api endpoint requires you to post data
+if [[ $REQUEST_METHOD != "POST" ]]; then
+	response_code="400 Bad Request"
+	headers+=('Content-type: application/json')
+	body='{"error": "Invalid http method", "result": null}'
+	send_response
+fi
+
+# posted data is accessed from stdin
+read data
+
+contains_all_lowercase_chars_in_latin_alphabet "$data"
+if [[ $? -eq 0 ]]; then
+	body='{"error": null, "result": true}'
+else
+	body='{"error": null, "result": false}'
+fi
+
+response_code="200 OK"
+headers+=('Content-type: text/json')
+send_response
+