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:
estorozhenko
2026-09-07 13:55:45 +00:00
parent 30121869f2
commit c8d490d1c6
10 changed files with 340 additions and 2 deletions
+50
View File
@@ -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())
+36
View File
@@ -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"