diff --git a/authority/provisioner/provisioner.go b/authority/provisioner/provisioner.go index 8cf42953..30bf5d47 100644 --- a/authority/provisioner/provisioner.go +++ b/authority/provisioner/provisioner.go @@ -358,7 +358,7 @@ func DefaultIdentityFunc(ctx context.Context, p Interface, email string, usernam } } usernames = append(usernames, email) - // Some remove duplicate function should be added + usernames = SanitizeStringSlices(usernames) return &Identity{ Usernames: usernames, }, nil @@ -367,6 +367,21 @@ func DefaultIdentityFunc(ctx context.Context, p Interface, email string, usernam } } +func SanitizeStringSlices(original []string) []string { + output := []string{} + seen := make(map[string]bool) + for _, entry := range original { + if entry == "" { + continue + } + if _, value := seen[entry]; !value { + seen[entry] = true + output = append(output, entry) + } + } + return output +} + // MockProvisioner for testing type MockProvisioner struct { Mret1, Mret2, Mret3 interface{}