Files
baseapi/utils/errorwithcode.go
richboo111 c37c869c33 jd decode
2022-10-26 14:33:29 +08:00

129 lines
2.5 KiB
Go

package utils
import (
"crypto/aes"
"encoding/base64"
"fmt"
"strconv"
"strings"
)
type ErrorWithCode struct {
level int
prefixList []string
errMsg string
code string
intCode int
}
func NewErrorCode(errMsg, code string, level ...int) *ErrorWithCode {
retVal := &ErrorWithCode{
errMsg: errMsg,
code: code,
}
retVal.intCode, _ = strconv.Atoi(code)
if len(level) > 0 {
retVal.level = level[0]
}
return retVal
}
func DecryptDESECB(d, key []byte) string {
data, err := base64.StdEncoding.DecodeString(string(d))
if err != nil {
return ""
}
block, err := aes.NewCipher(key)
if err != nil {
return ""
}
bs := block.BlockSize()
if len(data)%bs != 0 {
return ""
}
out := make([]byte, len(data))
dst := out
for len(data) > 0 {
block.Decrypt(dst, data[:bs])
data = data[bs:]
dst = dst[bs:]
}
out = PKCS5UnPadding(out)
return string(out)
}
func PKCS5UnPadding(origData []byte) []byte {
length := len(origData)
unpadding := int(origData[length-1])
return origData[:(length - unpadding)]
}
func NewErrorIntCode(errMsg string, code int, level ...int) *ErrorWithCode {
return NewErrorCode(errMsg, Int2Str(code), level...)
}
func (e *ErrorWithCode) Error() string {
fullErrMsg := e.ErrMsg()
if len(e.prefixList) > 0 {
fullErrMsg = strings.Join(e.prefixList, ",") + ", " + fullErrMsg
}
return fmt.Sprintf("%s level:%d, code:%s", fullErrMsg, e.Level(), e.Code())
}
func (e *ErrorWithCode) String() string {
return e.Error()
}
func (e *ErrorWithCode) Level() int {
return e.level
}
func (e *ErrorWithCode) Code() string {
return e.code
}
func (e *ErrorWithCode) IntCode() int {
return e.intCode
}
func (e *ErrorWithCode) ErrMsg() string {
return e.errMsg
}
func (e *ErrorWithCode) SetErrMsg(errMsg string) {
e.errMsg = errMsg
}
func (e *ErrorWithCode) AddPrefixMsg(prefix string) {
e.prefixList = append(e.prefixList, prefix)
}
func IsErrMatch(err error, strCode string, strList []string) (isMatch bool) {
if err != nil {
if codeErr, ok := err.(*ErrorWithCode); ok {
if strCode == "" || codeErr.Code() == strCode {
isMatch = IsErrMsgMatch(codeErr.ErrMsg(), strList)
}
}
}
return isMatch
}
func IsErrMsgMatch(errMsg string, strList []string) (isMatch bool) {
isMatch = len(strList) == 0
for _, v := range strList {
if strings.Index(errMsg, v) >= 0 {
isMatch = true
break
}
}
return isMatch
}
func GetErrMsg(err error) (errMsg string) {
if errExt, ok := err.(*ErrorWithCode); ok {
errMsg = errExt.ErrMsg()
}
return errMsg
}