```
// to make it right, let's filter the value of CVV field when we output it
filterCVV := iso8583.FilterField("8", iso8583.FilterFunc(func(in string, data field.Field) string {
if len(in) == 0 {
return in
}
return in[0:1] + strings.Repeat("*", len(in)-1)
}))
The post describes how to create a simple version of the client, but if you're interested in the topic, you can find a production-ready, battle-tested Golang package here: https://github.com/moov-io/iso8583-connection.
And to understand how the whole e2e flow works starting from the seller and finishing with issuer authorizeing the transaction, you can check a demo project here: https://github.com/alovak/cardflow-playground
I tried to simplify PCI DSS compliance by creating a tokenizer solution. As a result I built open source forward/revers proxy that on the fly replaces sensitive data in http(s) requests and responses: https://github.com/vaulty-co/vaulty and docs here: https://docs.vaulty.co/ (with some cookbooks).
I hoped some day to make a business from it :)
Even if I was not able to find any users/customers, I learned a lot: proxies, Golang (encryption, networking, parsing), etc. I started writing it using Ruby, but accidentally got a chance to write in Go for few weeks... and I fell in love with Golang. After 10+ years of Ruby/Rails I thought I'm done as a programmer. But with Go I felt that I love writing code again :)
Building Vaulty was also useful when I wanted to contact some security/fintech company.
This is how I decided to join https://moov.io as SW engineer and continue my journey with Go lang (and fintech and security).
``` // to make it right, let's filter the value of CVV field when we output it filterCVV := iso8583.FilterField("8", iso8583.FilterFunc(func(in string, data field.Field) string { if len(in) == 0 { return in } return in[0:1] + strings.Repeat("*", len(in)-1) }))
// don't forget to apply default filter filters := append(iso8583.DefaultFilters(), filterCVV)
err = iso8583.Describe(requestMessage, os.Stdout, filters...) require.NoError(t, err) ```