Один бинарь на stdlib, ноль зависимостей: подкоманды serve, vapid, version; статика из embed с ETag и Cache-Control: no-cache; /healthz; заголовки безопасности ADR-021 на всех ответах, включая ошибки; лимит тела 32 КиБ. Путь в логе — в percent-форме: подделать строку журнала запросом нельзя. Ни IP, ни ника, ни query в логах нет. Клиент — знак «Скобы» и слово bare: без script-тегов, inline-стилей и внешних ресурсов. ADR-025: go:embed не выходит за каталог пакета, поэтому объявление статики живёт в корне модуля, а клиент остаётся в web/. ADR-026: 413 отдаётся кодом too_large, неподдерживаемый метод — 404; оба добавлены в перечень protocol.md. Сервер: пользователь bare, /opt/bare, /var/lib/bare, /etc/bare/env 0600, systemd-юнит, nginx с сертификатом certbot (плагин nginx, как у соседей). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015DbCjVfTFq4ZFG8juD45YJ
13 lines
479 B
Go
13 lines
479 B
Go
// Package bare встраивает клиентскую статику в бинарь.
|
|
//
|
|
// Директива go:embed видит только каталог своего пакета и ниже, поэтому
|
|
// объявление живёт в корне модуля, а не в internal/web (ADR-025).
|
|
package bare
|
|
|
|
import "embed"
|
|
|
|
// Web — каталог web/ как есть: index.html, app.css, manifest.json, sw.js, icons/.
|
|
//
|
|
//go:embed web
|
|
var Web embed.FS
|