"src/components/service-info/app-info.vue" did not exist on "87806588144e32643695e9a39c74d5ba1bc3e0d7"
Commit 2c8f8424 authored by 张宇迪's avatar 张宇迪

update

parent a7d0b388
......@@ -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
)
......@@ -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=
......
......@@ -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"
)
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,
}
}
}
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"`
}
/*
@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"` //组织名称
}
......@@ -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
}
// 过滤敏感字段
......
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
}
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())
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment