gluon-status-page: add generic respondd cgi-bin

Adding a cgi-bin script which allows to query a node's respondd over HTTP.
This is especially useful when the response is expected to be large and
a UDP response would lead to an unreliable transfer of multiple IP
fragments, like for the upcoming "statistics-extended" respondd
provider. HTTP/TCP is then the more reliable approach.

Query examples with HTTP GET:

  $ curl --compressed "http://<IP6ADDR>/cgi-bin/respondd"
  -> defaults to nodeinfo

  $ curl --compressed "http://<IP6ADDR>/cgi-bin/respondd?nodeinfo+statistics"

Query examples with HTTP POST:

  $ curl --data "" --compressed "http://<IP6ADDR>/cgi-bin/respondd"
  -> defaults to nodeinfo

  $ curl --data "nodeinfo statistics" --compressed "http://<IP6ADDR>/cgi-bin/respondd"

Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
This commit is contained in:
Linus Lüssing 2022-03-22 02:25:20 +01:00
parent d0fa7dd0bb
commit c6693b7316

View File

@ -0,0 +1,35 @@
#!/bin/sh
badrequest() {
echo 'Status: 400 Bad Request'
echo
exit 1
}
case "${REQUEST_METHOD}" in
GET)
;;
POST)
QUERY_STRING="$(cat)"
;;
*)
badrequest
;;
esac
if [ -z "${QUERY_STRING}" ]; then
# default to nodeinfo
QUERY_STRING="nodeinfo"
else
# replace URL encoded spaces via '+' with real space
QUERY_STRING="${QUERY_STRING//+/ }"
fi
# Return deflate compressed ("GET" prefix), JSON formatted response
echo "Content-Type: application/json"
echo "Content-Encoding: deflate"
echo ""
exec gluon-neighbour-info -i lo -d ::1 -p 1001 -r "GET ${QUERY_STRING}"