From 2c8f8424713fd46393b9e37d8292ef340dde39b9 Mon Sep 17 00:00:00 2001 From: zyd Date: Thu, 18 Jun 2020 15:26:34 +0800 Subject: [PATCH] update --- go.mod | 3 + go.sum | 7 + src/config/conf.go | 8 + src/logger/logger.go | 35 +++ src/model/request/service_field.go | 16 ++ src/model/tables/user.go | 40 ++++ src/service/field.go | 26 ++- src/tools/dataconvertutil/dataconvertutil.go | 212 ++++++++++++++++++ src/tools/public.go | 224 +++++++++++++++++++ 9 files changed, 565 insertions(+), 6 deletions(-) create mode 100644 src/logger/logger.go create mode 100644 src/model/request/service_field.go create mode 100644 src/model/tables/user.go create mode 100644 src/tools/dataconvertutil/dataconvertutil.go create mode 100644 src/tools/public.go diff --git a/go.mod b/go.mod index ff368fd..09b7df1 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module gitlab.wodcloud.com/apaas/apaas-meshproxy go 1.12 require ( + github.com/Chain-Zhang/pinyin v0.1.3 github.com/Chronokeeper/anyxml v0.0.0-20160530174208-54457d8e98c6 // indirect github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 // indirect github.com/CloudyKit/jet v2.1.2+incompatible // indirect @@ -17,6 +18,7 @@ require ( github.com/go-sql-driver/mysql v1.5.0 github.com/lib/pq v1.4.0 github.com/mattn/go-isatty v0.0.8 // indirect + github.com/natefinch/lumberjack v2.0.0+incompatible github.com/onsi/ginkgo v1.10.2 // indirect github.com/onsi/gomega v1.7.0 // indirect github.com/sirupsen/logrus v1.4.2 @@ -27,5 +29,6 @@ require ( github.com/xormplus/core v0.0.0-20200308074340-f3bce19d5f31 github.com/xormplus/xorm v0.0.0-20200410045938-f6b4c1cd3b8b gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect xorm.io/cmd v0.0.0-20200427014343-9ccdb0ebedf7 // indirect ) diff --git a/go.sum b/go.sum index 2f20c97..57ebcd2 100644 --- a/go.sum +++ b/go.sum @@ -3,7 +3,10 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Chain-Zhang/pinyin v0.1.3 h1:RzErNyNwVa8z2sOLCuXSOtVdY/AsARb8mBzI2p2qtnE= +github.com/Chain-Zhang/pinyin v0.1.3/go.mod h1:5iHpt9p4znrnaP59/hfPMnAojajkDxQaP9io+tRMPho= github.com/Chronokeeper/anyxml v0.0.0-20160530174208-54457d8e98c6 h1:Etfj2lhXyrYemgmWzEtEQQb1kezeEXc8jVjkQUyJnWI= github.com/Chronokeeper/anyxml v0.0.0-20160530174208-54457d8e98c6/go.mod h1:YzuYAe2hrrwKXkM9kqjbkTLlkbA+/xw2MA46f1+ENxc= github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4slttB4vD+b9btVEnWgL3Q00OBTzVT8B9C0c= @@ -115,6 +118,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= +github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.2 h1:uqH7bpe+ERSiDa34FDOF7RikN6RzXgduUF8yarlZp94= @@ -233,6 +238,8 @@ gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXa gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v8 v8.18.2 h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ= gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= diff --git a/src/config/conf.go b/src/config/conf.go index 4f010c6..0b8f578 100644 --- a/src/config/conf.go +++ b/src/config/conf.go @@ -29,3 +29,11 @@ const LocalDateTimeFormat string = "2006-01-02 15:04:05" const LocalDateTimeFormatStr string = "20060102150405" const LocalTimeFormat string = "15:04" const LocalDateFormat string = "2006-01-02" + +const ( + TIME_FORMAT = "2006-01-02 15:04:05" + TIME_FORMAT_ONE = "2006.01.02" + TIME_FORMAT_TWO = "20060102150405" + COOKIE_APAAS_NAME = "bgToken" + CLUSTER_TOKEN = "7176d48e4e66ddb3557a82f2dd316a93" +) diff --git a/src/logger/logger.go b/src/logger/logger.go new file mode 100644 index 0000000..9781638 --- /dev/null +++ b/src/logger/logger.go @@ -0,0 +1,35 @@ +package logger + +import ( + "github.com/natefinch/lumberjack" + "github.com/sirupsen/logrus" + "io" + "os" +) + +var Logger *logrus.Logger + +func Init(level logrus.Level, logfile string) { + if Logger == nil { + Logger = logrus.New() + Logger.Level = level + Logger.Formatter = &logrus.JSONFormatter{} + Logger.Out = GetWriter(logfile) + } +} + +func GetWriter(logfile string) io.Writer { + if len(logfile) == 0 { + return os.Stdout + } else { + return &lumberjack.Logger{ + Filename: logfile, + MaxSize: 500, + MaxAge: 1, + MaxBackups: 5, + LocalTime: true, + Compress: true, + } + } + +} diff --git a/src/model/request/service_field.go b/src/model/request/service_field.go new file mode 100644 index 0000000..0f152e6 --- /dev/null +++ b/src/model/request/service_field.go @@ -0,0 +1,16 @@ +package request + +//服务字段 +type ServiceField struct { + Name string `json:"name" vd:"regexp('^\\w*$');msg:'字段编码格式错误'"` + // string 字符串 object 对象 int 整数 float 浮点数 array 数组 boolean 布尔型 file 文件二进制类型 + Type string `json:"field_type" vd:"($=='file' || $=='string'||$=='object'||$=='int'||$=='float'||$=='array'||$=='boolean');msg:sprintf('%s字段类型有误%s',(Name)$,$)"` + ShowType string `json:"show_type"` + Label string `json:"label" vd:"len($)>0 || (Name)$ =='' ;msg:sprintf('%s的字段名称未填写',(Name)$)"` + Descript string `json:"descript"` //vd:"len($)>0;msg:sprintf('%s的字段说明未填写',(Name)$)" + IsSensituve int `json:"is_sensituve"` //是否为敏感字段 + Selected int `json:"selected"` //是否勾选 + Example string `json:"example"` //示例值 + IsMust int `json:"is_must"` //是否必须 + Children []ServiceField `json:"children"` +} diff --git a/src/model/tables/user.go b/src/model/tables/user.go new file mode 100644 index 0000000..e43106f --- /dev/null +++ b/src/model/tables/user.go @@ -0,0 +1,40 @@ +/* +@Time : 2020/4/23 18:19 +@Author : gaoshiyao +@File : user +@Software: GoLand +@Des: +*/ +package tables + +import "time" + +type User struct { + UserId string `json:"user_id" xorm:"not null pk VARCHAR(50)"` + UserName string `json:"user_name" xorm:"VARCHAR(100)"` + Password string `json:"password" xorm:"VARCHAR(100)"` + Phone string `json:"phone" xorm:"VARCHAR(11)"` + Email string `json:"email" xorm:"VARCHAR(30)"` + Oid string `json:"oid" xorm:"VARCHAR(50)"` + CreateUser string `json:"create_user" xorm:"VARCHAR(50)"` + CreateDate time.Time `json:"create_date" xorm:"DATETIME"` + IsAdmin int `json:"is_admin" xorm:"SMALLINT"` + State int `json:"state" xorm:"SMALLINT"` + Position string `json:"position" xorm:"VARCHAR(100)"` + Description string `json:"description" xorm:"VARCHAR(100)"` + Wechat string `json:"wechat" xorm:"VARCHAR(50)"` + Qq string `json:"qq" xorm:"VARCHAR(50)"` + PicturePath string `json:"picture_path" xorm:"VARCHAR(500)"` +} + +func (*User) TableName() string { + return "bg_user" +} + +//简洁的用户信息 +type BriefUserInfo struct { + UserName string `json:"user_name"` + Phone string `json:"phone"` + Oid string `json:"oid"` //组织ID + DepartmentName string `json:"department_name"` //组织名称 +} diff --git a/src/service/field.go b/src/service/field.go index 96bce2e..9e40c96 100644 --- a/src/service/field.go +++ b/src/service/field.go @@ -15,7 +15,9 @@ import ( "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/config" "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/dao" "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/model" + "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/model/request" "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/tools" + "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/tools/dataconvertutil" "strconv" "time" ) @@ -154,11 +156,17 @@ func CallCounts(proxyData model.ProxyData) (err error) { //过滤返回字段 func FiledFilter(proxyData model.ProxyData, respbody []byte) interface{} { - model := make(map[string]interface{}) + fields := []request.ServiceField{} + fields = dataconvertutil.GetResponseField(proxyData.ResFields) + model, arrmodel := dataconvertutil.ConvertJson(fields) realData := make(map[string]interface{}) - json.Unmarshal([]byte(proxyData.ResFields), &model) json.Unmarshal(respbody, &realData) - return Change(model, realData) + if model != nil { + return Change(model, realData) + } else if arrmodel != nil { + return Change(model, realData) + } + return nil } //返回申请字段 @@ -235,9 +243,15 @@ func UpdateCallsCount(applyId string) (err error) { //返回过滤后的敏感字段 func SensitiveFilter(proxyData model.ProxyData, res interface{}) interface{} { - Sensituve_word := make(map[string]interface{}) - json.Unmarshal([]byte(proxyData.Sensituve_word), &Sensituve_word) - return FilterSensituveField(Sensituve_word, res) + fields := []request.ServiceField{} + fields = dataconvertutil.GetResponseField(proxyData.Sensituve_word) + Sensituve_word, arrSensituve_word := dataconvertutil.ConvertJson(fields) + if Sensituve_word != nil { + return FilterSensituveField(Sensituve_word, res) + } else if arrSensituve_word != nil { + return FilterSensituveField(arrSensituve_word, res) + } + return nil } // 过滤敏感字段 diff --git a/src/tools/dataconvertutil/dataconvertutil.go b/src/tools/dataconvertutil/dataconvertutil.go new file mode 100644 index 0000000..b18cea5 --- /dev/null +++ b/src/tools/dataconvertutil/dataconvertutil.go @@ -0,0 +1,212 @@ +package dataconvertutil + +import ( + "encoding/json" + "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/logger" + "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/model/request" + "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/tools" +) + +//字段结构 转json +func ConvertJson(fields []request.ServiceField) (map[string]interface{}, []interface{}) { + m := map[string]interface{}{} + var n []interface{} + if fields == nil { + return m, n + } + for _, field := range fields { + if field.Selected == 1 && field.Type == "object" { + if field.Name == "" { + mm, nn := ConvertJson(field.Children) + if len(nn) != 0 { + n = append(n, nn) + } else { + n = append(n, mm) + } + } else { + mm, nn := ConvertJson(field.Children) + if len(nn) != 0 { + m[field.Name] = nn + } else { + m[field.Name] = mm + } + + } + + } else if field.Selected == 1 && field.Type == "array" { + if len(field.Children) > 0 { + //判断第一个元素是否为对象 如果为对象则名称必定为空 + //第一个元素 要么为对象,要么为基本类型 要么为数组 + if field.Children[0].Type == "object" || field.Children[0].Type == "array" { + + mm, nn := ConvertJson(field.Children[0].Children) + + if field.Name == "" { + if len(nn) != 0 { + n = append(n, nn) + } else { + n = append(n, mm) + } + } else { + + if len(nn) != 0 { + m[field.Name] = nn + } else { + m[field.Name] = mm + } + } + + } else { + + if field.Name != "" { + var aaa []interface{} + m[field.Name] = aaa + } else { + if len(field.Children) > 0 { + switch field.Children[0].Type { + case "string", "text", "file": + n = append(n, field.Children[0].Example) + case "int": + n = append(n, tools.ParseInt(field.Children[0].Example, 0)) + case "float": + n = append(n, tools.ParseFloat64(field.Children[0].Example, 1.00)) + case "boolean": + n = append(n, true) + case "array": + n = append(n, []interface{}{field.Children[0].Example}) + default: + var cc interface{} + n = append(n, cc) + } + } else { + var cc interface{} + n = append(n, cc) + } + + } + + } + } else { + if field.Name != "" { + m[field.Name] = []interface{}{field.Example} + } else { + var cc interface{} + n = append(n, cc) + } + } + + } else if field.Selected == 1 { + m[field.Name] = field.Example + } + } + return m, n +} + +//字段结构 转json +func ConvertJsonAll(fields []request.ServiceField) (map[string]interface{}, []interface{}) { + m := map[string]interface{}{} + var n []interface{} + if fields == nil { + return m, n + } + for _, field := range fields { + if field.Type == "object" { + if field.Name == "" { + mm, nn := ConvertJsonAll(field.Children) + if len(nn) != 0 { + n = append(n, nn) + } else { + n = append(n, mm) + } + } else { + mm, nn := ConvertJsonAll(field.Children) + if len(nn) != 0 { + m[field.Name] = nn + } else { + m[field.Name] = mm + } + + } + + } else if field.Type == "array" { + if len(field.Children) > 0 { + //判断第一个元素是否为对象 如果为对象则名称必定为空 + //第一个元素 要么为对象,要么为基本类型 要么为数组 + if field.Children[0].Type == "object" || field.Children[0].Type == "array" { + + mm, nn := ConvertJsonAll(field.Children[0].Children) + + if field.Name == "" { + if len(nn) != 0 { + n = append(n, nn) + } else { + n = append(n, mm) + } + } else { + + if len(nn) != 0 { + m[field.Name] = nn + } else { + m[field.Name] = mm + } + } + + } else { + + if field.Name != "" { + var aaa []interface{} + m[field.Name] = aaa + } else { + if len(field.Children) > 0 { + switch field.Children[0].Type { + case "string", "text", "file": + n = append(n, field.Children[0].Example) + case "int": + n = append(n, tools.ParseInt(field.Children[0].Example, 0)) + case "float": + n = append(n, tools.ParseFloat64(field.Children[0].Example, 1.00)) + case "boolean": + n = append(n, true) + case "array": + n = append(n, []interface{}{field.Children[0].Example}) + default: + var cc interface{} + n = append(n, cc) + } + } else { + var cc interface{} + n = append(n, cc) + } + + } + + } + } else { + if field.Name != "" { + m[field.Name] = []interface{}{field.Example} + } else { + var cc interface{} + n = append(n, cc) + } + } + + } else if field.Type == "string" || field.Type == "file" { + m[field.Name] = field.Example + } else if field.Type == "int" { + m[field.Name] = tools.ParseInt(field.Example, 0) + } else if field.Type == "float" { + m[field.Name] = tools.ParseFloat64(field.Example, 0.0) + } else if field.Type == "bool" { + m[field.Name] = true + } + } + return m, n +} + +func GetResponseField(jsonstr string) []request.ServiceField { + var res []request.ServiceField + if err := json.Unmarshal([]byte(jsonstr), &res); err != nil { + logger.Logger.Fatal(err) + } + return res +} diff --git a/src/tools/public.go b/src/tools/public.go new file mode 100644 index 0000000..d8fb0e8 --- /dev/null +++ b/src/tools/public.go @@ -0,0 +1,224 @@ +package tools + +import ( + "bytes" + "crypto/md5" + "encoding/json" + "fmt" + "github.com/Chain-Zhang/pinyin" + "github.com/gin-gonic/gin" + "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/config" + "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/model/tables" + "io" + "strconv" + "strings" + "time" +) + +// , http请求 +//func ProxySend(sendType string, url string, body string, header map[string]string) (result *http.Response, err error) { +// if err != nil { +// return result, err +// } +// client := &http.Client{} +// var reqest *http.Request +// if sendType == "GET" || sendType == "DELETE" { +// reqest, _ = http.NewRequest(sendType, url, nil) +// } else if sendType == "POST" || sendType == "PUT" { +// reqest, _ = http.NewRequest(sendType, url, strings.NewReader(body)) +// } +// if header == nil { +// header = make(map[string]string) +// } +// header["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" +// header["Accept-Language"] = "ja,zh-CN;q=0.8,zh;q=0.6" +// header["Connection"] = "keep-alive" +// for k, v := range header { +// reqest.Header.Set(k, v) +// } +// response, errc := client.Do(reqest) +// return response, errc +// //fmt.Println("StatusCode:", response.StatusCode) +// //fmt.Println(response.Request.URL) +// //if errc != nil { +// // return nil, errc +// //} else { +// // defer response.Body.Close() +// // body, erra := ioutil.ReadAll(response.Body) +// // return body, erra +// //} +//} + +//ProxySend , http请求 +//func ProxySendRes(sendType string, url string, body string, header map[string]string) (result []byte, err error) { +// if err != nil { +// return result, err +// } +// client := &http.Client{} +// var reqest *http.Request +// if sendType == "GET" || sendType == "DELETE" { +// reqest, _ = http.NewRequest(sendType, url, nil) +// } else if sendType == "POST" || sendType == "PUT" { +// reqest, _ = http.NewRequest(sendType, url, strings.NewReader(body)) +// } +// if header == nil { +// header = make(map[string]string) +// } +// header["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" +// header["Accept-Language"] = "ja,zh-CN;q=0.8,zh;q=0.6" +// header["Connection"] = "keep-alive" +// for k, v := range header { +// reqest.Header.Set(k, v) +// } +// response, errc := client.Do(reqest) +// if errc != nil { +// return nil, errc +// } else { +// defer response.Body.Close() +// body, erra := ioutil.ReadAll(response.Body) +// if response.StatusCode >= 400 { +// err = errors.New(string(body)) +// return +// } +// return body, erra +// } +//} + +//GetCookieStr , 获取cookie字符串 +//func GetCookieStr(req *http.Request) (str string, err error) { +// cookies := req.Cookies() +// for _, v := range cookies { +// str += v.Name + "=" + v.Value + ";" +// } +// return str, nil +//} + +/** +GB单位转换 +*/ +func Sizeformat(bytesize float64) (float64, string) { + arr := []string{"Bytes", "KiB", "MiB", "GiB", "TiB"} + i := 0 + for bytesize >= 1024 { + bytesize = bytesize / 1024 + i++ + } + return bytesize, arr[i] +} + +func FormatBytes(data string) (res int) { + arr := []string{"T", "G", "M", "K", "Byte"} + var flag bool + for _, v := range arr { + if strings.Contains(data, v) { + flag = true + res, _ = strconv.Atoi(strings.Split(data, v)[0]) + continue + } + if flag { + fmt.Println("=========") + res = res * 1024 + } + } + return +} + +// float 保留两位小数 +func FloatSave2(value float64) float64 { + value, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", value), 64) + return value +} + +func HasValue(arr []string, str string) bool { + for _, v := range arr { + if v == str { + return true + } + } + return false +} + +// 生成流水号 +func CreateLsh(name string, t string) string { + // namespace-unix-class + // 6位随机数 fmt.Sprintf("%06v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000)) + lsh := fmt.Sprintf("%s-%s-%s", name, time.Now().Format(config.TIME_FORMAT_TWO), t) + return lsh +} + +func Md5Pwd(str string) string { + w := md5.New() + io.WriteString(w, str) + md5str := fmt.Sprintf("%x", w.Sum(nil)) + return md5str +} + +func PyFirst(py string) string { + if py == "" { + return "" + } + py, _ = pinyin.New(py).Mode(pinyin.InitialsInCapitals).Split("").Convert() + return strings.ToUpper(string([]rune(py)[0])) +} + +//获取上下文用户信息 +func GetContextUser(c *gin.Context) *tables.User { + if value, exists := c.Get("user_info"); exists { + if user, ok := value.(tables.User); ok { + return &user + } + } + return nil +} + +//获取上线文header信息 +func GetContextHeader(c *gin.Context) map[string]string { + + if value, exists := c.Get("header"); exists { + if header, ok := value.(map[string]string); ok { + return header + } + } + return nil +} + +//获取上线文 COOKIE_APAAS_NAME 内容 +func GetContextApaasToken(c *gin.Context) string { + if value, exists := c.Get(config.COOKIE_APAAS_NAME); exists { + if apaasToken, ok := value.(string); ok { + return apaasToken + } + } + return "" +} + +func ParseInt(val string, defaultVal int) int { + if v, err := strconv.Atoi(val); err != nil { + return defaultVal + } else { + return v + } +} + +func ParseInt64(val string, defaultVal int64) int64 { + if v, err := strconv.ParseInt(val, 10, 64); err != nil { + return defaultVal + } else { + return v + } +} + +func ParseFloat64(val string, defaultVal float64) float64 { + if float, err := strconv.ParseFloat(val, 64); err != nil { + return defaultVal + } else { + return float + } +} + +//格式化打印json +func FormatPrintJson(name string, jsons []byte) { + var str bytes.Buffer + _ = json.Indent(&str, jsons, "", " ") + fmt.Println("\n\n\n=======", name, "=========\n\n\n ", str.String()) +} -- 2.26.0