diff --git a/internal/utils/ip_utils.go b/internal/utils/ip_utils.go index 686ae9a1..cfe3d8fb 100644 --- a/internal/utils/ip_utils.go +++ b/internal/utils/ip_utils.go @@ -2,28 +2,12 @@ package utils import ( "bytes" - "encoding/binary" "errors" "github.com/iwind/TeaGo/types" "net" "strings" ) -// IP2Long 将IP转换为整型 -// 为临时过渡的函数 -func IP2Long(ip string) uint64 { - var i = net.ParseIP(ip) - if len(i) == 0 { - return 0 - } - if i.To4() != nil { - return uint64(binary.BigEndian.Uint32(i.To4())) - } - - // TODO 支持IPv6 - return 0 -} - // ExtractIP 分解IP // 只支持D段掩码的CIDR // 最多只记录255个值 diff --git a/internal/web/actions/default/servers/components/waf/ipadmin/updateIPPopup.go b/internal/web/actions/default/servers/components/waf/ipadmin/updateIPPopup.go index 03eb77b1..62dadcca 100644 --- a/internal/web/actions/default/servers/components/waf/ipadmin/updateIPPopup.go +++ b/internal/web/actions/default/servers/components/waf/ipadmin/updateIPPopup.go @@ -1,6 +1,6 @@ package ipadmin -import ( "github.com/TeaOSLab/EdgeAdmin/internal/utils" +import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/iputils" "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" @@ -72,29 +72,32 @@ func (this *UpdateIPPopupAction) RunPost(params struct { Require("请输入开始IP") // 校验IP格式(ipFrom/ipTo) - var ipFromLong uint64 if !iputils.IsIPv4(params.IpFrom) { - this.Fail("请输入正确的开始IP") + this.FailField("ipFrom", "请输入正确的开始IP") } - ipFromLong = utils.IP2Long(params.IpFrom) - var ipToLong uint64 if len(params.IpTo) > 0 && !iputils.IsIPv4(params.IpTo) { - this.Fail("请输入正确的结束IP") + this.FailField("ipTo", "请输入正确的结束IP") } - ipToLong = utils.IP2Long(params.IpTo) - if ipFromLong > 0 && ipToLong > 0 && ipFromLong > ipToLong { + if len(params.IpTo) > 0 && iputils.CompareIP(params.IpFrom, params.IpTo) > 0 { params.IpTo, params.IpFrom = params.IpFrom, params.IpTo } case "ipv6": params.Must. Field("ipFrom", params.IpFrom). - Require("请输入IP") + Require("请输入正确的开始IP") - // 校验IP格式(ipFrom) if !iputils.IsIPv6(params.IpFrom) { - this.Fail("请输入正确的IPv6地址") + this.FailField("ipFrom", "请输入正确的IPv6地址") + } + + if len(params.IpTo) > 0 && !iputils.IsIPv6(params.IpTo) { + this.FailField("ipTo", "请输入正确的IPv6地址") + } + + if len(params.IpTo) > 0 && iputils.CompareIP(params.IpFrom, params.IpTo) > 0 { + params.IpTo, params.IpFrom = params.IpFrom, params.IpTo } case "all": params.IpFrom = "0.0.0.0" diff --git a/internal/web/actions/default/servers/groups/group/settings/waf/ipadmin/updateIPPopup.go b/internal/web/actions/default/servers/groups/group/settings/waf/ipadmin/updateIPPopup.go index 1a08ba6d..11a89f4c 100644 --- a/internal/web/actions/default/servers/groups/group/settings/waf/ipadmin/updateIPPopup.go +++ b/internal/web/actions/default/servers/groups/group/settings/waf/ipadmin/updateIPPopup.go @@ -1,8 +1,8 @@ package ipadmin import ( - "github.com/TeaOSLab/EdgeAdmin/internal/utils" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/iputils" "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/actions" @@ -71,29 +71,32 @@ func (this *UpdateIPPopupAction) RunPost(params struct { Require("请输入开始IP") // 校验IP格式(ipFrom/ipTo) - var ipFromLong uint64 - if !utils.IsIPv4(params.IpFrom) { - this.Fail("请输入正确的开始IP") + if !iputils.IsIPv4(params.IpFrom) { + this.FailField("ipFrom", "请输入正确的开始IP") } - ipFromLong = utils.IP2Long(params.IpFrom) - var ipToLong uint64 - if len(params.IpTo) > 0 && !utils.IsIPv4(params.IpTo) { - this.Fail("请输入正确的结束IP") + if len(params.IpTo) > 0 && !iputils.IsIPv4(params.IpTo) { + this.FailField("ipTo", "请输入正确的结束IP") } - ipToLong = utils.IP2Long(params.IpTo) - if ipFromLong > 0 && ipToLong > 0 && ipFromLong > ipToLong { + if len(params.IpTo) > 0 && iputils.CompareIP(params.IpFrom, params.IpTo) > 0 { params.IpTo, params.IpFrom = params.IpFrom, params.IpTo } case "ipv6": params.Must. Field("ipFrom", params.IpFrom). - Require("请输入IP") + Require("请输入正确的开始IP") - // 校验IP格式(ipFrom) - if !utils.IsIPv6(params.IpFrom) { - this.Fail("请输入正确的IPv6地址") + if !iputils.IsIPv6(params.IpFrom) { + this.FailField("ipFrom", "请输入正确的IPv6地址") + } + + if len(params.IpTo) > 0 && !iputils.IsIPv6(params.IpTo) { + this.FailField("ipTo", "请输入正确的IPv6地址") + } + + if len(params.IpTo) > 0 && iputils.CompareIP(params.IpFrom, params.IpTo) > 0 { + params.IpTo, params.IpFrom = params.IpFrom, params.IpTo } case "all": params.IpFrom = "0.0.0.0" diff --git a/internal/web/actions/default/servers/iplists/createIPPopup.go b/internal/web/actions/default/servers/iplists/createIPPopup.go index c10250e0..47b6fbaa 100644 --- a/internal/web/actions/default/servers/iplists/createIPPopup.go +++ b/internal/web/actions/default/servers/iplists/createIPPopup.go @@ -1,7 +1,6 @@ package iplists import ( - "github.com/TeaOSLab/EdgeAdmin/internal/utils" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/configutils" "github.com/TeaOSLab/EdgeCommon/pkg/iputils" @@ -90,19 +89,15 @@ func (this *CreateIPPopupAction) RunPost(params struct { Field("ipFrom", params.IpFrom). Require("请输入开始IP") - var ipFromLong uint64 if !iputils.IsIPv4(params.IpFrom) { - this.Fail("请输入正确的开始IP") + this.FailField("ipFrom", "请输入正确的开始IP") } - ipFromLong = utils.IP2Long(params.IpFrom) - var ipToLong uint64 if len(params.IpTo) > 0 && !iputils.IsIPv4(params.IpTo) { - this.Fail("请输入正确的结束IP") + this.FailField("ipTo", "请输入正确的结束IP") } - ipToLong = utils.IP2Long(params.IpTo) - if ipFromLong > 0 && ipToLong > 0 && ipFromLong > ipToLong { + if len(params.IpTo) != 0 && iputils.CompareIP(params.IpFrom, params.IpTo) > 0 { params.IpTo, params.IpFrom = params.IpFrom, params.IpTo } } else if params.Method == "batch" { @@ -132,7 +127,7 @@ func (this *CreateIPPopupAction) RunPost(params struct { if net.ParseIP(ipFrom) == nil || net.ParseIP(ipTo) == nil || strings.Contains(ipFrom, ":") || strings.Contains(ipTo, ":") { this.FailField("ipData", "第"+types.String(index+1)+"行IP格式错误:"+line) } - if utils.IP2Long(ipFrom) > utils.IP2Long(ipTo) { + if len(ipTo) > 0 && iputils.CompareIP(ipFrom, ipTo) > 0 { ipFrom, ipTo = ipTo, ipFrom } batchIPs = append(batchIPs, &ipData{ @@ -147,7 +142,7 @@ func (this *CreateIPPopupAction) RunPost(params struct { if net.ParseIP(ipFrom) == nil || net.ParseIP(ipTo) == nil || strings.Contains(ipFrom, ":") || strings.Contains(ipTo, ":") { this.FailField("ipData", "第"+types.String(index+1)+"行IP格式错误:"+line) } - if utils.IP2Long(ipFrom) > utils.IP2Long(ipTo) { + if len(ipTo) > 0 && iputils.CompareIP(ipFrom, ipTo) > 0 { ipFrom, ipTo = ipTo, ipFrom } batchIPs = append(batchIPs, &ipData{ @@ -169,11 +164,18 @@ func (this *CreateIPPopupAction) RunPost(params struct { if params.Method == "single" { params.Must. Field("ipFrom", params.IpFrom). - Require("请输入IP") + Require("请输入正确的开始IP") - // 校验IP格式(ipFrom) if !iputils.IsIPv6(params.IpFrom) { - this.Fail("请输入正确的IPv6地址") + this.FailField("ipFrom", "请输入正确的IPv6地址") + } + + if len(params.IpTo) > 0 && !iputils.IsIPv6(params.IpTo) { + this.FailField("ipTo", "请输入正确的IPv6地址") + } + + if len(params.IpTo) > 0 && iputils.CompareIP(params.IpFrom, params.IpTo) > 0 { + params.IpTo, params.IpFrom = params.IpFrom, params.IpTo } } else if params.Method == "batch" { if len(params.IpData) == 0 { @@ -202,7 +204,7 @@ func (this *CreateIPPopupAction) RunPost(params struct { if net.ParseIP(ipFrom) == nil || net.ParseIP(ipTo) == nil || !strings.Contains(ipFrom, ":") || !strings.Contains(ipTo, ":") { this.FailField("ipData", "第"+types.String(index+1)+"行IP格式错误:"+line) } - if utils.IP2Long(ipFrom) > utils.IP2Long(ipTo) { + if len(ipTo) > 0 && iputils.CompareIP(ipFrom, ipTo) > 0 { ipFrom, ipTo = ipTo, ipFrom } batchIPs = append(batchIPs, &ipData{ @@ -217,7 +219,7 @@ func (this *CreateIPPopupAction) RunPost(params struct { if net.ParseIP(ipFrom) == nil || net.ParseIP(ipTo) == nil || !strings.Contains(ipFrom, ":") || !strings.Contains(ipTo, ":") { this.FailField("ipData", "第"+types.String(index+1)+"行IP格式错误:"+line) } - if utils.IP2Long(ipFrom) > utils.IP2Long(ipTo) { + if len(ipTo) > 0 && iputils.CompareIP(ipFrom, ipTo) > 0 { ipFrom, ipTo = ipTo, ipFrom } batchIPs = append(batchIPs, &ipData{ diff --git a/internal/web/actions/default/servers/iplists/updateIPPopup.go b/internal/web/actions/default/servers/iplists/updateIPPopup.go index 46fb9981..50a4147f 100644 --- a/internal/web/actions/default/servers/iplists/updateIPPopup.go +++ b/internal/web/actions/default/servers/iplists/updateIPPopup.go @@ -1,6 +1,6 @@ package iplists -import ( "github.com/TeaOSLab/EdgeAdmin/internal/utils" +import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/iputils" "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" @@ -71,29 +71,32 @@ func (this *UpdateIPPopupAction) RunPost(params struct { Require("请输入开始IP") // 校验IP格式(ipFrom/ipTo) - var ipFromLong uint64 if !iputils.IsIPv4(params.IpFrom) { - this.Fail("请输入正确的开始IP") + this.FailField("ipFrom", "请输入正确的开始IP") } - ipFromLong = utils.IP2Long(params.IpFrom) - var ipToLong uint64 if len(params.IpTo) > 0 && !iputils.IsIPv4(params.IpTo) { - this.Fail("请输入正确的结束IP") + this.FailField("ipTo", "请输入正确的结束IP") } - ipToLong = utils.IP2Long(params.IpTo) - if ipFromLong > 0 && ipToLong > 0 && ipFromLong > ipToLong { + if len(params.IpTo) > 0 && iputils.CompareIP(params.IpFrom, params.IpTo) > 0 { params.IpTo, params.IpFrom = params.IpFrom, params.IpTo } case "ipv6": params.Must. Field("ipFrom", params.IpFrom). - Require("请输入IP") + Require("请输入正确的开始IP") - // 校验IP格式(ipFrom) if !iputils.IsIPv6(params.IpFrom) { - this.Fail("请输入正确的IPv6地址") + this.FailField("ipFrom", "请输入正确的IPv6地址") + } + + if len(params.IpTo) > 0 && !iputils.IsIPv6(params.IpTo) { + this.FailField("ipTo", "请输入正确的IPv6地址") + } + + if len(params.IpTo) > 0 && iputils.CompareIP(params.IpFrom, params.IpTo) > 0 { + params.IpTo, params.IpFrom = params.IpFrom, params.IpTo } case "all": params.IpFrom = "0.0.0.0" diff --git a/internal/web/actions/default/servers/server/settings/waf/ipadmin/denyList.go b/internal/web/actions/default/servers/server/settings/waf/ipadmin/denyList.go index 1304d22b..5e7808e5 100644 --- a/internal/web/actions/default/servers/server/settings/waf/ipadmin/denyList.go +++ b/internal/web/actions/default/servers/server/settings/waf/ipadmin/denyList.go @@ -63,9 +63,9 @@ func (this *DenyListAction) RunGet(params struct { this.ErrorPage(err) return } - itemMaps := []maps.Map{} + var itemMaps = []maps.Map{} for _, item := range itemsResp.IpItems { - expiredTime := "" + var expiredTime = "" if item.ExpiredAt > 0 { expiredTime = timeutil.FormatTime("Y-m-d H:i:s", item.ExpiredAt) } diff --git a/internal/web/actions/default/servers/server/settings/waf/ipadmin/updateIPPopup.go b/internal/web/actions/default/servers/server/settings/waf/ipadmin/updateIPPopup.go index 34150220..11a89f4c 100644 --- a/internal/web/actions/default/servers/server/settings/waf/ipadmin/updateIPPopup.go +++ b/internal/web/actions/default/servers/server/settings/waf/ipadmin/updateIPPopup.go @@ -1,6 +1,6 @@ package ipadmin -import ( "github.com/TeaOSLab/EdgeAdmin/internal/utils" +import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/iputils" "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" @@ -71,29 +71,32 @@ func (this *UpdateIPPopupAction) RunPost(params struct { Require("请输入开始IP") // 校验IP格式(ipFrom/ipTo) - var ipFromLong uint64 if !iputils.IsIPv4(params.IpFrom) { - this.Fail("请输入正确的开始IP") + this.FailField("ipFrom", "请输入正确的开始IP") } - ipFromLong = utils.IP2Long(params.IpFrom) - var ipToLong uint64 if len(params.IpTo) > 0 && !iputils.IsIPv4(params.IpTo) { - this.Fail("请输入正确的结束IP") + this.FailField("ipTo", "请输入正确的结束IP") } - ipToLong = utils.IP2Long(params.IpTo) - if ipFromLong > 0 && ipToLong > 0 && ipFromLong > ipToLong { + if len(params.IpTo) > 0 && iputils.CompareIP(params.IpFrom, params.IpTo) > 0 { params.IpTo, params.IpFrom = params.IpFrom, params.IpTo } case "ipv6": params.Must. Field("ipFrom", params.IpFrom). - Require("请输入IP") + Require("请输入正确的开始IP") - // 校验IP格式(ipFrom) if !iputils.IsIPv6(params.IpFrom) { - this.Fail("请输入正确的IPv6地址") + this.FailField("ipFrom", "请输入正确的IPv6地址") + } + + if len(params.IpTo) > 0 && !iputils.IsIPv6(params.IpTo) { + this.FailField("ipTo", "请输入正确的IPv6地址") + } + + if len(params.IpTo) > 0 && iputils.CompareIP(params.IpFrom, params.IpTo) > 0 { + params.IpTo, params.IpFrom = params.IpFrom, params.IpTo } case "all": params.IpFrom = "0.0.0.0" diff --git a/web/public/js/components/iplist/ip-list-table.js b/web/public/js/components/iplist/ip-list-table.js index 6b80950c..29a831e5 100644 --- a/web/public/js/components/iplist/ip-list-table.js +++ b/web/public/js/components/iplist/ip-list-table.js @@ -199,12 +199,12 @@ Vue.component("ip-list-table", {
{{item.expiredTime}} -
+
已过期
{{formatSeconds(item.lifeSeconds)}} - 已过期 + 已过期
不过期 diff --git a/web/views/@default/servers/components/waf/ipadmin/updateIPPopup.html b/web/views/@default/servers/components/waf/ipadmin/updateIPPopup.html index dcec182c..512cea24 100644 --- a/web/views/@default/servers/components/waf/ipadmin/updateIPPopup.html +++ b/web/views/@default/servers/components/waf/ipadmin/updateIPPopup.html @@ -34,7 +34,7 @@ 结束IP -

表示IP段的时候需要填写此项。

+

只有表示IP段的时候才需要填写此项。

@@ -48,13 +48,20 @@ - - IP * - - -

IPv6地址,比如 1406:3c00:0:2409:13:58:103:15

- - + + 开始IP * + + +

IPv6地址,比如 1406:3c00:0:2409:13:58:103:15

+ + + + 结束IP + + +

只有表示IP段的时候才需要填写此项。

+ + diff --git a/web/views/@default/servers/groups/group/settings/waf/ipadmin/updateIPPopup.html b/web/views/@default/servers/groups/group/settings/waf/ipadmin/updateIPPopup.html index 8ab5ebc8..dc8e943b 100644 --- a/web/views/@default/servers/groups/group/settings/waf/ipadmin/updateIPPopup.html +++ b/web/views/@default/servers/groups/group/settings/waf/ipadmin/updateIPPopup.html @@ -33,7 +33,7 @@ 结束IP -

表示IP段的时候需要填写此项。

+

只有表示IP段的时候才需要填写此项。

@@ -41,12 +41,19 @@ - IP * + 开始IP *

IPv6地址,比如 1406:3c00:0:2409:13:58:103:15

+ + 结束IP + + +

只有表示IP段的时候才需要填写此项。

+ + diff --git a/web/views/@default/servers/iplists/createIPPopup.html b/web/views/@default/servers/iplists/createIPPopup.html index 91fc4572..384093c0 100644 --- a/web/views/@default/servers/iplists/createIPPopup.html +++ b/web/views/@default/servers/iplists/createIPPopup.html @@ -42,7 +42,7 @@ 结束IP -

表示IP段的时候需要填写此项。

+

只有表示IP段的时候才需要填写此项。

@@ -50,12 +50,19 @@ - IP * + 开始IP *

IPv6地址,比如 1406:3c00:0:2409:13:58:103:15

+ + 结束IP + + +

只有表示IP段的时候才需要填写此项。

+ + diff --git a/web/views/@default/servers/iplists/updateIPPopup.html b/web/views/@default/servers/iplists/updateIPPopup.html index 05c33a60..74fc17e2 100644 --- a/web/views/@default/servers/iplists/updateIPPopup.html +++ b/web/views/@default/servers/iplists/updateIPPopup.html @@ -33,7 +33,7 @@ 结束IP -

表示IP段的时候需要填写此项。

+

只有表示IP段的时候才需要填写此项。

@@ -47,13 +47,20 @@ - - IP * - - -

IPv6地址,比如 1406:3c00:0:2409:13:58:103:15

- - + + 开始IP * + + +

IPv6地址,比如 1406:3c00:0:2409:13:58:103:15

+ + + + 结束IP + + +

只有表示IP段的时候才需要填写此项。

+ + diff --git a/web/views/@default/servers/server/settings/waf/ipadmin/updateIPPopup.html b/web/views/@default/servers/server/settings/waf/ipadmin/updateIPPopup.html index 8ab5ebc8..dc8e943b 100644 --- a/web/views/@default/servers/server/settings/waf/ipadmin/updateIPPopup.html +++ b/web/views/@default/servers/server/settings/waf/ipadmin/updateIPPopup.html @@ -33,7 +33,7 @@ 结束IP -

表示IP段的时候需要填写此项。

+

只有表示IP段的时候才需要填写此项。

@@ -41,12 +41,19 @@ - IP * + 开始IP *

IPv6地址,比如 1406:3c00:0:2409:13:58:103:15

+ + 结束IP + + +

只有表示IP段的时候才需要填写此项。

+ +