diff --git a/internal/web/actions/default/servers/iplists/createPopup.go b/internal/web/actions/default/servers/iplists/createPopup.go index 31892272..9d3f0270 100644 --- a/internal/web/actions/default/servers/iplists/createPopup.go +++ b/internal/web/actions/default/servers/iplists/createPopup.go @@ -4,6 +4,7 @@ package iplists import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/iplists/iplistutils" "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/actions" @@ -28,6 +29,7 @@ func (this *CreatePopupAction) RunGet(params struct { func (this *CreatePopupAction) RunPost(params struct { Name string + Code string Type string Description string IsGlobal bool @@ -44,10 +46,27 @@ func (this *CreatePopupAction) RunPost(params struct { Field("name", params.Name). Require("请输入名称") + if len(params.Code) > 0 { + if !iplistutils.ValidateIPListCode(params.Code) { + this.FailField("code", "代号格式错误,只能是英文字母、数字、中划线、下划线的组合") + return + } + + listIdResp, err := this.RPC().IPListRPC().FindIPListIdWithCode(this.AdminContext(), &pb.FindIPListIdWithCodeRequest{Code: params.Code}) + if err != nil { + this.ErrorPage(err) + return + } + if listIdResp.IpListId > 0 { + this.FailField("code", "代号'"+params.Code+"'已经被别的名单占用,请更换一个") + return + } + } + createResp, err := this.RPC().IPListRPC().CreateIPList(this.AdminContext(), &pb.CreateIPListRequest{ Type: params.Type, Name: params.Name, - Code: "", + Code: params.Code, TimeoutJSON: nil, IsPublic: true, Description: params.Description, diff --git a/internal/web/actions/default/servers/iplists/iplistutils/utils.go b/internal/web/actions/default/servers/iplists/iplistutils/utils.go new file mode 100644 index 00000000..be776262 --- /dev/null +++ b/internal/web/actions/default/servers/iplists/iplistutils/utils.go @@ -0,0 +1,12 @@ +// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . + +package iplistutils + +import "regexp" + +var ipListCodeRegexp = regexp.MustCompile(`^[a-zA-Z0-9_-]+$`) + +// ValidateIPListCode 校验IP名单代号格式 +func ValidateIPListCode(code string) bool { + return ipListCodeRegexp.MatchString(code) +} diff --git a/internal/web/actions/default/servers/iplists/update.go b/internal/web/actions/default/servers/iplists/update.go index fdcae2d4..a376b67f 100644 --- a/internal/web/actions/default/servers/iplists/update.go +++ b/internal/web/actions/default/servers/iplists/update.go @@ -4,6 +4,7 @@ package iplists import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/iplists/iplistutils" "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/actions" @@ -32,6 +33,7 @@ func (this *UpdateAction) RunGet(params struct { func (this *UpdateAction) RunPost(params struct { ListId int64 Name string + Code string Type string Description string @@ -44,10 +46,27 @@ func (this *UpdateAction) RunPost(params struct { Field("name", params.Name). Require("请输入名称") + if len(params.Code) > 0 { + if !iplistutils.ValidateIPListCode(params.Code) { + this.FailField("code", "代号格式错误,只能是英文字母、数字、中划线、下划线的组合") + return + } + + listIdResp, err := this.RPC().IPListRPC().FindIPListIdWithCode(this.AdminContext(), &pb.FindIPListIdWithCodeRequest{Code: params.Code}) + if err != nil { + this.ErrorPage(err) + return + } + if listIdResp.IpListId > 0 && listIdResp.IpListId != params.ListId { + this.FailField("code", "代号'"+params.Code+"'已经被别的名单占用,请更换一个") + return + } + } + _, err := this.RPC().IPListRPC().UpdateIPList(this.AdminContext(), &pb.UpdateIPListRequest{ IpListId: params.ListId, Name: params.Name, - Code: "", + Code: params.Code, TimeoutJSON: nil, Description: params.Description, }) diff --git a/internal/web/actions/default/servers/iplists/utils.go b/internal/web/actions/default/servers/iplists/utils.go index d558b1c8..fcc13183 100644 --- a/internal/web/actions/default/servers/iplists/utils.go +++ b/internal/web/actions/default/servers/iplists/utils.go @@ -42,6 +42,7 @@ func InitIPList(action *actionutils.ParentAction, listId int64) error { action.Data["list"] = maps.Map{ "id": list.Id, "name": list.Name, + "code": list.Code, "type": list.Type, "typeName": typeName, "description": list.Description, diff --git a/web/views/@default/servers/iplists/createPopup.html b/web/views/@default/servers/iplists/createPopup.html index cb0c116f..744379c4 100644 --- a/web/views/@default/servers/iplists/createPopup.html +++ b/web/views/@default/servers/iplists/createPopup.html @@ -11,6 +11,13 @@ + + 代号 + + +

可选参数,只能是英文字母、数字、中划线、下划线的组合。

+ + 类型 diff --git a/web/views/@default/servers/iplists/list.html b/web/views/@default/servers/iplists/list.html index ac1d84ac..33d2237a 100644 --- a/web/views/@default/servers/iplists/list.html +++ b/web/views/@default/servers/iplists/list.html @@ -8,6 +8,17 @@ {{list.name}} + + ID + {{list.id}} + + + 代号 + + {{list.code}} + 没有设置 + + 类型 diff --git a/web/views/@default/servers/iplists/lists.js b/web/views/@default/servers/iplists/lists.js index b79f2613..1f7e53bf 100644 --- a/web/views/@default/servers/iplists/lists.js +++ b/web/views/@default/servers/iplists/lists.js @@ -1,7 +1,7 @@ Tea.context(function () { this.createList = function () { teaweb.popup(Tea.url(".createPopup", {type: this.type}), { - height: "24em", + height: "30em", callback: function (resp) { teaweb.success("保存成功", function () { window.location = "/servers/iplists/lists?type=" + resp.data.list.type diff --git a/web/views/@default/servers/iplists/update.html b/web/views/@default/servers/iplists/update.html index 9690ba17..c07a4a0c 100644 --- a/web/views/@default/servers/iplists/update.html +++ b/web/views/@default/servers/iplists/update.html @@ -11,6 +11,13 @@ + + 代号 + + +

可选参数,只能是英文字母、数字、中划线、下划线的组合。

+ + 类型