|
@@ -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
|
|
|
+
|