-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcheck_logviewer_api.sh
More file actions
128 lines (99 loc) · 3.74 KB
/
check_logviewer_api.sh
File metadata and controls
128 lines (99 loc) · 3.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env bash
set -euo pipefail
# Mini-Checksuite fuer Log-Viewer REST-API
# - testet Root, logdirs, loglisting, logfile tail
# - testet OPTIONS/CORS
# - testet Fehlerfaelle (404, Traversal)
# - testet optional Token-Case (wenn API_TOKEN gesetzt ist)
BASE_URL="${1:-http://127.0.0.1:5005}"
TOKEN_HEADER="${TOKEN_HEADER:-}" # z.B. export TOKEN_HEADER="X-API-Token: geheim"
CURL_BIN="${CURL_BIN:-curl}"
# Pretty helper
hr() { printf "\n== %s ==\n" "$*"; }
req() {
local method="$1"; shift
local url="$1"; shift
local extra_args=("$@")
# -sS: still show errors, -D-: headers to stdout, -o: body temp
local body_tmp
body_tmp="$(mktemp)"
local hdr_tmp
hdr_tmp="$(mktemp)"
# Token Header optional (wenn gesetzt)
local token_args=()
if [[ -n "${TOKEN_HEADER}" ]]; then
token_args=(-H "${TOKEN_HEADER}")
fi
# shellcheck disable=SC2086
set +e
"${CURL_BIN}" -sS -k -X "${method}" \
-D "${hdr_tmp}" \
"${token_args[@]}" \
"${extra_args[@]}" \
-o "${body_tmp}" \
"${url}"
local rc=$?
set -e
# Statuscode aus Header ziehen
local status
status="$(awk 'BEGIN{code=0} /^HTTP\/ /{code=$2} END{print code}' "${hdr_tmp}")"
echo "URL: ${url}"
echo "HTTP: ${status} (curl-rc=${rc})"
echo "--- Response headers (relevant) ---"
grep -iE '^(HTTP/|content-type:|cache-control:|access-control-allow-)' "${hdr_tmp}" || true
echo "--- Body (first 400 chars) ---"
head -c 400 "${body_tmp}"
echo
echo "---"
rm -f "${body_tmp}" "${hdr_tmp}"
# return nonzero wenn curl kaputt ist (kein HTTP Fehler, sondern Transport)
if [[ ${rc} -ne 0 ]]; then
return ${rc}
fi
return 0
}
hr "1) Root (Endpoints Liste)"
req GET "${BASE_URL}/"
hr "2) OPTIONS (CORS Preflight)"
req OPTIONS "${BASE_URL}/anything" -H "Origin: https://example.org" -H "Access-Control-Request-Method: GET"
hr "3) /logdirs"
req GET "${BASE_URL}/logdirs"
# Namen von erstem logdir aus /logdirs extrahieren (ohne jq)
hr "4) Ersten Logdir-Namen ermitteln"
LOGDIR_NAME="$("${CURL_BIN}" -sS -k "${BASE_URL}/logdirs" \
${TOKEN_HEADER:+-H "$TOKEN_HEADER"} \
| perl -0777 -ne 'if (/"logdirs"\s*:\s*\[\s*\{\s*"name"\s*:\s*"([^"]+)"/) { print $1 }')"
if [[ -z "${LOGDIR_NAME}" ]]; then
echo "Konnte keinen logdir-Namen finden. Abbruch (bitte Config logdirs pruefen)."
exit 2
fi
echo "Erster logdir: ${LOGDIR_NAME}"
hr "5) /log/:name (File listing)"
req GET "${BASE_URL}/log/${LOGDIR_NAME}"
# Erste Datei aus listing ziehen
hr "6) Erste Datei aus Listing ermitteln"
FIRST_FILE="$("${CURL_BIN}" -sS -k "${BASE_URL}/log/${LOGDIR_NAME}" \
${TOKEN_HEADER:+-H "$TOKEN_HEADER"} \
| perl -0777 -ne 'if (/"files"\s*:\s*\[\s*"([^"]+)"/) { print $1 }')"
if [[ -z "${FIRST_FILE}" ]]; then
echo "Keine Datei gefunden im Logdir ${LOGDIR_NAME}. (Das ist okay, dann werden File-Tests uebersprungen.)"
else
echo "Erste Datei: ${FIRST_FILE}"
hr "7) /log/*name/*file (tail default lines)"
req GET "${BASE_URL}/log/${LOGDIR_NAME}/${FIRST_FILE}"
hr "8) /log/*name/*file?lines=50"
req GET "${BASE_URL}/log/${LOGDIR_NAME}/${FIRST_FILE}?lines=50"
hr "9) /log/*name/*file?lines=5 (clamp -> 10)"
req GET "${BASE_URL}/log/${LOGDIR_NAME}/${FIRST_FILE}?lines=5"
hr "10) /log/*name/*file?lines=999999 (clamp -> 50000)"
req GET "${BASE_URL}/log/${LOGDIR_NAME}/${FIRST_FILE}?lines=999999"
fi
hr "11) Fehlerfall: Unbekanntes Logverzeichnis (404 JSON)"
req GET "${BASE_URL}/log/___does_not_exist___"
hr "12) Fehlerfall: Unbekannte Route (404 JSON)"
req GET "${BASE_URL}/___nope___"
hr "13) Fehlerfall: Directory Traversal (400 JSON)"
req GET "${BASE_URL}/log/${LOGDIR_NAME}/../etc/passwd"
echo
echo "FERTIG. Wenn ACL oder Token greift, kannst du bei 401/403 sehen, ob es wie erwartet arbeitet."
echo "Tipp: fuer Token Test export TOKEN_HEADER='X-API-Token: DEIN_TOKEN' setzen."