Files
GIA/utilities/prosody/auth_django.sh

57 lines
1.2 KiB
Bash
Executable File

#!/bin/sh
set -eu
AUTH_ENDPOINT="${PROSODY_AUTH_ENDPOINT:-http://127.0.0.1:8000/internal/prosody/auth/}"
PROSODY_SECRET="${XMPP_SECRET:-}"
b64url() {
printf '%s' "$1" | base64 | tr -d '\n=' | tr '+/' '-_'
}
http_get() {
url="$1"
if command -v wget >/dev/null 2>&1; then
wget -qO- -T 5 "$url" 2>/dev/null
return
fi
if command -v curl >/dev/null 2>&1; then
curl -fsS --max-time 5 "$url" 2>/dev/null
return
fi
if command -v lua >/dev/null 2>&1; then
lua - "$url" <<'LUA'
local http = require("socket.http")
local ltn12 = require("ltn12")
http.TIMEOUT = 5
local chunks = {}
local _, code = http.request({
url = arg[1],
sink = ltn12.sink.table(chunks),
})
if tonumber(code) and tonumber(code) >= 200 and tonumber(code) < 300 then
io.write(table.concat(chunks))
end
LUA
return
fi
return 1
}
while IFS= read -r line; do
if [ -z "$line" ] || [ -z "$PROSODY_SECRET" ]; then
printf '0\n'
continue
fi
secret_b64="$(b64url "$PROSODY_SECRET")"
line_b64="$(b64url "$line")"
result="$(http_get "$AUTH_ENDPOINT?secret_b64=$secret_b64&line_b64=$line_b64" || printf '0')"
case "$result" in
1|1$'\n')
printf '1\n'
;;
*)
printf '0\n'
;;
esac
done