-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.sh
96 lines (86 loc) · 2.13 KB
/
main.sh
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
#shellcheck shell=bash
. ./util.sh
listen() {
read -r line
request=($line)
unset headers
declare -A headers
while read -r line; do
if [ "$line" = "$(echo -en "0d0a" | xxd -r -p)" ]; then
break
fi
header_parse "$line"
done
case "${request[1]}" in
/)
kbused=$(pmap -x $$ | tail -n 1 | awk '{print $3}')
content=$(
jq -r -n --argjson versions '["v3"]' \
--arg language "$(ps -p $$ -ocomm=)" \
--arg memoryUsage "$((kbused / 1000))" \
--argjson project "$(
jq -r -n --arg name "bare-server-sh" \
--arg description "TOMPHTTP bash Bare Server" \
--arg repository "https://github.com/CoolElectronics/bare-server-sh" \
--arg version "1.0.0" \
'$ARGS.named'
)" \
'$ARGS.named' |
tohex
)
unset headers
declare -A headers
response 200 "$content" >&3
;;
/v3*)
bareURL=${headers[x-bare-url]}
if [ -n "$bareURL" ]; then
# create a pipefd
exec {stderr}<> <(:)
data=$(curl -s -v "$bareURL" 2>&$stderr | tohex)
unset headers
declare -A headers
while read -r line; do
line=${line//$'\r'/}
case "$line" in
\<*)
line=${line:2}
if [ -n "$line" ]; then
case "$line" in
*:*)
header_parse "$line"
;;
esac
else
break
fi
;;
esac
done <&$stderr
headersobj=$(
for i in "${!headers[@]}"; do
echo "$i"
echo "${headers[$i]}"
done |
jq -n -R 'reduce inputs as $i ({}; . + { ($i): (input|(tonumber? // .)) })' | tr -d "\n"
)
unset headers
declare -A headers
headers[X-Bare-Headers]=$headersobj
headers[X-Bare-Status]=200
headers[X-Bare-Status-Text]="OK"
response 200 "$data" >&3
else
unset headers
declare -A headers
resp=$(echo -en "qhar" | tohex)
response 200 "$resp" >&3
fi
;;
*)
unset headers
declare -A headers
response 200 "$(echo -e "404" | tohex)" >&3
;;
esac
}