diff --git a/internal/web/actions/default/servers/server/settings/websocket/index.go b/internal/web/actions/default/servers/server/settings/websocket/index.go new file mode 100644 index 00000000..cba47a1d --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/websocket/index.go @@ -0,0 +1,113 @@ +package websocket + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" + "github.com/iwind/TeaGo/actions" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { + this.Nav("", "setting", "index") + this.SecondMenu("websocket") +} + +func (this *IndexAction) RunGet(params struct { + ServerId int64 +}) { + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webId"] = webConfig.Id + this.Data["websocketRef"] = webConfig.WebsocketRef + this.Data["websocketConfig"] = webConfig.Websocket + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + WebsocketRefJSON []byte + WebsocketJSON []byte + + Must *actions.Must +}) { + // TODO 检查配置 + + websocketRef := &serverconfigs.HTTPWebsocketRef{} + err := json.Unmarshal(params.WebsocketRefJSON, websocketRef) + if err != nil { + this.ErrorPage(err) + return + } + + websocketConfig := &serverconfigs.HTTPWebsocketConfig{} + err = json.Unmarshal(params.WebsocketJSON, websocketConfig) + if err != nil { + this.ErrorPage(err) + return + } + err = websocketConfig.Init() + if err != nil { + this.ErrorPage(err) + return + } + + // 创建 + handshakeTimeoutJSON, err := json.Marshal(websocketConfig.HandshakeTimeout) + if err != nil { + this.ErrorPage(err) + return + } + + // 创建或修改 + if websocketConfig.Id <= 0 { + createResp, err := this.RPC().HTTPWebsocketRPC().CreateHTTPWebsocket(this.AdminContext(), &pb.CreateHTTPWebsocketRequest{ + HandshakeTimeoutJSON: handshakeTimeoutJSON, + AllowAllOrigins: websocketConfig.AllowAllOrigins, + AllowedOrigins: websocketConfig.AllowedOrigins, + RequestSameOrigin: websocketConfig.RequestSameOrigin, + RequestOrigin: websocketConfig.RequestOrigin, + }) + if err != nil { + this.ErrorPage(err) + return + } + websocketConfig.Id = createResp.WebsocketId + } else { + _, err = this.RPC().HTTPWebsocketRPC().UpdateHTTPWebsocket(this.AdminContext(), &pb.UpdateHTTPWebsocketRequest{ + WebsocketId: websocketConfig.Id, + HandshakeTimeoutJSON: handshakeTimeoutJSON, + AllowAllOrigins: websocketConfig.AllowAllOrigins, + AllowedOrigins: websocketConfig.AllowedOrigins, + RequestSameOrigin: websocketConfig.RequestSameOrigin, + RequestOrigin: websocketConfig.RequestOrigin, + }) + } + + websocketRef.WebsocketId = websocketConfig.Id + websocketRefJSON, err := json.Marshal(websocketRef) + if err != nil { + this.ErrorPage(err) + return + } + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebWebsocket(this.AdminContext(), &pb.UpdateHTTPWebWebsocketRequest{ + WebId: params.WebId, + WebsocketJSON: websocketRefJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/websocket/init.go b/internal/web/actions/default/servers/server/settings/websocket/init.go new file mode 100644 index 00000000..92f67b30 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/websocket/init.go @@ -0,0 +1,19 @@ +package websocket + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/serverutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/helpers" + "github.com/iwind/TeaGo" +) + +func init() { + TeaGo.BeforeStart(func(server *TeaGo.Server) { + server. + Helper(helpers.NewUserMustAuth()). + Helper(serverutils.NewServerHelper()). + Prefix("/servers/server/settings/websocket"). + GetPost("", new(IndexAction)). + GetPost("/createOrigin", new(CreateOriginAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/serverutils/server_helper.go b/internal/web/actions/default/servers/serverutils/server_helper.go index d9b30fc1..b93bf2bf 100644 --- a/internal/web/actions/default/servers/serverutils/server_helper.go +++ b/internal/web/actions/default/servers/serverutils/server_helper.go @@ -152,7 +152,6 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "url": "/servers/server/settings/serverNames?serverId=" + serverIdString, "isActive": secondMenuItem == "serverName", }) - menuItems = append(menuItems, maps.Map{ "name": "HTTP", "url": "/servers/server/settings/http?serverId=" + serverIdString, @@ -163,84 +162,81 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "url": "/servers/server/settings/https?serverId=" + serverIdString, "isActive": secondMenuItem == "https", }) - menuItems = append(menuItems, maps.Map{ "name": "Web设置", "url": "/servers/server/settings/web?serverId=" + serverIdString, "isActive": secondMenuItem == "web", }) - menuItems = append(menuItems, maps.Map{ "name": "反向代理", "url": "/servers/server/settings/reverseProxy?serverId=" + serverIdString, "isActive": secondMenuItem == "reverseProxy", }) - menuItems = append(menuItems, maps.Map{ "name": "路径规则", "url": "/servers/server/settings/locations?serverId=" + serverIdString, "isActive": secondMenuItem == "locations", }) - + menuItems = append(menuItems, maps.Map{ + "name": "重写规则", + "url": "/servers/server/settings/rewrite?serverId=" + serverIdString, + "isActive": secondMenuItem == "rewrite", + }) menuItems = append(menuItems, maps.Map{ "name": "访问控制", "url": "/servers/server/settings/access?serverId=" + serverIdString, "isActive": secondMenuItem == "access", }) - menuItems = append(menuItems, maps.Map{ "name": "WAF", "url": "/servers/server/settings/waf?serverId=" + serverIdString, "isActive": secondMenuItem == "waf", }) - menuItems = append(menuItems, maps.Map{ "name": "缓存", "url": "/servers/server/settings/cache?serverId=" + serverIdString, "isActive": secondMenuItem == "cache", }) - menuItems = append(menuItems, maps.Map{ "name": "-", "url": "", "isActive": false, }) - menuItems = append(menuItems, maps.Map{ "name": "字符编码", "url": "/servers/server/settings/charset?serverId=" + serverIdString, "isActive": secondMenuItem == "charset", }) - menuItems = append(menuItems, maps.Map{ "name": "访问日志", "url": "/servers/server/settings/accessLog?serverId=" + serverIdString, "isActive": secondMenuItem == "accessLog", }) - menuItems = append(menuItems, maps.Map{ "name": "统计", "url": "/servers/server/settings/stat?serverId=" + serverIdString, "isActive": secondMenuItem == "stat", }) - menuItems = append(menuItems, maps.Map{ "name": "Gzip压缩", "url": "/servers/server/settings/gzip?serverId=" + serverIdString, "isActive": secondMenuItem == "gzip", }) - menuItems = append(menuItems, maps.Map{ "name": "特殊页面", "url": "/servers/server/settings/pages?serverId=" + serverIdString, "isActive": secondMenuItem == "pages", }) - menuItems = append(menuItems, maps.Map{ "name": "HTTP Header", "url": "/servers/server/settings/headers?serverId=" + serverIdString, "isActive": secondMenuItem == "header", }) + menuItems = append(menuItems, maps.Map{ + "name": "Websocket", + "url": "/servers/server/settings/websocket?serverId=" + serverIdString, + "isActive": secondMenuItem == "websocket", + }) } else if serverConfig.IsTCP() { menuItems = append(menuItems, maps.Map{ "name": "TCP", diff --git a/internal/web/import.go b/internal/web/import.go index 712327bc..082466af 100644 --- a/internal/web/import.go +++ b/internal/web/import.go @@ -45,12 +45,15 @@ import ( _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/location" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/pages" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/reverseProxy" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/rewrite" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/stat" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/waf" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/web" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/websocket" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/origins" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/pages" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/reverseProxy" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/rewrite" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/serverNames" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/stat" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/tcp" @@ -59,6 +62,7 @@ import ( _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/unix" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/waf" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/web" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/websocket" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/stat" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/ui" diff --git a/web/views/@default/servers/server/settings/websocket/index.html b/web/views/@default/servers/server/settings/websocket/index.html new file mode 100644 index 00000000..33870195 --- /dev/null +++ b/web/views/@default/servers/server/settings/websocket/index.html @@ -0,0 +1,11 @@ +{$layout} + +{$template "/left_menu"} + +