Sfoglia il codice sorgente

Merge branch 'master' of https://app.yhyue.com/moapp/jybase

wangshan 3 anni fa
parent
commit
00c4fb8cd7
5 ha cambiato i file con 165 aggiunte e 15 eliminazioni
  1. 11 12
      common/common.go
  2. 113 0
      encrypt/aes.go
  3. 0 2
      go.sum
  4. 40 0
      iputil/ip.go
  5. 1 1
      mysql/mysql.go

+ 11 - 12
common/common.go

@@ -672,25 +672,16 @@ func RetainDecimal(v float64, n int) float64 {
 
 //序列化成想要的类型,再断言
 func JsonUnmarshal(m interface{}, s interface{}) interface{} {
-	JsonUnmarshalByErr(m, s)
-	return s
-}
-
-//序列化成想要的类型,再断言
-func JsonUnmarshalByErr(m interface{}, s interface{}) (interface{}, error) {
 	var b []byte
-	var err error
 	if v, ok := m.(string); ok {
 		b = []byte(v)
 	} else if v, ok := m.([]byte); ok {
 		b = v
 	} else {
-		b, err = json.Marshal(m)
-	}
-	if err == nil {
-		err = json.Unmarshal(b, &s)
+		b, _ = json.Marshal(m)
 	}
-	return s, err
+	json.Unmarshal(b, &s)
+	return s
 }
 
 func MapToJson(param map[string]interface{}) string {
@@ -773,3 +764,11 @@ func InterfaceToStr(x interface{}) string {
 	return ret
 
 }
+
+//StrFormat string追加格式化双引号
+func StrFormat(s string) string {
+	if s == "" {
+		return ""
+	}
+	return fmt.Sprintf("\"%s\"", s)
+}

+ 113 - 0
encrypt/aes.go

@@ -0,0 +1,113 @@
+package encrypt
+
+import (
+	"bytes"
+	"crypto/aes"
+	"crypto/cipher"
+	"encoding/base64"
+	"encoding/hex"
+  
+    . "app.yhyue.com/moapp/jybase/common"
+)
+
+type AES_CBC struct {
+	Key string //16位
+	Iv  string //16位
+}
+
+func (a AES_CBC) Encrypt(value string) (string, error) {
+	b, err := a.encrypt(value)
+	if err != nil {
+		return "", err
+	}
+	return base64.StdEncoding.EncodeToString(b), nil
+}
+
+func (a AES_CBC) EncryptHex(value string) (string, error) {
+	b, err := a.encrypt(value)
+	if err != nil {
+		return "", err
+	}
+	return hex.EncodeToString(b), nil
+}
+
+func (a AES_CBC) encrypt(value string) ([]byte, error) {
+	defer Catch()
+	origData := []byte(value)
+	block, err := aes.NewCipher([]byte(a.Key))
+	if err != nil {
+		return nil, err
+	}
+	origData = a.PKCS5Padding(origData, block.BlockSize())
+	// origData = a.ZeroPadding(origData, block.BlockSize())
+	blockMode := cipher.NewCBCEncrypter(block, []byte(a.Iv))
+	crypted := make([]byte, len(origData))
+
+	blockMode.CryptBlocks(crypted, origData)
+	return crypted, nil
+}
+
+func (a AES_CBC) Decrypt(crypted string) (string, error) {
+	decodeData, err := base64.StdEncoding.DecodeString(crypted)
+	return a.decrypt(decodeData, err)
+}
+
+func (a AES_CBC) DecryptHex(crypted string) (string, error) {
+	decodeData, err := hex.DecodeString(crypted)
+	return a.decrypt(decodeData, err)
+}
+
+func (a AES_CBC) decrypt(decodeData []byte, err error) (string, error) {
+	defer Catch()
+	if err != nil {
+		return "", err
+	}
+	block, err := aes.NewCipher([]byte(a.Key))
+	if err != nil {
+		return "", err
+	}
+	//blockSize := block.BlockSize()
+	blockMode := cipher.NewCBCDecrypter(block, []byte(a.Iv))
+	origData := make([]byte, len(decodeData))
+	blockMode.CryptBlocks(origData, decodeData)
+	origData = a.PKCS5UnPadding(origData)
+	// origData = a.ZeroUnPadding(origData)
+	return string(origData), nil
+}
+
+func (a AES_CBC) ZeroPadding(ciphertext []byte, blockSize int) []byte {
+	padding := blockSize - len(ciphertext)%blockSize
+	padtext := bytes.Repeat([]byte{0}, padding)
+	return append(ciphertext, padtext...)
+}
+
+func (a AES_CBC) ZeroUnPadding(origData []byte) []byte {
+	length := len(origData)
+	if length == 0 {
+		return origData
+	}
+	unpadding := int(origData[length-1])
+	if length < unpadding {
+		return origData
+	}
+	return origData[:(length - unpadding)]
+}
+
+func (a AES_CBC) PKCS5Padding(ciphertext []byte, blockSize int) []byte {
+	padding := blockSize - len(ciphertext)%blockSize
+	padtext := bytes.Repeat([]byte{byte(padding)}, padding)
+	return append(ciphertext, padtext...)
+}
+
+func (a AES_CBC) PKCS5UnPadding(origData []byte) []byte {
+	length := len(origData)
+	if length == 0 {
+		return origData
+	}
+	// 去掉最后一个字节 unpadding 次
+	unpadding := int(origData[length-1])
+	if length < unpadding {
+		return origData
+	}
+	return origData[:(length - unpadding)]
+}

+ 0 - 2
go.sum

@@ -55,7 +55,6 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
 github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
 github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
@@ -84,7 +83,6 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
 github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=

+ 40 - 0
iputil/ip.go

@@ -0,0 +1,40 @@
+package iputil
+
+import "net"
+
+// InternalIp returns an internal ip.
+func InternalIp() string {
+	infs, err := net.Interfaces()
+	if err != nil {
+		return ""
+	}
+
+	for _, inf := range infs {
+		if isEthDown(inf.Flags) || isLoopback(inf.Flags) {
+			continue
+		}
+
+		addrs, err := inf.Addrs()
+		if err != nil {
+			continue
+		}
+
+		for _, addr := range addrs {
+			if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
+				if ipnet.IP.To4() != nil {
+					return ipnet.IP.String()
+				}
+			}
+		}
+	}
+
+	return ""
+}
+
+func isEthDown(f net.Flags) bool {
+	return f&net.FlagUp != net.FlagUp
+}
+
+func isLoopback(f net.Flags) bool {
+	return f&net.FlagLoopback == net.FlagLoopback
+}

+ 1 - 1
mysql/mysql.go

@@ -17,7 +17,7 @@ type Mysql struct {
 	UserName     string  //用户名
 	PassWord     string  //密码
 	DBName       string  //数据库名
-	DB           *sql.DB //数据库连接池对象
+	DB           *sql.DB `json:",optional"` //数据库连接池对象
 	MaxOpenConns int     //用于设置最大打开的连接数,默认值为0表示不限制。
 	MaxIdleConns int     //用于设置闲置的连接数。
 }