Files
lckt-server/utils/ip.go
2025-11-16 22:55:13 +08:00

67 lines
1.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package utils
import (
"encoding/json"
"fmt"
"git.echol.cn/loser/lckt/global"
user2 "git.echol.cn/loser/lckt/model/user"
"go.uber.org/zap"
"net/http"
"strings"
"time"
)
type ipAdcodeResp struct {
Adcode struct {
O string `json:"o"`
} `json:"adcode"`
}
func GetIPAdcode(ip string) string {
url := fmt.Sprintf("https://api.vore.top/api/IPdata?ip=%s", ip)
client := &http.Client{Timeout: 5 * time.Second}
resp, err := client.Get(url)
if err != nil {
return ""
}
defer resp.Body.Close()
var result ipAdcodeResp
if err = json.NewDecoder(resp.Body).Decode(&result); err != nil {
return ""
}
return result.Adcode.O
}
// CheckIPInAdcodes 检测用户IP是否在指定的地区编码范围内
func CheckIPInAdcodes(ipAdcode string) bool {
// 查询IP配置
ipCon := user2.IpCheck{}
err := global.GVA_DB.First(&ipCon).Error
if err != nil {
global.GVA_LOG.Error("获取IP配置失败", zap.Error(err))
return false
}
// 如果IP检测未启用直接返回true
if !ipCon.Status {
return true
}
// 解析允许的地区编码列表
var adcodes []string
// 通过逗号分隔
for _, code := range strings.Split(ipCon.Addrs, ",") {
trimmed := strings.TrimSpace(code)
if trimmed != "" {
adcodes = append(adcodes, trimmed)
}
}
lower := strings.ToLower(ipAdcode)
for _, code := range adcodes {
// 检测是否包含
if strings.Contains(lower, strings.ToLower(code)) {
return true
}
}
return false
}