refactor(admin): удалить мёртвый updater/config-write API и его UI

Маршруты, операциями которых продукт не владеет, отвечали заглушкой
"managed by orchestrator" или пустым списком:

  POST /hysteria2ChangeVersion
  GET  /listRelease
  POST /config/updateHysteria2Config
  POST /config/importHysteria2Config
  POST /config/restartServer
  POST /config/uploadCertFile
  GET  /config/hysteria2AcmePath   (не имел потребителя вовсе)

Они удалены, а не оставлены заглушками. Причины две. API-контракт не
должен обещать updater, которого у продукта принципиально нет:
маршрут, всегда возвращающий отказ, вводит в заблуждение. И это лишняя
attack surface плюс технический мусор от прежней архитектуры.

Вместе с маршрутами убраны мёртвые сервисы (StartHysteria2,
StopHysteria2, RestartHysteria2, SetHysteria2Config,
UpdateHysteria2Config, GetAuthHttpUrl, Hysteria2AcmePath), неиспользуемые
типы и клиентские функции фронтенда.

Отдельно - кнопки. "Перезапустить панель" и загрузка сертификатов
обращались к заглушкам, то есть гарантированно возвращали ошибку.
Кнопка, которая всегда падает, - не точка расширения на будущее, а
дефект UX. Удалены вместе со строками i18n.

Конфигурация Hysteria остаётся доступной панели на чтение и на
выгрузку: getHysteria2Config и exportHysteria2Config.
This commit is contained in:
2026-08-27 12:15:53 +05:00
parent 10d2c48cf0
commit 19ffc80130
15 changed files with 20 additions and 357 deletions
+5 -5
View File
@@ -5,6 +5,11 @@ import (
"hy2xs-admin/controller"
)
// Серверный конфиг Hysteria в HY2XS доступен только на чтение и на выгрузку:
// его владелец — install-оркестратор. Маршруты записи (updateHysteria2Config,
// importHysteria2Config), перезапуска панели и загрузки сертификатов удалены,
// а не оставлены заглушками: маршрут, который всегда отвечает «feature
// disabled», вводит в заблуждение и остаётся точкой входа.
func initConfigRouter(configApi *gin.RouterGroup) {
config := configApi.Group("/config")
{
@@ -12,13 +17,8 @@ func initConfigRouter(configApi *gin.RouterGroup) {
config.GET("/getConfig", controller.GetConfig)
config.POST("/listConfig", controller.ListConfig)
config.GET("/getHysteria2Config", controller.GetHysteria2Config)
config.POST("/updateHysteria2Config", controller.UpdateHysteria2Config)
config.POST("/exportHysteria2Config", controller.ExportHysteria2Config)
config.POST("/importHysteria2Config", controller.ImportHysteria2Config)
config.POST("/exportConfig", controller.ExportConfig)
config.POST("/importConfig", controller.ImportConfig)
config.GET("/hysteria2AcmePath", controller.Hysteria2AcmePath)
config.POST("/restartServer", controller.RestartServer)
config.POST("/uploadCertFile", controller.UploadCertFile)
}
}
+4 -8
View File
@@ -5,17 +5,13 @@ import (
"hy2xs-admin/controller"
)
// Панель HY2XS не управляет жизненным циклом Hysteria: установка, обновление
// и перезапуск выполняются install-оркестратором. Маршрутов updater'а здесь
// нет намеренно — API-контракт не должен обещать операцию, которой у продукта
// принципиально не существует, и не должен нести лишнюю attack surface.
func initHysteria2MachineAuthRouter(hysteria2Api *gin.RouterGroup) {
hysteria2 := hysteria2Api.Group("/hysteria2")
{
hysteria2.POST("/auth", controller.Hysteria2Auth)
}
}
func initHysteria2Router(hysteria2Api *gin.RouterGroup) {
hysteria2 := hysteria2Api.Group("/hysteria2")
{
hysteria2.POST("/hysteria2ChangeVersion", controller.Hysteria2ChangeVersion)
hysteria2.GET("/listRelease", controller.ListRelease)
}
}
-1
View File
@@ -65,6 +65,5 @@ func Router(router *gin.Engine, huiWebContext *string) {
initDashboardRouter(huiAdminApi)
initPeerRouter(huiAdminApi)
initConfigRouter(huiAdminApi)
initHysteria2Router(huiAdminApi)
initLogRouter(huiAdminApi)
}