package utils import ( "crypto/hmac" "crypto/sha1" "encoding/hex" "git.qianqiusoft.com/qianqiusoft/go-uuid/uuid" "git.qianqiusoft.com/qianqiusoft/light-apiengine/logs" "github.com/gin-gonic/gin" "net/url" "regexp" "strings" ) const ( hmac_key = "hmac_key_" ) func NewUUID() string { //return uuid.NewV4().String() return uuid.New() } func GenerateToken(plain string) string { hash := hmac.New(sha1.New, []byte(hmac_key)) hash.Write([]byte(plain)) return hex.EncodeToString(hash.Sum(nil)) } func TotalPage(record, size int) int { tp := record / size if tp < 0 { return 1 } if record%size == 0 { return tp } return tp + 1 } func FormatForBrowse(agent, val string) string { if strings.Contains(strings.ToLower(agent), "safari/") && !strings.Contains(strings.ToLower(agent), "chrome/") { logs.Debug("Safari浏览器编码") } else if strings.Contains(strings.ToLower(agent), "firefox/") { logs.Debug("Firefox浏览器编码") } else if strings.Contains(strings.ToLower(agent), "chrome/") && strings.Contains(strings.ToLower(agent), "safari/") && !strings.Contains(strings.ToLower(agent), "edge/") { logs.Debug("Chrome浏览器编码") } else { logs.Debug("IE浏览器编码") val = url.QueryEscape(val) val = strings.Replace(val, "+", "%20", -1) } return val } func GetHostname(ctx *gin.Context)string{ host := ctx.Request.Host i := strings.Index(host, ":") if i > 0{ host = host[:i] } return host } /** * @brief: 把域名分成列表,最小包括部分顶级域名,例如:www.baidu.com 返回[www.baidu.com, baidu.com] × @param1 hostname: 请求名称 */ func GetHostnames(ctx *gin.Context)[]string{ hostname := GetHostname(ctx) patternstr := `(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})(\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})){3}` reg := regexp.MustCompile(patternstr) if res := reg.FindAllString(hostname, -1); res == nil { arr := []string{} parts := strings.Split(hostname, ".") if len(parts) <= 2{ arr = append(arr, hostname) }else{ arr = append(arr, hostname) for i := 0; i < len(parts) - 2; i++ { arr = append(arr, strings.Join(parts[i+1:], ".")) } } return arr } else { // 直接返回ip return []string{hostname} } }