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 11ceffce..9a5e457b 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 @@ -103,6 +103,12 @@ func (this *LocationHelper) createMenus(serverIdString string, locationIdString "isActive": secondMenuItem == "access", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.Auth != nil && locationConfig.Web.Auth.IsPrior, }) + menuItems = append(menuItems, maps.Map{ + "name": "防盗链", + "url": "/servers/server/settings/locations/referers?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "referer", + "isOn": locationConfig.Web != nil && locationConfig.Web.Referers != nil && locationConfig.Web.Referers.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 new file mode 100644 index 00000000..e30aec39 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/referers/index.go @@ -0,0 +1,68 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package uam + +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("referer") +} + +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 referersConfig = webConfig.Referers + if referersConfig == nil { + referersConfig = &serverconfigs.ReferersConfig{ + IsPrior: false, + IsOn: false, + AllowEmpty: true, + AllowSameDomain: true, + AllowDomains: nil, + } + } + + this.Data["referersConfig"] = referersConfig + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + ReferersJSON []byte + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + defer this.CreateLogInfo("修改Web %d 防盗链设置", params.WebId) + + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebReferers(this.AdminContext(), &pb.UpdateHTTPWebReferersRequest{ + HttpWebId: params.WebId, + ReferersJSON: params.ReferersJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} 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 new file mode 100644 index 00000000..f4a1e460 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/referers/init.go @@ -0,0 +1,22 @@ +package uam + +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", "referer"). + Prefix("/servers/server/settings/locations/referers"). + 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 new file mode 100644 index 00000000..60049a43 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/referers/index.go @@ -0,0 +1,70 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package uam + +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("referer") +} + +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 referersConfig = webConfig.Referers + if referersConfig == nil { + referersConfig = &serverconfigs.ReferersConfig{ + IsPrior: false, + IsOn: false, + AllowEmpty: true, + AllowSameDomain: true, + AllowDomains: nil, + } + } + + this.Data["referersConfig"] = referersConfig + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + ReferersJSON []byte + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + defer this.CreateLogInfo("修改Web %d 防盗链设置", params.WebId) + + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebReferers(this.AdminContext(), &pb.UpdateHTTPWebReferersRequest{ + HttpWebId: params.WebId, + ReferersJSON: params.ReferersJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/referers/init.go b/internal/web/actions/default/servers/server/settings/referers/init.go new file mode 100644 index 00000000..4ecb4874 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/referers/init.go @@ -0,0 +1,19 @@ +package uam + +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/referers"). + 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 431ee728..b9e412d5 100644 --- a/internal/web/actions/default/servers/serverutils/server_helper.go +++ b/internal/web/actions/default/servers/serverutils/server_helper.go @@ -309,6 +309,12 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "isActive": secondMenuItem == "access", "isOn": serverConfig.Web != nil && serverConfig.Web.Auth != nil && serverConfig.Web.Auth.IsOn, }) + menuItems = append(menuItems, maps.Map{ + "name": "防盗链", + "url": "/servers/server/settings/referers?serverId=" + serverIdString, + "isActive": secondMenuItem == "referer", + "isOn": serverConfig.Web != nil && serverConfig.Web.Referers != nil && serverConfig.Web.Referers.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 74bd5c00..e0e70435 100644 --- a/internal/web/import.go +++ b/internal/web/import.go @@ -79,6 +79,7 @@ import ( _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/http" _ "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/referers" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/remoteAddr" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/requestLimit" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/reverseProxy" @@ -91,6 +92,7 @@ import ( _ "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/redirects" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/referers" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/remoteAddr" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/requestLimit" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/reverseProxy" diff --git a/web/public/js/components/server/http-referers-config-box.js b/web/public/js/components/server/http-referers-config-box.js new file mode 100644 index 00000000..d1ba32f5 --- /dev/null +++ b/web/public/js/components/server/http-referers-config-box.js @@ -0,0 +1,70 @@ +Vue.component("http-referers-config-box", { + props: ["v-referers-config", "v-is-location", "v-is-group"], + data: function () { + let config = this.vReferersConfig + if (config == null) { + config = { + isPrior: false, + isOn: false, + allowEmpty: true, + allowSameDomain: true, + allowDomains: [] + } + } + if (config.allowDomains == null) { + config.allowDomains = [] + } + return { + config: config + } + }, + methods: { + isOn: function () { + return ((!this.vIsLocation && !this.vIsGroup) || this.config.isPrior) && this.config.isOn + }, + changeAllowDomains: function (domains) { + } + }, + template: `
| 启用 | +
+
+
+
+
+ 选中后表示开启防盗链。 + |
+
| 来源域名允许为空 | +
+ 允许不带来源的访问,用户第一次访问网站时来源域名通常为空。 + |
+
| 来源域名允许一致 | +
+ 允许来源域名和当前访问的域名一致,相当于在站内访问。 + |
+
| 允许的来源域名 | +
+ 允许的来源域名列表,比如 |
+