battle-cats-normal-rolls-git
Package builds from its own GitHub source using Cargo; the flagged 'external download' at line 80 is just a curl health-check inside an inline launcher script (curl -s to localhost), not a remote code download; SKIP checksum on a git source is normal for VCS packages; no obfuscation, exfiltration, or untrusted prebuilt binaries present.
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (anthropic/claude-sonnet-4.6) reviewed the full PKGBUILD and judged it LOW (confidence 70%): Package builds from its own GitHub source using Cargo; the flagged 'external download' at line 80 is just a curl health-check inside an inline launcher script (curl -s to localhost), not a remote code download; SKIP checksum on a git source is normal for VCS packages; no obfuscation, exfiltration, or untrusted prebuilt binaries present.
1 higher static finding superseded - not the current verdict (shown for transparency)
external_download_not_in_source
curl/wget fetches a URL on a non-allowlisted host that is not part of source=(), so it is not checksum-verified by makepkg.
-
PKGBUILD:80
until curl -s -o /dev/null -w "%{http_code}" "http://localhost:${PORT}" | grep -qE "200|302|304" 2>/dev/null; do
PKGBUILD
1 offending line(s) highlighted# Maintainer: EduHoff <ehcs.business@proton.me>
pkgname=battle-cats-normal-rolls-git
_pkgname=battle-cats-normal-rolls
pkgver=r38.0b3b9dd
pkgrel=3
pkgdesc="Local Battle Cats normal seed tracking server with high-performance Rust seeker"
arch=('x86_64' 'aarch64')
url="https://github.com/EduHoff/battle-cats-normal-rolls"
license=('AGPL-3.0-or-later')
depends=('gcc-libs' 'glibc' 'curl')
optdepends=('zenity')
makedepends=('git' 'cargo')
provides=("${_pkgname}")
conflicts=("${_pkgname}")
source=("git+${url}.git")
b2sums=('SKIP')
pkgver() {
cd "${_pkgname}"
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
prepare() {
cd "${_pkgname}"
export CARGO_HOME="${srcdir}/cargo-home"
cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"
}
build() {
cd "${_pkgname}"
export CARGO_HOME="${srcdir}/cargo-home"
cargo build --frozen --release
}
check() {
cd "${_pkgname}"
export CARGO_HOME="${srcdir}/cargo-home"
cargo test --frozen
}
package() {
cd "${_pkgname}"
install -d "${pkgdir}/usr/share/webapps/${_pkgname}"
install -d "${pkgdir}/usr/bin"
install -d "${pkgdir}/usr/share/applications"
install -d "${pkgdir}/usr/share/pixmaps"
install -Dm755 "target/release/${_pkgname}" "${pkgdir}/usr/share/webapps/${_pkgname}/${_pkgname}"
cp -r templates "${pkgdir}/usr/share/webapps/${_pkgname}/"
cp -r static "${pkgdir}/usr/share/webapps/${_pkgname}/"
cat <<'EOF' > "${pkgdir}/usr/share/webapps/${_pkgname}/.env"
HOST=0.0.0.0
PORT=3000
EOF
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
install -Dm644 "static/img/normal-cat-ticket.png" "${pkgdir}/usr/share/pixmaps/${_pkgname}.png"
cat <<'EOF' > "${pkgdir}/usr/bin/battle-cats-normal-rolls-run"
#!/bin/bash
echo "=================================================="
echo " BATTLE CATS NORMAL ROLLS LOCAL SERVER "
echo "=================================================="
echo ""
cd "/usr/share/webapps/battle-cats-normal-rolls" || exit
LOCAL_IP=$(ip route get 1.1.1.1 2>/dev/null | grep -oP 'src \K\S+')
[ -z "$LOCAL_IP" ] && LOCAL_IP="127.0.0.1"
PORT=3000
(
echo ":: Waiting for local service initialization..."
until curl -s -o /dev/null -w "%{http_code}" "http://localhost:${PORT}" | grep -qE "200|302|304" 2>/dev/null; do
sleep 0.3
done
echo ":: Server is up and stable! Launching local instance in your browser..."
xdg-open "http://localhost:${PORT}"
) &
echo ":: Starting Rust application stack..."
echo ":: Local Address: http://localhost:${PORT}"
echo ":: Network Access: http://${LOCAL_IP}:${PORT}"
echo ":: To stop the server, simply close this terminal window."
echo "--------------------------------------------------"
if ! ./battle-cats-normal-rolls; then
echo ""
echo "[-] Server crashed or failed to start."
echo ":: Press Enter to close this window."
read -r
fi
EOF
chmod +x "${pkgdir}/usr/bin/battle-cats-normal-rolls-run"
cat <<'EOF' > "${pkgdir}/usr/bin/battle-cats-normal-rolls-launcher"
#!/bin/bash
TERMINALS=('kitty' 'alacritty' 'ghostty' 'foot' 'gnome-terminal' 'konsole' 'xfce4-terminal' 'terminator' 'guake' 'yakuake')
FOUND_TERM=""
for term in "${TERMINALS[@]}"; do
if command -v "$term" &> /dev/null; then
FOUND_TERM="$term"
break
fi
done
if [ -z "$FOUND_TERM" ]; then
if command -v zenity &> /dev/null; then
FOUND_TERM=$(zenity --entry --title="Battle Cats Normal Rolls" --text="Nenhum terminal padrão foi detectado.\nPor favor, digite o comando do seu emulador de terminal:")
fi
if [ -z "$FOUND_TERM" ]; then
exit 1
fi
fi
case "$FOUND_TERM" in
"kitty" | "foot")
$FOUND_TERM /usr/bin/battle-cats-normal-rolls-run
;;
"alacritty" | "ghostty" | "terminator" | "guake" | "yakuake")
$FOUND_TERM -e /usr/bin/battle-cats-normal-rolls-run
;;
"gnome-terminal" | "konsole" | "xfce4-terminal")
$FOUND_TERM -- /usr/bin/battle-cats-normal-rolls-run
;;
*)
$FOUND_TERM -e /usr/bin/battle-cats-normal-rolls-run
;;
esac
EOF
chmod +x "${pkgdir}/usr/bin/battle-cats-normal-rolls-launcher"
cat <<EOF > "${pkgdir}/usr/share/applications/battle-cats-normal-rolls.desktop"
[Desktop Entry]
Version=1.0
Type=Application
Name=Battle Cats Normal Rolls
Comment=Launch the local normal seed tracking engine inside a terminal window
Exec=/usr/bin/battle-cats-normal-rolls-launcher
Icon=battle-cats-normal-rolls
Terminal=false
Categories=Game;Utility;
StartupNotify=true
EOF
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-10-02 00:00:32 | Low | 2 |
| 2026-10-01 00:02:06 | Low | 2 |
| 2026-09-30 00:20:07 | Low | 2 |
| 2026-09-29 00:07:46 | Low | 2 |
| 2026-09-28 00:28:32 | Low | 2 |
| 2026-09-27 00:07:07 | Low | 2 |
| 2026-09-26 00:12:15 | Low | 2 |
| 2026-09-25 00:03:36 | Low | 2 |
| 2026-09-24 00:24:14 | Low | 2 |
| 2026-09-23 00:28:13 | Low | 2 |
| 2026-09-22 00:15:14 | Low | 2 |
| 2026-09-21 00:26:32 | Low | 2 |
| 2026-09-20 00:25:31 | Low | 2 |
| 2026-09-19 00:25:36 | Low | 2 |
| 2026-09-18 00:17:11 | Low | 2 |
| 2026-09-17 00:27:14 | Low | 2 |
| 2026-09-16 00:03:17 | Low | 2 |
| 2026-09-15 00:25:31 | Low | 2 |
| 2026-09-14 00:27:57 | Low | 2 |
| 2026-09-13 00:19:54 | Low | 2 |