forked from baron/baron-sso
feat(i18n): apply ORY bypass whitelist policy and add error-code tests
This commit is contained in:
98
scripts/verify_userfront_error_i18n.sh
Executable file
98
scripts/verify_userfront_error_i18n.sh
Executable file
@@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
repo_root="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
whitelist_file="$repo_root/userfront/lib/core/constants/error_whitelist.dart"
|
||||
|
||||
extract_internal_codes() {
|
||||
awk '
|
||||
/internalErrorWhitelistMessages/ { in_map=1; next }
|
||||
in_map && /\};/ { in_map=0 }
|
||||
in_map {
|
||||
if (match($0, /'\''([a-z0-9_]+)'\''[[:space:]]*:/, m)) {
|
||||
print m[1]
|
||||
}
|
||||
}
|
||||
' "$whitelist_file"
|
||||
}
|
||||
|
||||
extract_ory_codes() {
|
||||
awk '
|
||||
/oryBypassErrorCodes/ { in_set=1; next }
|
||||
in_set && /\};/ { in_set=0 }
|
||||
in_set {
|
||||
if (match($0, /'\''([a-z0-9_]+)'\''/, m)) {
|
||||
print m[1]
|
||||
}
|
||||
}
|
||||
' "$whitelist_file"
|
||||
}
|
||||
|
||||
extract_toml_section_keys() {
|
||||
local file="$1"
|
||||
local section="$2"
|
||||
awk -v section="$section" '
|
||||
/^[[:space:]]*\[[^]]+\][[:space:]]*$/ {
|
||||
current=$0
|
||||
gsub(/^[[:space:]]*\[/, "", current)
|
||||
gsub(/\][[:space:]]*$/, "", current)
|
||||
in_section=(current == section)
|
||||
next
|
||||
}
|
||||
|
||||
in_section {
|
||||
if (match($0, /^[[:space:]]*([a-zA-Z0-9_]+)[[:space:]]*=/, m)) {
|
||||
print m[1]
|
||||
}
|
||||
}
|
||||
' "$file"
|
||||
}
|
||||
|
||||
check_section_keys() {
|
||||
local expected_keys="$1"
|
||||
local section="$2"
|
||||
local file="$3"
|
||||
local missing
|
||||
|
||||
missing="$(comm -23 \
|
||||
<(printf '%s\n' "$expected_keys" | sed '/^$/d' | sort -u) \
|
||||
<(extract_toml_section_keys "$file" "$section" | sort -u) \
|
||||
)"
|
||||
|
||||
if [[ -n "$missing" ]]; then
|
||||
echo "[FAIL] ${file} -> [${section}] 누락 키:"
|
||||
printf '%s\n' "$missing" | sed 's/^/ - /'
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "[OK] ${file} -> [${section}]"
|
||||
}
|
||||
|
||||
internal_codes="$(extract_internal_codes)"
|
||||
ory_codes="$(extract_ory_codes)"
|
||||
|
||||
if [[ -z "$internal_codes" ]]; then
|
||||
echo "[FAIL] 내부 whitelist 코드를 찾지 못했습니다."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$ory_codes" ]]; then
|
||||
echo "[FAIL] ORY bypass 코드를 찾지 못했습니다."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
files=(
|
||||
"$repo_root/locales/template.toml"
|
||||
"$repo_root/locales/ko.toml"
|
||||
"$repo_root/locales/en.toml"
|
||||
"$repo_root/userfront/assets/translations/template.toml"
|
||||
"$repo_root/userfront/assets/translations/ko.toml"
|
||||
"$repo_root/userfront/assets/translations/en.toml"
|
||||
)
|
||||
|
||||
for file in "${files[@]}"; do
|
||||
check_section_keys "$internal_codes" "msg.userfront.error.whitelist" "$file"
|
||||
check_section_keys "$ory_codes" "msg.userfront.error.ory" "$file"
|
||||
done
|
||||
|
||||
echo "모든 에러 코드 i18n 키 검증이 완료되었습니다."
|
||||
Reference in New Issue
Block a user