]> git.plutz.net Git - rigidfind/commitdiff
implemented HTTP Basic authorization
authorPaul Hänsch <paul@plutz.net>
Tue, 5 Mar 2024 15:22:05 +0000 (16:22 +0100)
committerPaul Hänsch <paul@plutz.net>
Tue, 5 Mar 2024 15:22:05 +0000 (16:22 +0100)
index.cgi

index 0078a2f8f1837201ae7fc7a19324cd0fe01d4818..5351b2b27e3d42ed17a4124b79647b2c78e294ad 100755 (executable)
--- a/index.cgi
+++ b/index.cgi
@@ -109,6 +109,23 @@ search() {
 _INDEX="${PATH_INFO#/}" _INDEX="${_INDEX%%/*}"
 _records="${_DATA}/${_INDEX}/_0_DOCS"
 
+if [ "${INDEX}" -a ! -d "${_DATA}/${_INDEX}" ]; then
+  printf '%s\r\n' "Status: 404 Not Found" ""
+  exit 0
+elif authlist="$(DBM "${_DATA}/auth.db" get "${_INDEX}" )"; then
+  auth="$(HEADER Authorization)" auth="${auth#Basic }"
+  for a in $authlist deny; do
+    [ "$auth" = "$a" ] && break
+  done
+  if [ "$a" = "deny" -o ! "$auth" ]; then
+    printf '%s\r\n' "Status: 401 Unauthorized" \
+      "WWW-Authenticate: Basic realm=\"Rigid Find\"" "" \
+    | debug
+    exit 0
+  fi
+  unset a auth authlist
+fi
+
 if   [ "$REQUEST_METHOD" = "PUT" ]; then
   _doc="${PATH_INFO#"/${_INDEX}/_doc"}"
 
@@ -194,7 +211,7 @@ elif [ "$REQUEST_METHOD" = "DELETE" ]; then
   exit 0
 
 elif [ "$REQUEST_METHOD" = "POST" ]; then
-  J="$(json_load "$(head -c "${CONTENT_LENGTH:-0}")")"
+  J="$(json_load "$(head -c "${CONTENT_LENGTH:-0}" |debug)")"
   J="$(json_get "$J" query.bool.must.bool.should)"
 
   words="$(
@@ -202,10 +219,12 @@ elif [ "$REQUEST_METHOD" = "POST" ]; then
       json_get "$(UNSTRING "$j")" match_phrase_prefix.content
     done 2>/dev/null
   )"
+  debug "Search words: $words"
 
   results="@   $(
     search "${_DATA}/${_INDEX}" $words \
     | while read -r score id source; do
+      debug "Hit: $id  $score"
       S="$(DB2   "" set _index  str:"${_INDEX}")"
       S="$(DB2 "$S" set _id     str:"$(UNSTRING "${id#/}")")"
       S="$(DB2 "$S" set _score  num:"$score")"
@@ -237,7 +256,7 @@ elif [ "$REQUEST_METHOD" = "HEAD" ]; then
   && ctype="${accept}" || ctype="application/json"
 
   cat <<-EOF
-       HTTP/1.1 200 OK\r
+       Status: 200 OK\r
        X-elastic-product: Elasticsearch\r
        content-type: ${ctype}\r
        \r
@@ -250,7 +269,7 @@ elif [ "$REQUEST_METHOD" = "GET" ]; then
   && ctype="${accept}" || ctype="application/json"
 
   cat <<-EOF
-       HTTP/1.1 200 OK\r
+       Status: 200 OK\r
        X-elastic-product: Elasticsearch\r
        content-type: ${ctype}\r
        \r