123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #!/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"
- }
- 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
|