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" "fmt" ) const ( hmac_key = "hmac_key_" ) func NewUUID() string { id, err := GetGid("2") if err != nil { return uuid.New() } else { return fmt.Sprint(id) } } 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} } }