github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/util/mask_test.go (about)

     1  package util
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/mundipagg/boleto-api/config"
     9  	"github.com/mundipagg/boleto-api/log"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  var jsonParameters = []UtilTestParameter{
    14  	{Input: `{"access_token":"token","token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"access_token":"[REDACTED]"`},
    15  	{Input: `{"refresh_token":"token","token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"refresh_token":"[REDACTED]"`},
    16  	{Input: `{"AUTENTICACAO":"token","token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"AUTENTICACAO":"[REDACTED]"`},
    17  	{Input: `{"CdtrId":"token","token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"CdtrId":"[REDACTED]"`},
    18  	{Input: `{"ticket":"token","token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"ticket":"[REDACTED]"`},
    19  	{Input: `{"nested":{"access_token":"token"},"token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"access_token":"[REDACTED]"`},
    20  	{Input: `{"nested":{"refresh_token":"token"},"token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"refresh_token":"[REDACTED]"`},
    21  	{Input: `{"nested":{"AUTENTICACAO":"token"},"token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"AUTENTICACAO":"[REDACTED]"`},
    22  	{Input: `{"nested":{"CdtrId":"token"},"token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"CdtrId":"[REDACTED]"`},
    23  	{Input: `{"nested":{"ticket":"token"},"token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"ticket":"[REDACTED]"`},
    24  	{Input: `{"nested":"{\"ticket\":\"token\"}","token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"ticket":"[REDACTED]"`},
    25  }
    26  
    27  var xmlParameters = []UtilTestParameter{
    28  	{Input: `<Envelope soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    29  			 <Body><Create dlwmin="http://service.com/">
    30  			 <Response>
    31  			 	<retCode>0</retCode>
    32  				<ticket>token</ticket>
    33  			</Response>
    34  			</Create></Body> </Envelope>`, Expected: `<ticket>[REDACTED]</ticket>`},
    35  	{Input: `<Envelope soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    36  			 <Body><Create dlwmin="http://service.com/">
    37  			 <Response>
    38  			 	<retCode>0</retCode>
    39  				<refresh_token>token</refresh_token>
    40  			</Response>
    41  			</Create></Body> </Envelope>`, Expected: `<refresh_token>[REDACTED]</refresh_token>`},
    42  	{Input: `<Envelope soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    43  			<Body><Create dlwmin="http://service.com/">
    44  			<Response>
    45  				<retCode>0</retCode>
    46  			    <AUTENTICACAO>token</AUTENTICACAO>
    47  		   </Response>
    48  		   </Create></Body> </Envelope>`, Expected: `<AUTENTICACAO>[REDACTED]</AUTENTICACAO>`},
    49  	{Input: `<Envelope soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    50  		   <Body><Create dlwmin="http://service.com/">
    51  		   <Response>
    52  			   <retCode>0</retCode>
    53  			   <CdtrId>token</CdtrId>
    54  		  </Response>
    55  		  </Create></Body> </Envelope>`, Expected: `<CdtrId>[REDACTED]</CdtrId>`},
    56  }
    57  
    58  var queryParamsParameters = []UtilTestParameter{
    59  	{Input: `scope=readonly&grant_type=client_credentials&clientSecret=token`, Expected: `clientSecret=[REDACTED]`},
    60  	{Input: `scope=readonly&grant_type=client_credentials&ticket=token`, Expected: `ticket=[REDACTED]`},
    61  	{Input: `scope=readonly&grant_type=client_credentials&CdtrId=123`, Expected: `CdtrId=[REDACTED]`},
    62  	{Input: `scope=readonly&grant_type=client_credentials&clientId=token`, Expected: `clientId=[REDACTED]`},
    63  }
    64  
    65  var (
    66  	clientId     = "VsKkTASTTdri0"
    67  	clientSecret = "Tkms6VwoPdjLWFCLOLhYt_KbV2hIvdWqmNKQX7XOVclTnigKXmn6CqQMf2UxhVoojmqvXc7fhTCjzKCuX9mxiw2"
    68  )
    69  
    70  func TestMaskJsonContentFieldsWithMaskLogsTrue(t *testing.T) {
    71  	mask := setEnv("true")
    72  
    73  	for _, fact := range jsonParameters {
    74  		result := mask.MaskJsonContentFields(fact.Input.(string))
    75  		assert.Contains(t, result, fact.Expected, "O Payload deve ser mascarado corretamente")
    76  	}
    77  }
    78  
    79  func TestMaskJsonContentFieldsWithMaskLogsFalse(t *testing.T) {
    80  	mask := setEnv("false")
    81  
    82  	for _, fact := range jsonParameters {
    83  		result := mask.MaskJsonContentFields(fact.Input.(string))
    84  		assert.NotContains(t, result, fact.Expected, "O Payload não deve ser mascarado")
    85  	}
    86  }
    87  func TestMaskXmlContentFieldsWithMaskLogsTrue(t *testing.T) {
    88  	mask := setEnv("true")
    89  
    90  	for _, fact := range xmlParameters {
    91  		result := mask.MaskXMLContentFields(fact.Input.(string))
    92  		assert.Contains(t, result, fact.Expected, "O Payload deve ser mascarado corretamente")
    93  	}
    94  }
    95  func TestMaskXmlContentFieldsWithMaskLogsFalse(t *testing.T) {
    96  	mask := setEnv("false")
    97  
    98  	for _, fact := range xmlParameters {
    99  		result := mask.MaskXMLContentFields(fact.Input.(string))
   100  		assert.NotContains(t, result, fact.Expected, "O Payload não deve ser mascarado")
   101  	}
   102  }
   103  
   104  func TestMaskQueryParamsFieldsWithMaskLogsTrue(t *testing.T) {
   105  	mask := setEnv("true")
   106  
   107  	for _, fact := range queryParamsParameters {
   108  		result := mask.MaskQueryParamsContentFields(fact.Input.(string))
   109  		assert.Contains(t, result, fact.Expected, "O payload deve ser mascarado corretamente")
   110  	}
   111  }
   112  func TestMaskQueryParamsFieldsWithMaskLogsFalse(t *testing.T) {
   113  	mask := setEnv("false")
   114  	for _, fact := range queryParamsParameters {
   115  		result := mask.MaskQueryParamsContentFields(fact.Input.(string))
   116  		assert.NotContains(t, result, fact.Expected, "O payload não deve ser mascarado")
   117  	}
   118  }
   119  
   120  func TestQueryParamsToMap(t *testing.T) {
   121  	mask := setEnv("true")
   122  
   123  	queryParamsInput := fmt.Sprintf(`scope=readonly&grant_type=client_credentials&clientId=%v&clientSecret=%v`, clientId, clientSecret)
   124  	mapExpected := queryParamsMapFactory()
   125  
   126  	result := mask.queryParamsStringToMap(queryParamsInput)
   127  	assert.NotNil(t, result)
   128  	assert.Len(t, result, 4)
   129  
   130  	for k, v := range mapExpected {
   131  		assert.Contains(t, result, k)
   132  		assert.Equal(t, v, result[k])
   133  	}
   134  }
   135  
   136  func TestMapToQueryParams(t *testing.T) {
   137  	mask := setEnv("true")
   138  	mapInput := queryParamsMapFactory()
   139  
   140  	result := mask.mapToQueryParams(mapInput)
   141  
   142  	assert.Contains(t, result, "scope=readonly")
   143  	assert.Contains(t, result, "grant_type=client_credentials")
   144  	assert.Contains(t, result, fmt.Sprintf("clientId=%v", clientId))
   145  	assert.Contains(t, result, fmt.Sprintf("clientSecret=%v", clientSecret))
   146  }
   147  
   148  func queryParamsMapFactory() map[string]interface{} {
   149  	m := map[string]interface{}{
   150  		"scope":        "readonly",
   151  		"grant_type":   "client_credentials",
   152  		"clientId":     clientId,
   153  		"clientSecret": clientSecret,
   154  	}
   155  
   156  	return m
   157  }
   158  
   159  func setEnv(maskLogs string) *Mask {
   160  	os.Setenv("MASK_LOGS", maskLogs)
   161  	config.Install(true, true, false)
   162  
   163  	log := log.CreateLog()
   164  	mask := NewMask(log, "")
   165  
   166  	return mask
   167  }