7
7
8
8
set -euo pipefail
9
9
10
+ trap ' kill 0' SIGINT
11
+
10
12
status=0
11
13
green=' \e[1;32m' ; red=' \e[1;31m' ; cyan=' \e[1;36m' ; yellow=' \e[1;33m' ; reset=' \e[0m'
12
14
user_agent=" Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
@@ -21,9 +23,11 @@ while IFS=: read -r filepath url; do
21
23
(
22
24
code=$( curl -k -gsLm30 --retry 3 --retry-delay 3 --retry-connrefused -o /dev/null -w " %{http_code}" -I " $url " ) || code=000
23
25
if [ " $code " -lt 200 ] || [ " $code " -ge 400 ]; then
26
+ sleep 1
24
27
code=$( curl -k -gsLm30 --retry 3 --retry-delay 3 --retry-connrefused -o /dev/null -w " %{http_code}" -r 0-0 -A " $user_agent " " $url " ) || code=000
25
28
fi
26
29
if [ " $code " -lt 200 ] || [ " $code " -ge 400 ]; then
30
+ sleep 1
27
31
request_id=$( curl -sS -G -H ' Accept: application/json' \
28
32
--data-urlencode " host=$url " \
29
33
--data-urlencode " max_nodes=1" \
@@ -45,11 +49,16 @@ while IFS=: read -r filepath url; do
45
49
done
46
50
fi
47
51
fi
52
+ # Treat Cloudflare JS-challenge and rate-limit as success.
53
+ if [[ " $code " == " 403" || " $code " == " 429" || " $code " == " 503" ]]; then
54
+ printf " ${yellow} WARN %s${reset} ${cyan} %s${reset} %s\n" " $code " " $url " " $filepath "
55
+ exit 0
56
+ fi
48
57
if [ " $code " -lt 200 ] || [ " $code " -ge 400 ]; then
49
- printf " ${red} %s${reset} ${yellow} %s${reset} %s\n" " $code " " $url " " $filepath " >&2
58
+ printf " ${red} FAIL %s${reset} ${yellow} %s${reset} %s\n" " $code " " $url " " $filepath " >&2
50
59
exit 1
51
60
else
52
- printf " ${green} %s${reset} ${cyan} %s${reset} %s\n" " $code " " $url " " $filepath "
61
+ printf " ${green} OK %s${reset} ${cyan} %s${reset} %s\n" " $code " " $url " " $filepath "
53
62
exit 0
54
63
fi
55
64
) &
@@ -58,7 +67,7 @@ while IFS=: read -r filepath url; do
58
67
sleep 1
59
68
done
60
69
done < <(
61
- pattern=' (?!.*@lint-ignore)(?<!git\+)(?<!\$\{)https?://(?![^\s<>\")]*[<>\{\}\$])[^[:space:]<>")\[\]\\]+'
70
+ pattern=' (?!.*@lint-ignore)(?<!git\+)(?<!\$\{)https?://(?![^/]*@)(?![^ \s<>\")]*[<>\{\}\$])[^[:space:]<>")\[\]\\| ]+'
62
71
excludes=(
63
72
' :(exclude,glob)**/.*'
64
73
' :(exclude,glob)**/*.lock'
@@ -77,6 +86,7 @@ while IFS=: read -r filepath url; do
77
86
git --no-pager grep --no-color -I -P -o " $pattern " -- " ${paths[@]} " " ${excludes[@]} " \
78
87
| sed -E ' s/[^/[:alnum:]]+$//' \
79
88
| grep -Ev ' ://(0\.0\.0\.0|127\.0\.0\.1|localhost)([:/])' \
89
+ | grep -Ev ' ://[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' \
80
90
| grep -Ev ' fwdproxy:8080' \
81
91
|| true
82
92
)
0 commit comments