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  }