Files
framebridge/source/sources/original-asus/fbterm/bin/fbx
T

124 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
umask 077
ROOT="${FBTERM_ROOT:-$HOME/.local/share/framebridge/fbterm}"
LIB="$ROOT/library"
JOBS="$ROOT/jobs"
valid() {
[[ "$1" =~ ^[A-Za-z0-9._-]+$ ]]
}
secret_guard() {
grep -Eqi \
'BEGIN .*PRIVATE KEY|rclone\.conf|client_secret|access_token|refresh_token|password[[:space:]]*=|token[[:space:]]*=|cookie[[:space:]]*=' \
"$1"
}
case "${1:-}" in
list)
mkdir -p "$LIB"
find "$LIB" -maxdepth 1 -type f -name '*.sh' -printf '%f\n' |
sed 's/\.sh$//' | sort
;;
adopt)
job="${2:-}"
name="${3:-}"
valid "$job" && valid "$name" || {
echo 'FBX_ERROR=INVALID_NAME'
exit 64
}
src="$JOBS/$job/command.bash"
dst="$LIB/$name.sh"
[ -f "$src" ] || {
echo 'FBX_ERROR=JOB_COMMAND_NOT_FOUND'
exit 66
}
[ ! -e "$dst" ] || {
echo 'FBX_ERROR=LIBRARY_NAME_EXISTS'
exit 73
}
cp -p "$src" "$dst"
chmod 600 "$dst"
sha256sum "$dst" | awk '{print $1}' > "$LIB/$name.sha256"
printf '%s\n' "$job" > "$LIB/$name.source-job"
echo "FBX_ADOPT=PASS NAME=$name JOB=$job SHA256=$(cat "$LIB/$name.sha256")"
;;
hash)
name="${2:-}"
valid "$name" || exit 64
file="$LIB/$name.sh"
[ -f "$file" ] || exit 66
sha256sum "$file"
;;
show|run)
action="$1"
name="${2:-}"
valid "$name" || {
echo 'FBX_ERROR=INVALID_NAME'
exit 64
}
file="$LIB/$name.sh"
hashfile="$LIB/$name.sha256"
[ -f "$file" ] && [ -f "$hashfile" ] || {
echo 'FBX_ERROR=LIBRARY_ITEM_NOT_FOUND'
exit 66
}
expected="$(cat "$hashfile")"
actual="$(sha256sum "$file" | awk '{print $1}')"
[ "$actual" = "$expected" ] || {
echo 'FBX_ERROR=HASH_MISMATCH'
exit 74
}
if secret_guard "$file"; then
echo 'FBX_ERROR=POSSIBLE_SECRET_REFUSE_DISPLAY'
exit 77
fi
echo
echo "========== FBX SCRIPT: $name =========="
echo "SHA256=$actual"
echo
cat "$file"
echo
echo "========== END FBX SCRIPT =========="
echo
[ "$action" = show ] && exit 0
bash --noprofile --norc "$file"
rc=$?
echo
echo "========== FBX RESULT: $name EXIT=$rc =========="
exit "$rc"
;;
status)
echo "FBX_ROOT=$ROOT"
echo "FBX_LIBRARY=$LIB"
echo "FBX_ITEMS=$(find "$LIB" -maxdepth 1 -type f -name '*.sh' | wc -l)"
;;
*)
echo 'USAGE: fbx {status|list|adopt JOB NAME|show NAME|run NAME|hash NAME}'
exit 64
;;
esac