Scripts folder

This commit is contained in:
Nick Ortakales 2025-03-03 21:26:50 -08:00
parent 677ff1d7c7
commit d26d75d5d6
4 changed files with 2 additions and 2 deletions

32
scripts/build_directories.sh Executable file
View file

@ -0,0 +1,32 @@
#!/usr/bin/env bash
echo "Building directory markdown files for known tonies"
while read -r LANG_DIR; do
NFC_FILES=()
while IFS= read -r -d '' NFC_FILE; do
NFC_FILES+=("${NFC_FILE}")
done < <(find "${LANG_DIR}" -type f -name "*.nfc" -print0 | sort -z)
FOLDER=$(basename "${LANG_DIR}")
NFC_FILES_COUNT=${#NFC_FILES[@]}
echo "${FOLDER} has ${NFC_FILES_COUNT}"
{
echo "# ${FOLDER} Tonies (${NFC_FILES_COUNT} files)"
echo ""
echo "*Note: this file is automatically generated, do not edit manually*"
echo ""
echo "| Folder | Filename |"
echo "|--------|----------|"
} > "${LANG_DIR}/README.md"
for FILE_PATH_ABS in "${NFC_FILES[@]}"; do
FILE_NAME=$(basename "$FILE_PATH_ABS")
FILE_PATH_REL=${FILE_PATH_ABS#"${LANG_DIR}/"}
FILE_PATH_REL_ENC=$(echo "$FILE_PATH_REL" | awk '{gsub(/ /, "%20"); print}')
FOLDER_NAME_REL=$(dirname "${FILE_PATH_REL}")
printf "| %s | [%s](%s) |\n" "${FOLDER_NAME_REL}" "${FILE_NAME}" "${FILE_PATH_REL_ENC}" >> "${LANG_DIR}/README.md"
done
done < <(find "." -maxdepth 1 -type d ! -name ".*")

79
scripts/validate_files.sh Executable file
View file

@ -0,0 +1,79 @@
#!/usr/bin/env bash
ERROR_FOUND=0
REQUIRED_PATTERNS=(
"^Filetype: Flipper NFC device$"
"^Version: 4$"
"^Device type: SLIX$"
"^UID:( [A-F0-9]{2}){8}$"
"^DSFID: 00$"
"^AFI: 00$"
"^IC Reference: 03$"
"^Lock DSFID: false$"
"^Lock AFI: false$"
"^Block Count: 8$"
"^Block Size: 04$"
"^Data Content:( [A-F0-9]{2}){32}$"
"^Security Status: 00 00 00 00 00 00 00 00$"
"^Capabilities: Default$"
"^Password Privacy: 7F FD 6E 5B$"
"^Password Destroy: 0F 0F 0F 0F$"
"^Password EAS: 00 00 00 00$"
"^Privacy Mode: false$"
"^Lock EAS: false$"
)
FORBIDDEN_PATTERNS=(
# This showed up in Unleashed firmware, see https://github.com/nortakales/flipper-zero-tonies/pull/82
"Subtype: ([0-9]){2}"
)
FILE_AND_DIR_ALLOWED_CHARACTERS="A-Za-z0-9().,!%&+ -";
FILE_AND_DIR_REGEX="^\.[$FILE_AND_DIR_ALLOWED_CHARACTERS/]+\/[$FILE_AND_DIR_ALLOWED_CHARACTERS]+\.nfc$"
# Use process substitution so that ERROR_FOUND is updated in the main shell.
while read -r filename; do
content=$(cat "$filename")
if ! echo "$filename" | awk "/$FILE_AND_DIR_REGEX/ { found=1 } END { exit !found }"; then
echo "$filename"
echo " Filename has invalid characters or missing .nfc extension. Allowed characters are $FILE_AND_DIR_ALLOWED_CHARACTERS"
ERROR_FOUND=1
fi
for pattern in "${REQUIRED_PATTERNS[@]}"; do
if ! echo "$content" | awk "/$pattern/ { found=1 } END { exit !found }"; then
echo "$filename"
echo " Missing pattern: $pattern"
ERROR_FOUND=1
fi
done
for pattern in "${FORBIDDEN_PATTERNS[@]}"; do
if echo "$content" | awk "/$pattern/ { found=1 } END { exit !found }"; then
echo "$filename"
echo " Forbidden pattern found: $pattern"
ERROR_FOUND=1
fi
done
# The likelihood of two blocks of 00 in data content is almost impossible,
# so use that as a check for when the full data is not read
if echo "$content" | awk '/Data Content:( [A-F0-9]{2})* 00 00( [A-F0-9]{2})*/ { found=1 } END { exit !found }'; then
echo "$filename"
echo " Full data not read"
ERROR_FOUND=1
fi
# Not necessarily going to cause issues, but keep line endings the same for consistency
if echo "$content" | awk '/\r/ { found=1 } END { exit !found }'; then
echo "$filename"
echo " Has carriage return characters"
ERROR_FOUND=1
fi
done < <(find . -type f -name "*.nfc")
exit $ERROR_FOUND