Commit 5182fa86 authored by 张宇迪's avatar 张宇迪

服务调用(未实计次入库)

parent 12e60eb4
......@@ -17,58 +17,74 @@ var Resp *http.Response
func Proxy(c *gin.Context) {
appId := c.Param("appId")
// TODO 根据appId 获取真实地址
proxyData, err := service.GetRealPath(appId)
if err != nil {
c.Error(err)
return
}
f, _ := forward.New(forward.PassHostHeader(true), forward.ResponseModifier(func(resp *http.Response) error {
Resp = resp
// 判断调用是否到达上限
callflag, sensitiveflag, err := service.QueryCallsCount(appId, proxyData)
if err != nil {
Return(err.Error())
return nil
}
if callflag == false {
Return(`调用达到当日限定次数`)
return nil
}
respbody, _ := ioutil.ReadAll(resp.Body)
//筛选字段
model := make(map[string]interface{})
realData := make(map[string]interface{})
json.Unmarshal([]byte(proxyData.ResFields), &model)
json.Unmarshal(respbody, &realData)
res := service.Change(model, realData)
if err != nil {
Return(err.Error())
return nil
var res interface{}
res = respbody
if proxyData.ResFields != "" {
res = service.FiledFilter(proxyData, respbody)
}
// TODO 筛选过滤敏感字段
if sensitiveflag == false {
Sensituve_word := make(map[string]interface{})
json.Unmarshal([]byte(proxyData.Sensituve_word), &Sensituve_word)
res = service.FilterSensituveField(Sensituve_word, res)
res = service.SensitiveFilter(proxyData, res)
}
Return(res)
return nil
}))
c.Request.URL = testutils.ParseURI(proxyData.RealUrl)
c.Request.RequestURI = proxyData.RealUrl
c.Request.Host = getHost(proxyData.RealUrl)
f.ServeHTTP(c.Writer, c.Request)
}
func Return(res interface{}) {
var b []byte
switch res.(type) {
case []byte:
b = res.([]byte)
case interface{}:
b, _ = json.Marshal(res)
}
Resp.Header.Set("X-Log-By", "Apaas")
l := strconv.Itoa(len(b))
Resp.Header.Set("Content-Length", l)
Resp.Body = ioutil.NopCloser(bytes.NewBuffer(b))
}
......
......@@ -8,6 +8,7 @@
package service
import (
"encoding/json"
"errors"
"fmt"
"gitlab.wodcloud.com/apaas/apaas-meshproxy/src/client"
......@@ -54,7 +55,7 @@ func QueryCallsCount(applyId string, filter model.ProxyData) (call bool, sensiti
return
}
//超过允许访问敏感字段次数
if count+1 > filter.Sensitive_count {
if count+1 > filter.Sensitive_count && filter.Sensituve_word != "" {
sensitiveCall = false
}
expire := GetExpire()
......@@ -76,6 +77,15 @@ func GetExpire() time.Duration {
return subMin
}
//过滤返回字段
func FiledFilter(proxyData model.ProxyData, respbody []byte) interface{} {
model := make(map[string]interface{})
realData := make(map[string]interface{})
json.Unmarshal([]byte(proxyData.ResFields), &model)
json.Unmarshal(respbody, &realData)
return Change(model, realData)
}
//返回申请字段
func Change(model interface{}, returnData interface{}) interface{} {
switch t := model.(type) {
......@@ -148,6 +158,13 @@ func UpdateCallsCount(applyId string) (err error) {
return
}
//返回过滤后的敏感字段
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)
}
// 过滤敏感字段
func FilterSensituveField(model interface{}, returnData interface{}) (body interface{}) {
switch t := model.(type) {
......@@ -165,11 +182,6 @@ func FilterSensituveField(model interface{}, returnData interface{}) (body inter
FilterSensituveField(v, v1)
}
}
// 删除属性
//if !flag {
// fmt.Println("删除属性:", k)
// delete(returnData.(map[string]interface{}), k)
//}
}
break
case []interface{}:
......@@ -189,11 +201,6 @@ func FilterSensituveField(model interface{}, returnData interface{}) (body inter
FilterSensituveField(v1, v2)
}
}
// 删除属性
//if !flag {
// fmt.Println("删除属性:", k)
// delete(v.(map[string]interface{}), k1)
//}
}
}
break
......
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