From a10554966e8a85096ad8327d49c5ccf663595209 Mon Sep 17 00:00:00 2001 From: wesleymccollam Date: Mon, 3 Mar 2025 15:10:03 -0500 Subject: [PATCH 1/8] add pingcli prefix and remove any preceding numbers in resource name --- internal/connector/common/common_utils.go | 2 +- internal/connector/exportable_resource.go | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/connector/common/common_utils.go b/internal/connector/common/common_utils.go index b54012a7..34005d0a 100644 --- a/internal/connector/common/common_utils.go +++ b/internal/connector/common/common_utils.go @@ -65,7 +65,7 @@ func WriteFiles(exportableResources []connector.ExportableResource, format, outp } for _, importBlock := range *importBlocks { - // Sanitize import block "to". Make lowercase, remove special chars, convert space to underscore + // Sanitize import block "to". Make lowercase, remove special chars, convert space to underscore, remove prefixed number(s) importBlock.Sanitize() switch format { diff --git a/internal/connector/exportable_resource.go b/internal/connector/exportable_resource.go index 184f1c57..29549d6d 100644 --- a/internal/connector/exportable_resource.go +++ b/internal/connector/exportable_resource.go @@ -44,8 +44,10 @@ func (b *ImportBlock) Sanitize() { b.ResourceName = strings.ReplaceAll(b.ResourceName, ".", "_") // Remove all non-Alphanumeric characters/non-underscores b.ResourceName = regexp.MustCompile(`[^a-zA-Z0-9_]+`).ReplaceAllString(b.ResourceName, "") + // Remove all numbers in beginning of string + b.ResourceName = regexp.MustCompile(`^\d+`).ReplaceAllString(b.ResourceName, "") // Make everything lowercase - b.ResourceName = strings.ToLower(b.ResourceName) + b.ResourceName = "pingcli-" + strings.ToLower(b.ResourceName) } func (b *ImportBlock) Equals(a ImportBlock) bool { From 29a7780949ea9227cc0689690d3182486dd797c2 Mon Sep 17 00:00:00 2001 From: wesleymccollam Date: Mon, 3 Mar 2025 15:23:32 -0500 Subject: [PATCH 2/8] correct comment line --- internal/connector/exportable_resource.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/connector/exportable_resource.go b/internal/connector/exportable_resource.go index 29549d6d..79e57da3 100644 --- a/internal/connector/exportable_resource.go +++ b/internal/connector/exportable_resource.go @@ -46,7 +46,7 @@ func (b *ImportBlock) Sanitize() { b.ResourceName = regexp.MustCompile(`[^a-zA-Z0-9_]+`).ReplaceAllString(b.ResourceName, "") // Remove all numbers in beginning of string b.ResourceName = regexp.MustCompile(`^\d+`).ReplaceAllString(b.ResourceName, "") - // Make everything lowercase + // Prefix resource names with pingcli- b.ResourceName = "pingcli-" + strings.ToLower(b.ResourceName) } From 2dd4e44f0f818baf3b91b493c42aea6db3ec117a Mon Sep 17 00:00:00 2001 From: wesleymccollam Date: Tue, 4 Mar 2025 12:53:58 -0500 Subject: [PATCH 3/8] hexidecimal encode special chacters, additional dash on pingcli prefix --- internal/connector/exportable_resource.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/connector/exportable_resource.go b/internal/connector/exportable_resource.go index 79e57da3..855c4763 100644 --- a/internal/connector/exportable_resource.go +++ b/internal/connector/exportable_resource.go @@ -42,12 +42,12 @@ func (b *ImportBlock) Sanitize() { b.ResourceName = strings.ReplaceAll(b.ResourceName, "-", "_") // Replace period char with underscores b.ResourceName = strings.ReplaceAll(b.ResourceName, ".", "_") - // Remove all non-Alphanumeric characters/non-underscores - b.ResourceName = regexp.MustCompile(`[^a-zA-Z0-9_]+`).ReplaceAllString(b.ResourceName, "") - // Remove all numbers in beginning of string - b.ResourceName = regexp.MustCompile(`^\d+`).ReplaceAllString(b.ResourceName, "") - // Prefix resource names with pingcli- - b.ResourceName = "pingcli-" + strings.ToLower(b.ResourceName) + // Hexidecimal encode special characters + b.ResourceName = regexp.MustCompile(`[^0-9A-Za-z_\-]`).ReplaceAllStringFunc(b.ResourceName, func(s string) string { + return fmt.Sprintf("-%04X-", s) + }) + // Prefix resource names with pingcli-- + b.ResourceName = "pingcli--" + strings.ToLower(b.ResourceName) } func (b *ImportBlock) Equals(a ImportBlock) bool { From 079ed5de4953c1f53915132dfc689b2399e0cdd9 Mon Sep 17 00:00:00 2001 From: wesleymccollam Date: Tue, 4 Mar 2025 13:06:56 -0500 Subject: [PATCH 4/8] allow hexidecimal encoding on spaces, bump ubuntu version on codeql workflow --- .github/workflows/codeql.yaml | 2 +- internal/connector/exportable_resource.go | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yaml b/.github/workflows/codeql.yaml index 18b96bb3..cc00ae04 100644 --- a/.github/workflows/codeql.yaml +++ b/.github/workflows/codeql.yaml @@ -24,7 +24,7 @@ on: jobs: analyze: name: Analyze - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: diff --git a/internal/connector/exportable_resource.go b/internal/connector/exportable_resource.go index 855c4763..ae93294b 100644 --- a/internal/connector/exportable_resource.go +++ b/internal/connector/exportable_resource.go @@ -36,8 +36,6 @@ type ExportableResource interface { } func (b *ImportBlock) Sanitize() { - // Replace spaces with underscores - b.ResourceName = strings.ReplaceAll(b.ResourceName, " ", "_") // Replace dashes with underscores b.ResourceName = strings.ReplaceAll(b.ResourceName, "-", "_") // Replace period char with underscores From c93efc702a47caebc69a61d33cece8a9793c7930 Mon Sep 17 00:00:00 2001 From: wesleymccollam Date: Tue, 4 Mar 2025 13:26:24 -0500 Subject: [PATCH 5/8] update comment line --- internal/connector/common/common_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/connector/common/common_utils.go b/internal/connector/common/common_utils.go index 34005d0a..02432464 100644 --- a/internal/connector/common/common_utils.go +++ b/internal/connector/common/common_utils.go @@ -65,7 +65,7 @@ func WriteFiles(exportableResources []connector.ExportableResource, format, outp } for _, importBlock := range *importBlocks { - // Sanitize import block "to". Make lowercase, remove special chars, convert space to underscore, remove prefixed number(s) + // Sanitize import block "to". Add pingcli-- prefix, hexidecimal encode special chars and spaces importBlock.Sanitize() switch format { From 85bc21e439853d71606de3e0f0974849661aa2f8 Mon Sep 17 00:00:00 2001 From: wesleymccollam Date: Tue, 4 Mar 2025 13:28:11 -0500 Subject: [PATCH 6/8] remove unneeded replacements --- internal/connector/exportable_resource.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/internal/connector/exportable_resource.go b/internal/connector/exportable_resource.go index ae93294b..c715abdb 100644 --- a/internal/connector/exportable_resource.go +++ b/internal/connector/exportable_resource.go @@ -36,10 +36,6 @@ type ExportableResource interface { } func (b *ImportBlock) Sanitize() { - // Replace dashes with underscores - b.ResourceName = strings.ReplaceAll(b.ResourceName, "-", "_") - // Replace period char with underscores - b.ResourceName = strings.ReplaceAll(b.ResourceName, ".", "_") // Hexidecimal encode special characters b.ResourceName = regexp.MustCompile(`[^0-9A-Za-z_\-]`).ReplaceAllStringFunc(b.ResourceName, func(s string) string { return fmt.Sprintf("-%04X-", s) From f0ee53cf5f705f03ee93ca84cc4153fc4015a9b7 Mon Sep 17 00:00:00 2001 From: wesleymccollam Date: Tue, 4 Mar 2025 13:30:50 -0500 Subject: [PATCH 7/8] do not lowercase resource name --- internal/connector/exportable_resource.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/connector/exportable_resource.go b/internal/connector/exportable_resource.go index c715abdb..e0bc6a91 100644 --- a/internal/connector/exportable_resource.go +++ b/internal/connector/exportable_resource.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "regexp" - "strings" pingoneGoClient "github.com/patrickcping/pingone-go-sdk-v2/pingone" pingfederateGoClient "github.com/pingidentity/pingfederate-go-client/v1210/configurationapi" @@ -41,7 +40,7 @@ func (b *ImportBlock) Sanitize() { return fmt.Sprintf("-%04X-", s) }) // Prefix resource names with pingcli-- - b.ResourceName = "pingcli--" + strings.ToLower(b.ResourceName) + b.ResourceName = "pingcli--" + b.ResourceName } func (b *ImportBlock) Equals(a ImportBlock) bool { From 0af2b133819f84b72608e03027362166b9a9df89 Mon Sep 17 00:00:00 2001 From: wesleymccollam Date: Tue, 4 Mar 2025 14:27:45 -0500 Subject: [PATCH 8/8] add sanitize function test --- .../connector/exportable_resource_test.go | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 internal/connector/exportable_resource_test.go diff --git a/internal/connector/exportable_resource_test.go b/internal/connector/exportable_resource_test.go new file mode 100644 index 00000000..a6aec148 --- /dev/null +++ b/internal/connector/exportable_resource_test.go @@ -0,0 +1,22 @@ +package connector_test + +import ( + "testing" + + "github.com/pingidentity/pingcli/internal/connector" +) + +// Test sanitization of resource name +func TestSanitize(t *testing.T) { + sanitizedResourceName := "pingcli--Customer-0020-HTML-0020-Form-0020--0028-PF-0029-" + + importBlock := connector.ImportBlock{ + ResourceName: "Customer HTML Form (PF)", + } + + importBlock.Sanitize() + + if importBlock.ResourceName != sanitizedResourceName { + t.Errorf("Sanitize function test failed") + } +}