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

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

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