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:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,6 +65,5 @@ func Router(router *gin.Engine, huiWebContext *string) {
|
||||
initDashboardRouter(huiAdminApi)
|
||||
initPeerRouter(huiAdminApi)
|
||||
initConfigRouter(huiAdminApi)
|
||||
initHysteria2Router(huiAdminApi)
|
||||
initLogRouter(huiAdminApi)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user