utils.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package utils
  2. import (
  3. "crypto/hmac"
  4. "crypto/sha1"
  5. "encoding/hex"
  6. "git.qianqiusoft.com/qianqiusoft/go-uuid/uuid"
  7. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  8. "git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
  9. "github.com/gin-gonic/gin"
  10. "math/rand"
  11. "net/url"
  12. "os"
  13. "regexp"
  14. "strings"
  15. "time"
  16. )
  17. const (
  18. hmac_key = "hmac_key_"
  19. )
  20. func NewUUID() string {
  21. //return uuid.NewV4().String()
  22. return uuid.New()
  23. }
  24. func GenerateToken(plain string) string {
  25. hash := hmac.New(sha1.New, []byte(hmac_key))
  26. hash.Write([]byte(plain))
  27. return hex.EncodeToString(hash.Sum(nil))
  28. }
  29. func TotalPage(record, size int) int {
  30. tp := record / size
  31. if tp < 0 {
  32. return 1
  33. }
  34. if record%size == 0 {
  35. return tp
  36. }
  37. return tp + 1
  38. }
  39. func FormatForBrowse(agent, val string) string {
  40. if strings.Contains(strings.ToLower(agent), "safari/") && !strings.Contains(strings.ToLower(agent), "chrome/") {
  41. logs.Debug("Safari浏览器编码")
  42. } else if strings.Contains(strings.ToLower(agent), "firefox/") {
  43. logs.Debug("Firefox浏览器编码")
  44. } else if strings.Contains(strings.ToLower(agent), "chrome/") && strings.Contains(strings.ToLower(agent), "safari/") && !strings.Contains(strings.ToLower(agent), "edge/") {
  45. logs.Debug("Chrome浏览器编码")
  46. } else {
  47. logs.Debug("IE浏览器编码")
  48. val = url.QueryEscape(val)
  49. val = strings.Replace(val, "+", "%20", -1)
  50. }
  51. return val
  52. }
  53. func GetHostname(ctx *gin.Context)string{
  54. host := ctx.Request.Host
  55. i := strings.Index(host, ":")
  56. if i > 0{
  57. host = host[:i]
  58. }
  59. return host
  60. }
  61. /**
  62. * @brief: 把域名分成列表,最小包括部分顶级域名,例如:www.baidu.com 返回[www.baidu.com, baidu.com]
  63. × @param1 hostname: 请求名称
  64. */
  65. func GetHostnames(ctx *gin.Context)[]string{
  66. hostname := GetHostname(ctx)
  67. 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}`
  68. reg := regexp.MustCompile(patternstr)
  69. if res := reg.FindAllString(hostname, -1); res == nil {
  70. arr := []string{}
  71. parts := strings.Split(hostname, ".")
  72. if len(parts) <= 2{
  73. arr = append(arr, hostname)
  74. }else{
  75. arr = append(arr, hostname)
  76. for i := 0; i < len(parts) - 2; i++ {
  77. arr = append(arr, strings.Join(parts[i+1:], "."))
  78. }
  79. }
  80. return arr
  81. } else {
  82. // 直接返回ip
  83. return []string{hostname}
  84. }
  85. }
  86. // 获取ip
  87. func GetIP(c *entitys.CtrlContext)string{
  88. ip := c.Ctx.Request.RemoteAddr
  89. end := strings.Index(ip, ":")
  90. rs := []rune(ip)
  91. ip = string(rs[0:end])
  92. return ip
  93. }
  94. //RandomStr 随机生成字符串
  95. func RandomStr(length int) string {
  96. str := "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  97. bytes := []byte(str)
  98. result := []byte{}
  99. r := rand.New(rand.NewSource(time.Now().UnixNano()))
  100. for i := 0; i < length; i++ {
  101. result = append(result, bytes[r.Intn(len(bytes))])
  102. }
  103. return string(result)
  104. }
  105. /**
  106. * @brief: empty file
  107. * @param1 fileName: file name
  108. * @param3 bytess: content
  109. * @return1: error info
  110. */
  111. func AppendFile(fileName string, bytess []byte)error{
  112. if len(bytess) == 0{
  113. return nil
  114. }
  115. file, err := os.OpenFile(fileName, os.O_CREATE | os.O_WRONLY | os.O_APPEND, os.ModePerm)
  116. if err != nil{
  117. return err
  118. }
  119. defer file.Close()
  120. _, err = file.Write(bytess)
  121. if err != nil{
  122. return err
  123. }
  124. return nil
  125. }