-
Notifications
You must be signed in to change notification settings - Fork 0
/
mask_example_test.go
75 lines (61 loc) · 1.91 KB
/
mask_example_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package sensitive_test
import (
"errors"
"log"
"regexp"
sensitive "github.com/ln80/struct-sensitive"
"github.com/ln80/struct-sensitive/internal/option"
"github.com/ln80/struct-sensitive/mask"
)
// Example of masking with a custom registered mask (ex: Belgian National Register Number)
func ExampleMask() {
type Profile struct {
Email string `sensitive:"data,kind=email"`
NRN string `sensitive:"data,kind=be_nrn"`
Fullname string `sensitive:"data"`
}
// Define the Belgian National Register Number (be_nrn) mask behavior.
//
// Assuming, based on business requirements, revealing the birth date is acceptable by default.
//
// You can evolve the mask behavior by adding options to the struct.
// However, note that only the default options are used by the [sensitive.Mask] function.
// Alternatively, you can define and apply the mask directly in your code if you need custom behavior for specific cases.
type BeNRNConfig struct {
RevealBirthDate bool
}
BeNRNRegex := regexp.MustCompile(`^(\d{2})\.(\d{2})\.(\d{2})-(\d{3})-(\d{2})$`)
BeNRNMask := func(val string, opts ...func(*mask.Config[BeNRNConfig])) (masked string, err error) {
cfg := mask.DefaultConfig(BeNRNConfig{
RevealBirthDate: true,
})
option.Apply(&cfg, opts)
matches := BeNRNRegex.FindStringSubmatch(val)
if matches == nil {
return "", errors.New("invalid BE_NRN format")
}
if !cfg.Kind.RevealBirthDate {
masked = "**.**.**-***-**"
return
}
masked = matches[1] + "." + matches[2] + "." + matches[3] + "-***-**"
return
}
mask.Register("be_nrn", mask.DefaultMasker(BeNRNMask))
p := Profile{
Email: "[email protected]",
NRN: "85.12.25-123-45",
Fullname: "Eric Prosacco",
}
err := sensitive.Mask(&p)
if err != nil {
log.Fatal(err)
}
print(p)
// Output:
// Profile{
// Email: "*************@example.com",
// NRN: "85.12.25-***-**",
// Fullname: "*************",
// }
}