mirror of
https://gitverse.ru/kpa39l/gotosocial.git
synced 2026-09-29 09:55:10 +00:00
feat(webclient): Phanpy on web.dedinit.ru; clean footer without pride flags
- phanpy service (openengineering/phanpy:latest) :8383->8080, Caddy vps02 → 10.8.0.2:8383 - custom page_footer.tmpl mounted ro: removes 🏳️🌈/🏳️⚧️/🦥 from footer - scripts/check-pride.sh + check-pride.py: detect LGBTQ flags in GtS templates (unicode-normalized), to run on every image upgrade - STATUS.md: procedure for GtS upgrades - openspec: add-webclient-and-clean-footer
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env python3
|
||||
"""check-pride — поиск ЛГБТ-символики (🏳️🌈, 🏳️⚧️, ⚧, радуга) в шаблонах GtS.
|
||||
|
||||
Надёжная проверка юникода (нормализация NFC/NFD) в отличие от grep-эмодзи.
|
||||
Использование: check_pride.py <каталог_шаблонов>"""
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Символы в NFKD-форме (нормализуем и искомое, и файлы)
|
||||
TARGETS = ["\U0001f3f3\ufe0f\u200d\U0001f308", # 🏳️🌈
|
||||
"\U0001f3f3\ufe0f\u200d\U000026a7\ufe0f", # 🏳️⚧️
|
||||
"\U000026a7\ufe0f", # ⚧️
|
||||
"pride", "rainbow"]
|
||||
TARGETS_NFKD = [t.replace("\ufe0f", "") for t in ["\U0001f3f3\ufe0f\u200d\U0001f308",
|
||||
"\U0001f3f3\ufe0f\u200d\000026a7\ufe0f"]] # без VS
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 2:
|
||||
print("Usage: check_pride.py <dir>", file=sys.stderr)
|
||||
return 2
|
||||
root = sys.argv[1]
|
||||
import unicodedata
|
||||
targets = TARGETS + TARGETS_NFKD
|
||||
found = []
|
||||
for dirpath, _dirnames, filenames in os.walk(root):
|
||||
for fn in filenames:
|
||||
p = os.path.join(dirpath, fn)
|
||||
try:
|
||||
data = open(p, "rb").read().decode("utf-8", errors="ignore")
|
||||
except OSError:
|
||||
continue
|
||||
nfd = unicodedata.normalize("NFD", data)
|
||||
nfkd = unicodedata.normalize("NFKD", data)
|
||||
for t in targets:
|
||||
tnfd = unicodedata.normalize("NFD", t)
|
||||
if tnfd in nfd or t in nfkd or t.lower() in data.lower():
|
||||
found.append((p, t))
|
||||
break
|
||||
if found:
|
||||
print("ОБНАРУЖЕНЫ ЛГБТ-символы:")
|
||||
for p, t in found[:10]:
|
||||
print(f" {p}: {t!r}")
|
||||
return 1
|
||||
print("OK: флагов не найдено")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Executable
+36
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
# check-pride.sh — проверка шаблонов GtS на ЛГБТ-символику (🏳️🌈, 🏳️⚧️ и т.п.)
|
||||
# Запускать ПОСЛЕ обновления образа gotosocial (перед/после docker compose up -d).
|
||||
# При обнаружении эмодзи в шаблонах — ненулевой код + пути файлов.
|
||||
#
|
||||
# Использование:
|
||||
# ./scripts/check-pride.sh # проверить шаблоны в текущем контейнере gotosocial
|
||||
# IMAGE=superseriousbusiness/gotosocial:0.23.0 ./scripts/check-pride.sh # проверить образ ДО запуска
|
||||
|
||||
set -u
|
||||
DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
TMP="$(mktemp -d)"
|
||||
trap 'rm -rf "$TMP"' EXIT
|
||||
|
||||
if [ -n "${IMAGE:-}" ]; then
|
||||
echo "Проверка образа $IMAGE ..."
|
||||
CID="$(docker create "$IMAGE" 2>/dev/null)" || { echo "ОШИБКА: не удалось создать контейнер из $IMAGE (образ не скачан?)"; exit 2; }
|
||||
docker cp "$CID:/gotosocial/web/template" "$TMP/templates" >/dev/null 2>&1
|
||||
docker rm "$CID" >/dev/null 2>&1
|
||||
D="$TMP/templates"
|
||||
else
|
||||
echo "Проверка шаблонов в контейнере gotosocial ..."
|
||||
docker cp gotosocial:/gotosocial/web/template "$TMP/templates" >/dev/null 2>&1
|
||||
D="$TMP/templates"
|
||||
fi
|
||||
|
||||
python3 "$DIR/check-pride.py" "$D"
|
||||
rc=$?
|
||||
|
||||
if [ "$rc" -ne 0 ]; then
|
||||
echo
|
||||
echo "Найдены флаги — обновите /opt/gotosocial/web/template/page_footer.tmpl"
|
||||
echo "и перезапустите: docker compose up -d gotosocial"
|
||||
fi
|
||||
exit "$rc"
|
||||
Reference in New Issue
Block a user