From c7520397c3912b3283cd194ce86907f090bf5850 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Fri, 1 Oct 2021 16:24:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=87=AA=E5=8A=A8=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E5=9B=BE=E5=83=8F=E6=96=87=E4=BB=B6=E4=B8=BAWebP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../locationutils/location_helper.go | 6 + .../server/settings/locations/webp/index.go | 60 ++++++++ .../server/settings/locations/webp/init.go | 22 +++ .../servers/server/settings/webp/index.go | 61 ++++++++ .../servers/server/settings/webp/init.go | 19 +++ .../servers/serverutils/server_helper.go | 6 + internal/web/import.go | 2 + web/public/js/components/common/values-box.js | 6 +- .../components/server/http-webp-config-box.js | 133 ++++++++++++++++++ .../server/settings/locations/webp/index.html | 18 +++ .../server/settings/locations/webp/index.js | 3 + .../servers/server/settings/webp/index.html | 13 ++ .../servers/server/settings/webp/index.js | 3 + 13 files changed, 349 insertions(+), 3 deletions(-) create mode 100644 internal/web/actions/default/servers/server/settings/locations/webp/index.go create mode 100644 internal/web/actions/default/servers/server/settings/locations/webp/init.go create mode 100644 internal/web/actions/default/servers/server/settings/webp/index.go create mode 100644 internal/web/actions/default/servers/server/settings/webp/init.go create mode 100644 web/public/js/components/server/http-webp-config-box.js create mode 100644 web/views/@default/servers/server/settings/locations/webp/index.html create mode 100644 web/views/@default/servers/server/settings/locations/webp/index.js create mode 100644 web/views/@default/servers/server/settings/webp/index.html create mode 100644 web/views/@default/servers/server/settings/webp/index.js 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: `
-
+
{{value}}
[修改]
-
+
{{value}} @@ -79,7 +79,7 @@ Vue.component("values-box", {
- \ +
diff --git a/web/public/js/components/server/http-webp-config-box.js b/web/public/js/components/server/http-webp-config-box.js new file mode 100644 index 00000000..134798d0 --- /dev/null +++ b/web/public/js/components/server/http-webp-config-box.js @@ -0,0 +1,133 @@ +Vue.component("http-webp-config-box", { + props: ["v-webp-config", "v-is-location"], + data: function () { + let config = this.vWebpConfig + if (config == null) { + config = { + isPrior: false, + isOn: false, + quality: 50, + minLength: {count: 0, "unit": "kb"}, + maxLength: {count: 0, "unit": "kb"}, + mimeTypes: ["image/*"], + extensions: [".png", ".jpeg", ".jpg"], + conds: null + } + } + + if (config.mimeTypes == null) { + config.mimeTypes = [] + } + if (config.extensions == null) { + config.extensions = [] + } + + return { + config: config, + moreOptionsVisible: false, + quality: config.quality + } + }, + watch: { + quality: function (v) { + let quality = parseInt(v) + if (isNaN(quality)) { + quality = 90 + } else if (quality < 1) { + quality = 1 + } else if (quality > 100) { + quality = 100 + } + this.config.quality = quality + } + }, + methods: { + isOn: function () { + return (!this.vIsLocation || this.config.isPrior) && this.config.isOn + }, + changeExtensions: function (values) { + values.forEach(function (v, k) { + if (v.length > 0 && v[0] != ".") { + values[k] = "." + v + } + }) + this.config.extensions = values + }, + changeMimeTypes: function (values) { + this.config.mimeTypes = values + }, + changeAdvancedVisible: function () { + this.moreOptionsVisible = !this.moreOptionsVisible + }, + changeConds: function (conds) { + this.config.conds = conds + } + }, + template: `
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
是否启用 +
+ + +
+
图片质量 +
+ + % +
+

取值在0到100之间,数值越大生成的图像越清晰,同时文件尺寸也会越大。

+
支持的扩展名 + +

含有这些扩展名的URL将会被转成WebP,不区分大小写。

+
支持的MimeType + +

响应的Content-Type里包含这些MimeType的内容将会被转成WebP。

+
内容最小长度 + +

0表示不限制,内容长度从文件尺寸或Content-Length中获取。

+
内容最大长度 + +

0表示不限制,内容长度从文件尺寸或Content-Length中获取。

+
匹配条件 + +
+
+
` +}) \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/locations/webp/index.html b/web/views/@default/servers/server/settings/locations/webp/index.html new file mode 100644 index 00000000..85b66560 --- /dev/null +++ b/web/views/@default/servers/server/settings/locations/webp/index.html @@ -0,0 +1,18 @@ +{$layout} +{$template "/left_menu"} + +
+ {$template "../location_menu"} + {$template "../left_menu"} + +
+
+ + + + + + +
+
+
\ No newline at end of file diff --git a/web/views/@default/servers/server/settings/locations/webp/index.js b/web/views/@default/servers/server/settings/locations/webp/index.js new file mode 100644 index 00000000..295a9aaf --- /dev/null +++ b/web/views/@default/servers/server/settings/locations/webp/index.js @@ -0,0 +1,3 @@ +Tea.context(function () { + this.success = NotifyReloadSuccess("保存成功") +}) \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/webp/index.html b/web/views/@default/servers/server/settings/webp/index.html new file mode 100644 index 00000000..0133c589 --- /dev/null +++ b/web/views/@default/servers/server/settings/webp/index.html @@ -0,0 +1,13 @@ +{$layout} +{$template "/left_menu"} + +
+
+ + + + + + +
+
\ No newline at end of file diff --git a/web/views/@default/servers/server/settings/webp/index.js b/web/views/@default/servers/server/settings/webp/index.js new file mode 100644 index 00000000..295a9aaf --- /dev/null +++ b/web/views/@default/servers/server/settings/webp/index.js @@ -0,0 +1,3 @@ +Tea.context(function () { + this.success = NotifyReloadSuccess("保存成功") +}) \ No newline at end of file