印度包网
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
1.5 KiB

1 year ago
package middleware
import (
"server/call"
"server/modules/web/app"
"server/modules/web/values"
"strconv"
"strings"
"github.com/gin-gonic/gin"
"github.com/liangdas/mqant/log"
)
// 白名单验证
func WhiteIPs() gin.HandlerFunc {
return func(c *gin.Context) {
a := app.NewApp(c)
ip := a.GetRemoteIP()
uri := c.Request.RequestURI
tmp := strings.ReplaceAll(uri, "/provider", "")
tmpSub := strings.Split(tmp, "/")
if len(tmpSub) < 2 {
c.Next()
return
}
path := tmpSub[1]
provider := call.GetConfigGameProviderByPath(path)
if provider == nil {
c.Next()
return
}
if len(provider.SubIp) == 0 {
c.Next()
return
}
for _, v := range provider.SubIp {
ips := strings.Split(v, "-")
// 说明是固定ip
if len(ips) == 1 {
if ip == v {
c.Next()
return
}
continue
}
// 配置的是ip段的情况
ip0 := strings.Split(ips[0], ".")
ip1 := strings.Split(ips[1], ".")
thisIP := strings.Split(ip, ".")
same := true
for i := 0; i < len(thisIP)-1; i++ {
if thisIP[i] != ip0[i] {
same = false
break
}
}
if !same {
continue
}
last0, _ := strconv.Atoi(ip0[len(ip0)-1])
last1, _ := strconv.Atoi(ip1[len(ip1)-1])
thisLast, _ := strconv.Atoi(thisIP[len(thisIP)-1])
if thisLast >= last0 && thisLast <= last1 {
c.Next()
return
}
}
log.Debug("ip:%v,provider:%v,path:%v", ip, provider, uri)
a.Code = values.CodeServer
a.Response()
c.Abort()
}
}