| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- package utils
- import (
- "fmt"
- "github.com/gogf/gf/crypto/gaes"
- "github.com/gogf/gf/encoding/gbase64"
- "github.com/gogf/gf/encoding/gcharset"
- "github.com/gogf/gf/encoding/gjson"
- "github.com/gogf/gf/encoding/gurl"
- "github.com/gogf/gf/errors/gerror"
- "github.com/gogf/gf/frame/g"
- "github.com/gogf/gf/net/ghttp"
- "github.com/gogf/gf/os/gtime"
- "github.com/gogf/gf/text/gstr"
- "net"
- "time"
- )
- const AdminCbcPublicKey = "HqmP1KLMuz09Q0Bu"
- //字符串加密
- func EncryptCBC(plainText, publicKey string) string {
- key := []byte(publicKey)
- b, e := gaes.EncryptCBC([]byte(plainText), key, key)
- if e != nil {
- g.Log().Error(e.Error())
- return ""
- }
- return gbase64.EncodeToString(b)
- }
- //字符串解密
- func DecryptCBC(plainText, publicKey string) string {
- key := []byte(publicKey)
- plainTextByte, e := gbase64.DecodeString(plainText)
- if e != nil {
- g.Log().Error(e.Error())
- return ""
- }
- b, e := gaes.DecryptCBC(plainTextByte, key, key)
- if e != nil {
- g.Log().Error(e.Error())
- return ""
- }
- return gbase64.EncodeToString(b)
- }
- //服务端ip
- func GetLocalIP() (ip string, err error) {
- addrs, err := net.InterfaceAddrs()
- if err != nil {
- return
- }
- for _, addr := range addrs {
- ipAddr, ok := addr.(*net.IPNet)
- if !ok {
- continue
- }
- if ipAddr.IP.IsLoopback() {
- continue
- }
- if !ipAddr.IP.IsGlobalUnicast() {
- continue
- }
- return ipAddr.IP.String(), nil
- }
- return
- }
- //获取客户端IP
- func GetClientIp(r *ghttp.Request) string {
- ip := r.Header.Get("X-Forwarded-For")
- if ip == "" {
- ip = r.GetClientIp()
- }
- return ip
- }
- //获取相差时间
- func GetHourDiffer(startTime, endTime string) int64 {
- var hour int64
- t1, err := time.ParseInLocation("2006-01-02 15:04:05", startTime, time.Local)
- t2, err := time.ParseInLocation("2006-01-02 15:04:05", endTime, time.Local)
- if err == nil && t1.Before(t2) {
- diff := t2.Unix() - t1.Unix() //
- hour = diff / 3600
- return hour
- } else {
- return hour
- }
- }
- //日期字符串转时间戳(秒)
- func StrToTimestamp(dateStr string) int64 {
- tm, err := gtime.StrToTime(dateStr)
- if err != nil {
- g.Log().Error(err)
- return 0
- }
- return tm.Timestamp()
- }
- //时间戳转 yyyy-MM-dd HH:mm:ss
- func TimeStampToDateTime(timeStamp int64) string {
- tm := gtime.NewFromTimeStamp(timeStamp)
- return tm.Format("Y-m-d H:i:s")
- }
- //时间戳转 yyyy-MM-dd
- func TimeStampToDate(timeStamp int64) string {
- tm := gtime.NewFromTimeStamp(timeStamp)
- return tm.Format("Y-m-d")
- }
- //获取ip所属城市
- func GetCityByIp(ip string) string {
- if ip == "" {
- return ""
- }
- if ip == "[::1]" || ip == "127.0.0.1" {
- return "内网IP"
- }
- url := "http://whois.pconline.com.cn/ipJson.jsp?json=true&ip=" + ip
- bytes := ghttp.GetBytes(url)
- src := string(bytes)
- srcCharset := "GBK"
- tmp, _ := gcharset.ToUTF8(srcCharset, src)
- json, err := gjson.DecodeToJson(tmp)
- if err != nil {
- return ""
- }
- if json.GetInt("code") == 0 {
- city := json.GetString("city")
- return city
- } else {
- return ""
- }
- }
- //获取附件真实路径
- func GetRealFilesUrl(r *ghttp.Request, path string) (realPath string, err error) {
- if gstr.ContainsI(path, "http") {
- realPath = path
- return
- }
- realPath, err = GetDomain(r)
- if err != nil {
- return
- }
- realPath = realPath + path
- return
- }
- //获取当前请求接口域名
- func GetDomain(r *ghttp.Request) (string, error) {
- pathInfo, err := gurl.ParseURL(r.GetUrl(), -1)
- if err != nil {
- g.Log().Error(err)
- err = gerror.New("解析附件路径失败")
- return "", err
- }
- return fmt.Sprintf("%s://%s:%s/", pathInfo["scheme"], pathInfo["host"], pathInfo["port"]), nil
- }
- //获取附件相对路径
- func GetFilesPath(fileUrl string) (path string, err error) {
- if !gstr.ContainsI(fileUrl, "http") {
- path = fileUrl
- return
- }
- pathInfo, err := gurl.ParseURL(fileUrl, 32)
- if err != nil {
- g.Log().Error(err)
- err = gerror.New("解析附件路径失败")
- return
- }
- path = gstr.TrimLeft(pathInfo["path"], "/")
- return
- }
|