diff --git a/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go b/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go index 47ae5122..a7ebad87 100644 --- a/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go +++ b/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go @@ -150,6 +150,12 @@ func (this *LocationHelper) createMenus(serverIdString string, locationIdString "isActive": secondMenuItem == "websocket", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.WebsocketRef != nil && locationConfig.Web.WebsocketRef.IsPrior, }) + menuItems = append(menuItems, maps.Map{ + "name": "WebP", + "url": "/servers/server/settings/locations/webp?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "webp", + "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.WebP != nil && locationConfig.Web.WebP.IsPrior, + }) menuItems = append(menuItems, maps.Map{ "name": "Fastcgi", "url": "/servers/server/settings/locations/fastcgi?serverId=" + serverIdString + "&locationId=" + locationIdString, diff --git a/internal/web/actions/default/servers/server/settings/locations/webp/index.go b/internal/web/actions/default/servers/server/settings/locations/webp/index.go new file mode 100644 index 00000000..3b35f392 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/webp/index.go @@ -0,0 +1,60 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package webp + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao" + "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() { + +} + +func (this *IndexAction) RunGet(params struct { + LocationId int64 +}) { + webConfig, err := dao.SharedHTTPWebDAO.FindWebConfigWithLocationId(this.AdminContext(), params.LocationId) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webId"] = webConfig.Id + this.Data["webpConfig"] = webConfig.WebP + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + WebpJSON []byte + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + var webpConfig = &serverconfigs.WebPImageConfig{} + err := json.Unmarshal(params.WebpJSON, webpConfig) + if err != nil { + this.Fail("参数校验失败:" + err.Error()) + } + + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebWebP(this.AdminContext(), &pb.UpdateHTTPWebWebPRequest{ + WebId: params.WebId, + WebpJSON: params.WebpJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/webp/init.go b/internal/web/actions/default/servers/server/settings/locations/webp/init.go new file mode 100644 index 00000000..3aab4ed2 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/webp/init.go @@ -0,0 +1,22 @@ +package webp + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/configloaders" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/locationutils" + "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(configloaders.AdminModuleCodeServer)). + Helper(locationutils.NewLocationHelper()). + Helper(serverutils.NewServerHelper()). + Data("tinyMenuItem", "webp"). + Prefix("/servers/server/settings/locations/webp"). + GetPost("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/webp/index.go b/internal/web/actions/default/servers/server/settings/webp/index.go new file mode 100644 index 00000000..1abe0541 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/webp/index.go @@ -0,0 +1,61 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package webp + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao" + "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("webp") +} + +func (this *IndexAction) RunGet(params struct { + ServerId int64 +}) { + webConfig, err := dao.SharedHTTPWebDAO.FindWebConfigWithServerId(this.AdminContext(), params.ServerId) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webId"] = webConfig.Id + this.Data["webpConfig"] = webConfig.WebP + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + WebpJSON []byte + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + var webpConfig = &serverconfigs.WebPImageConfig{} + err := json.Unmarshal(params.WebpJSON, webpConfig) + if err != nil { + this.Fail("参数校验失败:" + err.Error()) + } + + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebWebP(this.AdminContext(), &pb.UpdateHTTPWebWebPRequest{ + WebId: params.WebId, + WebpJSON: params.WebpJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/webp/init.go b/internal/web/actions/default/servers/server/settings/webp/init.go new file mode 100644 index 00000000..f0dbd392 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/webp/init.go @@ -0,0 +1,19 @@ +package webp + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/configloaders" + "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(configloaders.AdminModuleCodeServer)). + Helper(serverutils.NewServerHelper()). + Prefix("/servers/server/settings/webp"). + GetPost("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/serverutils/server_helper.go b/internal/web/actions/default/servers/serverutils/server_helper.go index e76140ca..4d0c529f 100644 --- a/internal/web/actions/default/servers/serverutils/server_helper.go +++ b/internal/web/actions/default/servers/serverutils/server_helper.go @@ -322,6 +322,12 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "isActive": secondMenuItem == "websocket", "isOn": serverConfig.Web != nil && serverConfig.Web.WebsocketRef != nil && serverConfig.Web.WebsocketRef.IsOn, }) + menuItems = append(menuItems, maps.Map{ + "name": "WebP", + "url": "/servers/server/settings/webp?serverId=" + serverIdString, + "isActive": secondMenuItem == "webp", + "isOn": serverConfig.Web != nil && serverConfig.Web.WebP != nil && serverConfig.Web.WebP.IsOn, + }) menuItems = append(menuItems, maps.Map{ "name": "Fastcgi", "url": "/servers/server/settings/fastcgi?serverId=" + serverIdString, diff --git a/internal/web/import.go b/internal/web/import.go index 06b44459..05816170 100644 --- a/internal/web/import.go +++ b/internal/web/import.go @@ -82,6 +82,7 @@ import ( _ "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/webp" _ "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" @@ -96,6 +97,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/webp" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/websocket" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/stat" diff --git a/web/public/js/components/common/values-box.js b/web/public/js/components/common/values-box.js index 1168cb0b..70e85990 100644 --- a/web/public/js/components/common/values-box.js +++ b/web/public/js/components/common/values-box.js @@ -66,11 +66,11 @@ Vue.component("values-box", { } }, template: `
| 是否启用 | +
+
+
+
+
+ |
+
| 图片质量 | +
+
+
+ %
+
+ 取值在0到100之间,数值越大生成的图像越清晰,同时文件尺寸也会越大。 + |
+
| 支持的扩展名 | +
+ 含有这些扩展名的URL将会被转成WebP,不区分大小写。 + |
+
| 支持的MimeType | +
+ 响应的Content-Type里包含这些MimeType的内容将会被转成WebP。 + |
+
| 内容最小长度 | +
+ 0表示不限制,内容长度从文件尺寸或Content-Length中获取。 + |
+
| 内容最大长度 | +
+ 0表示不限制,内容长度从文件尺寸或Content-Length中获取。 + |
+
| 匹配条件 | +
+ |
+