0.18.0
Итерация 14 плана аудита: API-консистентность — ошибки, IDOR-edge, валидация.
Added
- Единый
writeJSONError(w, code, msg)во всех handlers: формат{"error":"msg"}, Content-Type, X-API-Version - Helpers
writeJSON,writeJSONStatusдля единообразных JSON-ответов - Helpers
nilSlice[T],nilPtrSlice[T]— list-эндпоинты всегда возвращают[]вместоnull - Константа
APIVersion = "1", заголовокX-API-Versionво всех ответах - Ownership checks для cron/heartbeat/email:
requireCronInAgent,requireHeartbeatInAgent,requireEmailInAgent Store.CountAdmins(ctx)— метод интерфейса + реализации (SQLite, PG, Dual)middleware/maxbody.go: JSON body size limit 10MB черезhttp.MaxBytesReader- Валидация username: regex
^[a-zA-Z0-9_-]{3,32}$в Create User и Update User - 17 unit-тестов в
internal/server/handler/iter14_test.go
Changed
agentNameRegex:^[a-zA-Z]+$→^[\p{L}\p{N} _-]{1,64}$— unicode, цифры, пробелыSetAdmin: запрет на изменение собственного admin-флага; гарантия минимум одного админа (409 при последнем)- Все handlers переведены с
http.Error/inline JSON наwriteJSONError/writeJSON/writeJSONStatus - Cron Delete/Toggle: теперь проверяют agentID ownership (раньше.Delete не проверял agentID)
- Heartbeat Delete/Toggle: теперь проверяют agentID ownership
- Email Get/Update/Delete/Test: теперь проверяют agentID ownership
router.go: подключёнmiddleware.MaxBodySizeглобально