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 9a5e457b..6cd3477a 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 @@ -109,6 +109,12 @@ func (this *LocationHelper) createMenus(serverIdString string, locationIdString "isActive": secondMenuItem == "referer", "isOn": locationConfig.Web != nil && locationConfig.Web.Referers != nil && locationConfig.Web.Referers.IsPrior, }) + menuItems = append(menuItems, maps.Map{ + "name": "UA名单", + "url": "/servers/server/settings/locations/userAgent?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "userAgent", + "isOn": locationConfig.Web != nil && locationConfig.Web.UserAgent != nil && locationConfig.Web.UserAgent.IsPrior, + }) menuItems = append(menuItems, maps.Map{ "name": "字符编码", "url": "/servers/server/settings/locations/charset?serverId=" + serverIdString + "&locationId=" + locationIdString, diff --git a/internal/web/actions/default/servers/server/settings/locations/referers/index.go b/internal/web/actions/default/servers/server/settings/locations/referers/index.go index e30aec39..4dbccffe 100644 --- a/internal/web/actions/default/servers/server/settings/locations/referers/index.go +++ b/internal/web/actions/default/servers/server/settings/locations/referers/index.go @@ -1,6 +1,6 @@ // Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. -package uam +package referers import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" diff --git a/internal/web/actions/default/servers/server/settings/locations/referers/init.go b/internal/web/actions/default/servers/server/settings/locations/referers/init.go index f4a1e460..0bb96132 100644 --- a/internal/web/actions/default/servers/server/settings/locations/referers/init.go +++ b/internal/web/actions/default/servers/server/settings/locations/referers/init.go @@ -1,4 +1,4 @@ -package uam +package referers import ( "github.com/TeaOSLab/EdgeAdmin/internal/configloaders" diff --git a/internal/web/actions/default/servers/server/settings/locations/userAgent/index.go b/internal/web/actions/default/servers/server/settings/locations/userAgent/index.go new file mode 100644 index 00000000..494079ac --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/userAgent/index.go @@ -0,0 +1,62 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package useragent + +import ( + "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("userAgent") +} + +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 + + var userAgentConfig = webConfig.UserAgent + if userAgentConfig == nil { + userAgentConfig = serverconfigs.NewUserAgentConfig() + } + + this.Data["userAgentConfig"] = userAgentConfig + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + UserAgentJSON []byte + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + defer this.CreateLogInfo("修改Web %d User-Agent设置", params.WebId) + + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebUserAgent(this.AdminContext(), &pb.UpdateHTTPWebUserAgentRequest{ + HttpWebId: params.WebId, + UserAgentJSON: params.UserAgentJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/userAgent/init.go b/internal/web/actions/default/servers/server/settings/locations/userAgent/init.go new file mode 100644 index 00000000..debd17be --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/userAgent/init.go @@ -0,0 +1,22 @@ +package useragent + +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", "userAgent"). + Prefix("/servers/server/settings/locations/userAgent"). + GetPost("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/referers/index.go b/internal/web/actions/default/servers/server/settings/referers/index.go index 60049a43..1aa6f3ae 100644 --- a/internal/web/actions/default/servers/server/settings/referers/index.go +++ b/internal/web/actions/default/servers/server/settings/referers/index.go @@ -1,6 +1,6 @@ // Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. -package uam +package referers import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" diff --git a/internal/web/actions/default/servers/server/settings/referers/init.go b/internal/web/actions/default/servers/server/settings/referers/init.go index 4ecb4874..8dcab903 100644 --- a/internal/web/actions/default/servers/server/settings/referers/init.go +++ b/internal/web/actions/default/servers/server/settings/referers/init.go @@ -1,4 +1,4 @@ -package uam +package referers import ( "github.com/TeaOSLab/EdgeAdmin/internal/configloaders" diff --git a/internal/web/actions/default/servers/server/settings/userAgent/index.go b/internal/web/actions/default/servers/server/settings/userAgent/index.go new file mode 100644 index 00000000..0a82053a --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/userAgent/index.go @@ -0,0 +1,64 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package useragent + +import ( + "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("userAgent") +} + +func (this *IndexAction) RunGet(params struct { + ServerId int64 +}) { + this.Data["serverId"] = params.ServerId + + webConfig, err := dao.SharedHTTPWebDAO.FindWebConfigWithServerId(this.AdminContext(), params.ServerId) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webId"] = webConfig.Id + + var userAgentConfig = webConfig.UserAgent + if userAgentConfig == nil { + userAgentConfig = serverconfigs.NewUserAgentConfig() + } + + this.Data["userAgentConfig"] = userAgentConfig + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + UserAgentJSON []byte + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + defer this.CreateLogInfo("修改Web %d User-Agent设置", params.WebId) + + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebUserAgent(this.AdminContext(), &pb.UpdateHTTPWebUserAgentRequest{ + HttpWebId: params.WebId, + UserAgentJSON: params.UserAgentJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/userAgent/init.go b/internal/web/actions/default/servers/server/settings/userAgent/init.go new file mode 100644 index 00000000..ba0a1f13 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/userAgent/init.go @@ -0,0 +1,19 @@ +package useragent + +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/userAgent"). + 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 b9e412d5..b79f6bfd 100644 --- a/internal/web/actions/default/servers/serverutils/server_helper.go +++ b/internal/web/actions/default/servers/serverutils/server_helper.go @@ -315,6 +315,12 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "isActive": secondMenuItem == "referer", "isOn": serverConfig.Web != nil && serverConfig.Web.Referers != nil && serverConfig.Web.Referers.IsOn, }) + menuItems = append(menuItems, maps.Map{ + "name": "UA名单", + "url": "/servers/server/settings/userAgent?serverId=" + serverIdString, + "isActive": secondMenuItem == "userAgent", + "isOn": serverConfig.Web != nil && serverConfig.Web.UserAgent != nil && serverConfig.Web.UserAgent.IsOn, + }) menuItems = append(menuItems, maps.Map{ "name": "字符编码", "url": "/servers/server/settings/charset?serverId=" + serverIdString, diff --git a/internal/web/import.go b/internal/web/import.go index caf87fe6..7d24606a 100644 --- a/internal/web/import.go +++ b/internal/web/import.go @@ -84,6 +84,7 @@ import ( _ "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/userAgent" _ "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" @@ -102,6 +103,7 @@ import ( _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/tls" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/udp" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/unix" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/useragent" _ "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" diff --git a/web/public/js/components/common/values-box.js b/web/public/js/components/common/values-box.js index 78b176b2..81f719af 100644 --- a/web/public/js/components/common/values-box.js +++ b/web/public/js/components/common/values-box.js @@ -1,5 +1,5 @@ Vue.component("values-box", { - props: ["values", "v-values", "size", "maxlength", "name", "placeholder"], + props: ["values", "v-values", "size", "maxlength", "name", "placeholder", "v-allow-empty"], data: function () { let values = this.values; if (values == null) { @@ -39,7 +39,9 @@ Vue.component("values-box", { }, confirm: function () { if (this.value.length == 0) { - return + if (typeof(this.vAllowEmpty) != "boolean" || !this.vAllowEmpty) { + return + } } if (this.isUpdating) { @@ -75,12 +77,17 @@ Vue.component("values-box", { }, template: `
-
{{value}}
+
+ {{value}} + [空] +
[修改]
-
{{value}} +
+ {{value}} + [空]   diff --git a/web/public/js/components/server/user-agent-config-box.js b/web/public/js/components/server/user-agent-config-box.js new file mode 100644 index 00000000..6dd21159 --- /dev/null +++ b/web/public/js/components/server/user-agent-config-box.js @@ -0,0 +1,142 @@ +Vue.component("user-agent-config-box", { + props: ["v-is-location", "v-is-group", "value"], + data: function () { + let config = this.value + if (config == null) { + config = { + isPrior: false, + isOn: false, + filters: [] + } + } + if (config.filters == null) { + config.filters = [] + } + return { + config: config, + isAdding: false, + addingFilter: { + keywords: [], + action: "deny" + } + } + }, + methods: { + isOn: function () { + return ((!this.vIsLocation && !this.vIsGroup) || this.config.isPrior) && this.config.isOn + }, + remove: function (index) { + let that = this + teaweb.confirm("确定要删除此名单吗?", function () { + that.config.filters.$remove(index) + }) + }, + add: function () { + this.isAdding = true + }, + confirm: function () { + if (this.addingFilter.action == "deny") { + this.config.filters.push(this.addingFilter) + } else { + let index = -1 + this.config.filters.forEach(function (filter, filterIndex) { + if (filter.action == "allow") { + index = filterIndex + } + }) + + if (index < 0) { + this.config.filters.unshift(this.addingFilter) + } else { + this.config.filters.$insert(index + 1, this.addingFilter) + } + } + + this.cancel() + }, + cancel: function () { + this.isAdding = false + this.addingFilter = { + keywords: [], + action: "deny" + } + }, + changeKeywords: function (keywords) { + this.addingFilter.keywords = keywords + } + }, + template: `
+ + + + + + + + + + + + + + + +
启用UA名单 +
+ + +
+

选中后表示开启UserAgent名单。

+
UA名单 +
+ + + + + + + + + + + + + + + +
UA关键词动作操作
+ + {{keyword}} + [空] + + + 允许不允许 + 删除
+
+
+ + + + + + + + + +
UA关键词 + +

不区分大小写,比如Chrome;支持*通配符,比如*Firefox*;也支持空的关键词,表示空UserAgent。

+
动作 +
+   +
+
+ +
+
+
+
` +}) \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/locations/userAgent/index.html b/web/views/@default/servers/server/settings/locations/userAgent/index.html new file mode 100644 index 00000000..8ad16d51 --- /dev/null +++ b/web/views/@default/servers/server/settings/locations/userAgent/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/userAgent/index.js b/web/views/@default/servers/server/settings/locations/userAgent/index.js new file mode 100644 index 00000000..295a9aaf --- /dev/null +++ b/web/views/@default/servers/server/settings/locations/userAgent/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/userAgent/index.html b/web/views/@default/servers/server/settings/userAgent/index.html new file mode 100644 index 00000000..f2936da4 --- /dev/null +++ b/web/views/@default/servers/server/settings/userAgent/index.html @@ -0,0 +1,13 @@ +{$layout} +{$template "../settings_menu"} +{$template "/left_menu_with_menu"} + +
+
+ + + + + +
+
\ No newline at end of file diff --git a/web/views/@default/servers/server/settings/userAgent/index.js b/web/views/@default/servers/server/settings/userAgent/index.js new file mode 100644 index 00000000..295a9aaf --- /dev/null +++ b/web/views/@default/servers/server/settings/userAgent/index.js @@ -0,0 +1,3 @@ +Tea.context(function () { + this.success = NotifyReloadSuccess("保存成功") +}) \ No newline at end of file