From ff600ee05f1ad89d536350d5a84f9fb74fde73a0 Mon Sep 17 00:00:00 2001 From: Adrien Aury <44274230+adrienaury@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:52:54 +0000 Subject: [PATCH] feat: add protections in masks with user defined content --- pkg/add/add.go | 2 +- pkg/addtransient/add-transient.go | 2 +- pkg/hash/hash.go | 2 +- pkg/model/ordered_dict.go | 11 +++++++---- pkg/randomlist/randomlist.go | 2 +- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/pkg/add/add.go b/pkg/add/add.go index 0246125b..9c72cd6b 100755 --- a/pkg/add/add.go +++ b/pkg/add/add.go @@ -38,7 +38,7 @@ func NewMask(value model.Entry, tmpl tmpl.FuncMap, seed int64, seedField string) temp, err := template.NewEngine(tmplstr, tmpl, seed, seedField) return MaskEngine{value, temp}, err } - return MaskEngine{value, nil}, nil + return MaskEngine{model.CleanTypes(value), nil}, nil } // MaskContext add the field diff --git a/pkg/addtransient/add-transient.go b/pkg/addtransient/add-transient.go index 80071a13..4181f549 100644 --- a/pkg/addtransient/add-transient.go +++ b/pkg/addtransient/add-transient.go @@ -38,7 +38,7 @@ func NewMask(value model.Entry, tmpl tmpl.FuncMap, seed int64, seedField string) temp, err := template.NewEngine(tmplstr, tmpl, seed, seedField) return MaskEngine{value, temp}, err } - return MaskEngine{value, nil}, nil + return MaskEngine{model.CleanTypes(value), nil}, nil } // MaskContext add the field diff --git a/pkg/hash/hash.go b/pkg/hash/hash.go index fca4a917..09fb4795 100755 --- a/pkg/hash/hash.go +++ b/pkg/hash/hash.go @@ -34,7 +34,7 @@ type MaskEngine struct { // NewMaskSeeded create a MaskRandomList with a seed func NewMask(list []model.Entry) MaskEngine { // nolint: gosec - return MaskEngine{list} + return MaskEngine{model.CleanTypes(list).([]model.Entry)} } // Mask choose a mask value by hash diff --git a/pkg/model/ordered_dict.go b/pkg/model/ordered_dict.go index e9412566..d745ad58 100644 --- a/pkg/model/ordered_dict.go +++ b/pkg/model/ordered_dict.go @@ -96,15 +96,18 @@ func CleanTypes(inter interface{}) interface{} { dict.Set(key, CleanTypes(value)) } return dict + case []Entry: + tab := make([]Entry, 0, len(typedInter)) + for _, item := range typedInter { + tab = append(tab, CleanTypes(item)) + } + return tab case []interface{}: - tab := []Entry{} - + tab := make([]Entry, 0, len(typedInter)) for _, item := range typedInter { tab = append(tab, CleanTypes(item)) } - return tab - case json.Number: resFloat64, err := typedInter.Float64() diff --git a/pkg/randomlist/randomlist.go b/pkg/randomlist/randomlist.go index af889c02..3eb8edd3 100755 --- a/pkg/randomlist/randomlist.go +++ b/pkg/randomlist/randomlist.go @@ -35,7 +35,7 @@ type MaskEngine struct { // NewMaskSeeded create a MaskRandomList with a seed func NewMask(list []model.Entry, seed int64, seeder model.Seeder) MaskEngine { // nolint: gosec - return MaskEngine{rand.New(rand.NewSource(seed)), seeder, list} + return MaskEngine{rand.New(rand.NewSource(seed)), seeder, model.CleanTypes(list).([]model.Entry)} } // Mask choose a mask value randomly