/
codespawn
/
tgstream
Обзор
Документация
Войти
/
codespawn
/
tgstream
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
16
CI/CD
Аналитика
Безопасность
master
internal/adapter/httpserver/name.go
36 строк
2 KB
codespawn
Запрос на слияние 'feat/websource-edge-docs' (
#3
) из feat/websource-edge-docs в master
16 июл 2026, 07:24
Верифицирован
16 июл 2026, 07:24
fb8bdd6
Код
Авторство
О чём код?
// Package httpserver — driving-адаптер: HTTP-роутинг, валидация имени, // ETag/304, заголовки кэширования и content negotiation (PROTOCOL.md §B, // AGENTS.md §8). Зависит от use-case (FeedFetcher) и Formatter'а, но НЕ // от конкретных реализаций — тестируется на фейках. package httpserver import ( "errors" "regexp" "strings" ) // ErrInvalidName — некорректное имя канала (маппится в 400 Bad Request, PROTOCOL.md §B.5). var ErrInvalidName = errors.New("invalid channel name") // validNameRe — шаблон feed-id: латиница/цифры/дефис/подчёркивание, длина 1–64. // Раньше был Telegram-username-специфичным (^[a-z0-9_]{5,64}$), но websource // принимает произвольные feed-id из DSL-конфигов (напр. "hacker-news", "my_blog", // mixed-case). Защита: нет слэшей/точек/пробелов → нет path-traversal, нет // спецсимволов, ломающих URL. var validNameRe = regexp.MustCompile(`^[a-zA-Z0-9_-]{1,64}$`) // normalizeName приводит сырой путь к каноничному feed-id: обрезает пробелы. // Раньше также убирала ведущий '@' и lowercase'ила (Telegram-специфика), но это // портило mixed-case id произвольных источников — теперь только trim. func normalizeName(raw string) string { return strings.TrimSpace(raw) } // validateName проверяет КАНОНИЧНОЕ (уже нормализованное) имя по шаблону feed-id. func validateName(name string) error { if !validNameRe.MatchString(name) { return ErrInvalidName } return nil }