github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/util/connectors.go (about) 1 package util 2 3 import ( 4 "fmt" 5 6 "github.com/mundipagg/boleto-api/config" 7 "github.com/mundipagg/boleto-api/log" 8 9 "errors" 10 "net/http" 11 "strings" 12 13 "github.com/PMoneda/flow" 14 ) 15 16 // LogConector é um connector flow para utilizar as rotinas de log 17 func LogConector(e *flow.ExchangeMessage, u flow.URI, params ...interface{}) error { 18 defer func() { 19 if r := recover(); r != nil { 20 fmt.Println(r) 21 } 22 }() 23 24 var b string 25 26 switch t := e.GetBody().(type) { 27 28 case string: 29 if t == "" { 30 b = "Nenhum retorno do serviço" 31 } else { 32 b = t 33 } 34 case error: 35 b = t.Error() 36 default: 37 b = fmt.Sprintln(t) 38 } 39 40 var content string 41 42 l := params[0].(*log.Log) 43 44 requestType := u.GetOption("type") 45 46 mask := NewMask(l, requestType) 47 48 switch u.GetOption("format") { 49 case "xml": 50 content = mask.MaskXMLContentFields(b) 51 case "json": 52 content = mask.MaskJsonContentFields(b) 53 case "params": 54 content = mask.MaskQueryParamsContentFields(b) 55 default: 56 content = b 57 } 58 59 if len(params) > 0 { 60 if requestType == "request" { 61 l.Request(content, u.GetOption("url"), e.GetHeaderMap()) 62 } 63 if requestType == "response" { 64 l.Response(content, u.GetOption("url"), nil) 65 } 66 } 67 68 return nil 69 } 70 71 //TlsConector is a connector to send https request client certificate Params[0] *http.Transport (http.Transport configuration with certificate files config) 72 func TlsConector(e *flow.ExchangeMessage, u flow.URI, params ...interface{}) error { 73 var b string 74 switch t := e.GetBody().(type) { 75 case string: 76 if t == "" { 77 b = "Nenhum retorno do serviço" 78 } else { 79 b = t 80 } 81 case error: 82 b = t.Error() 83 default: 84 b = fmt.Sprintln(t) 85 } 86 if len(params) > 0 { 87 88 var timeout = params[1].(map[string]string)["timeout"] 89 90 switch t := params[0].(type) { 91 case *http.Transport: 92 var url string 93 var response string 94 var status int 95 var err error 96 97 if config.Get().MockMode { 98 url = strings.Replace(u.GetRaw(), "tls", "http", 1) 99 response, status, err = Post(url, b, timeout, e.GetHeaderMap()) 100 } else { 101 url = strings.Replace(u.GetRaw(), "tls", "https", 1) 102 response, status, err = PostTLS(url, b, timeout, e.GetHeaderMap(), t) 103 } 104 if err != nil { 105 e.SetHeader("error", err.Error()) 106 e.SetBody(err) 107 return err 108 } 109 e.SetHeader("status", fmt.Sprintf("%d", status)) 110 e.SetBody(response) 111 default: 112 return errors.New("invalid data type") 113 } 114 } else { 115 return errors.New("Http Transport is required") 116 } 117 return nil 118 }