From 3d0895e94938a95d02828d7d75affc905212c8a6 Mon Sep 17 00:00:00 2001 From: dovholuknf <46322585+dovholuknf@users.noreply.github.com> Date: Thu, 6 Jul 2023 13:02:45 -0400 Subject: [PATCH] allow csr section to be overridden --- ziti/cmd/config_templates/router.yml | 10 +++--- ziti/cmd/create_config.go | 10 ++++++ ziti/cmd/create_config_environment.go | 10 ++++++ ziti/cmd/create_config_router_edge_test.go | 41 ++++++++++++++++++++++ ziti/cmd/create_config_test.go | 9 +++-- ziti/cmd/helpers/env_helpers.go | 20 +++++++++++ ziti/constants/constants.go | 16 +++++++++ 7 files changed, 109 insertions(+), 7 deletions(-) diff --git a/ziti/cmd/config_templates/router.yml b/ziti/cmd/config_templates/router.yml index 482068cb3..fe21107f8 100644 --- a/ziti/cmd/config_templates/router.yml +++ b/ziti/cmd/config_templates/router.yml @@ -58,11 +58,11 @@ csr: {{ else }} edge: csr: - country: US - province: NC - locality: Charlotte - organization: NetFoundry - organizationalUnit: Ziti + country: {{ .Router.Edge.CsrC }} + province: {{ .Router.Edge.CsrST }} + locality: {{ .Router.Edge.CsrL }} + organization: {{ .Router.Edge.CsrO }} + organizationalUnit: {{ .Router.Edge.CsrOU }} sans: dns: - {{ .Router.Edge.AdvertisedHost }} diff --git a/ziti/cmd/create_config.go b/ziti/cmd/create_config.go index 57b573f75..e018aa6e3 100644 --- a/ziti/cmd/create_config.go +++ b/ziti/cmd/create_config.go @@ -162,6 +162,11 @@ type EdgeRouterTemplateValues struct { AdvertisedHost string LanInterface string ListenerBindPort string + CsrC string + CsrST string + CsrL string + CsrO string + CsrOU string } type WSSRouterTemplateValues struct { @@ -278,6 +283,11 @@ func (data *ConfigTemplateValues) populateConfigValues() { // ************* Router Values ************ data.Router.Edge.Port = cmdHelper.GetZitiEdgeRouterPort() data.Router.Edge.ListenerBindPort = cmdHelper.GetZitiEdgeRouterListenerBindPort() + data.Router.Edge.CsrC = cmdHelper.GetZitiEdgeRouterC() + data.Router.Edge.CsrST = cmdHelper.GetZitiEdgeRouterST() + data.Router.Edge.CsrL = cmdHelper.GetZitiEdgeRouterL() + data.Router.Edge.CsrO = cmdHelper.GetZitiEdgeRouterO() + data.Router.Edge.CsrOU = cmdHelper.GetZitiEdgeRouterOU() data.Router.Listener.GetSessionTimeout = constants.DefaultGetSessionTimeout data.Router.Wss.WriteTimeout = foundation.DefaultWsWriteTimeout diff --git a/ziti/cmd/create_config_environment.go b/ziti/cmd/create_config_environment.go index 7e223ed37..098fdb7cb 100644 --- a/ziti/cmd/create_config_environment.go +++ b/ziti/cmd/create_config_environment.go @@ -125,6 +125,11 @@ func NewCmdCreateConfigEnvironment() *cobra.Command { {constants.ZitiRouterIdentityCAVarName, constants.ZitiRouterIdentityCAVarDescription, data.Router.IdentityCA}, {constants.ZitiEdgeRouterIPOverrideVarName, constants.ZitiEdgeRouterIPOverrideVarDescription, data.Router.Edge.IPOverride}, {constants.ZitiEdgeRouterAdvertisedHostVarName, constants.ZitiEdgeRouterAdvertisedHostVarDescription, data.Router.Edge.AdvertisedHost}, + {constants.ZitiEdgeRouterCsrCVarName, constants.ZitiEdgeRouterCsrCVarDescription, data.Router.Edge.CsrC}, + {constants.ZitiEdgeRouterCsrSTVarName, constants.ZitiEdgeRouterCsrSTVarDescription, data.Router.Edge.CsrST}, + {constants.ZitiEdgeRouterCsrLVarName, constants.ZitiEdgeRouterCsrLVarDescription, data.Router.Edge.CsrL}, + {constants.ZitiEdgeRouterCsrOVarName, constants.ZitiEdgeRouterCsrOVarDescription, data.Router.Edge.CsrO}, + {constants.ZitiEdgeRouterCsrOUVarName, constants.ZitiEdgeRouterCsrOUVarDescription, data.Router.Edge.CsrOU}, } // Setup logging @@ -196,6 +201,11 @@ func NewCmdCreateConfigEnvironment() *cobra.Command { sb.WriteString(fmt.Sprintf("%-40s %-50s %s\n", constants.ZitiRouterIdentityCAVarName, constants.ZitiRouterIdentityCAVarDescription, data.Router.IdentityCA)) sb.WriteString(fmt.Sprintf("%-40s %-50s %s\n", constants.ZitiEdgeRouterIPOverrideVarName, constants.ZitiEdgeRouterIPOverrideVarDescription, data.Router.Edge.IPOverride)) sb.WriteString(fmt.Sprintf("%-40s %-50s %s\n", constants.ZitiEdgeRouterAdvertisedHostVarName, constants.ZitiEdgeRouterAdvertisedHostVarDescription, data.Router.Edge.AdvertisedHost)) + sb.WriteString(fmt.Sprintf("%-40s %-50s %s\n", constants.ZitiEdgeRouterCsrCVarName, constants.ZitiEdgeRouterCsrCVarDescription, data.Router.Edge.CsrC)) + sb.WriteString(fmt.Sprintf("%-40s %-50s %s\n", constants.ZitiEdgeRouterCsrSTVarName, constants.ZitiEdgeRouterCsrSTVarDescription, data.Router.Edge.CsrST)) + sb.WriteString(fmt.Sprintf("%-40s %-50s %s\n", constants.ZitiEdgeRouterCsrLVarName, constants.ZitiEdgeRouterCsrLVarDescription, data.Router.Edge.CsrL)) + sb.WriteString(fmt.Sprintf("%-40s %-50s %s\n", constants.ZitiEdgeRouterCsrOVarName, constants.ZitiEdgeRouterCsrOVarDescription, data.Router.Edge.CsrO)) + sb.WriteString(fmt.Sprintf("%-40s %-50s %s\n", constants.ZitiEdgeRouterCsrOUVarName, constants.ZitiEdgeRouterCsrOUVarDescription, data.Router.Edge.CsrOU)) cmd.Long = sb.String() diff --git a/ziti/cmd/create_config_router_edge_test.go b/ziti/cmd/create_config_router_edge_test.go index eebee8619..840cd5870 100644 --- a/ziti/cmd/create_config_router_edge_test.go +++ b/ziti/cmd/create_config_router_edge_test.go @@ -287,3 +287,44 @@ func TestEdgeRouterIPOverrideIsConsumed(t *testing.T) { } assert.True(t, found, "Expected value not found; expected to find value of "+constants.ZitiEdgeRouterIPOverrideVarName+" in edge router config output.") } + +func TestEdgeRouterCsrFields(t *testing.T) { + routerOptions := clearEnvAndInitializeTestData() + routerName := "CstTest" + config, data := createRouterConfig([]string{"edge", "--routerName", routerName}, routerOptions, nil) + // Check that the template values now contains the custom external IP override value + assert.Equal(t, "US", data.Router.Edge.CsrC) + assert.Equal(t, "US", config.Edge.Csr.Country) + assert.Equal(t, "NC", data.Router.Edge.CsrST) + assert.Equal(t, "NC", config.Edge.Csr.Province) + assert.Equal(t, "Charlotte", data.Router.Edge.CsrL) + assert.Equal(t, "Charlotte", config.Edge.Csr.Locality) + assert.Equal(t, "NetFoundry", data.Router.Edge.CsrO) + assert.Equal(t, "NetFoundry", config.Edge.Csr.Organization) + assert.Equal(t, "Ziti", data.Router.Edge.CsrOU) + assert.Equal(t, "Ziti", config.Edge.Csr.OrganizationalUnit) + + C := "C" + ST := "ST" + L := "L" + O := "O" + OU := "OU" + _ = os.Setenv(constants.ZitiEdgeRouterCsrCVarName, C) + _ = os.Setenv(constants.ZitiEdgeRouterCsrSTVarName, ST) + _ = os.Setenv(constants.ZitiEdgeRouterCsrLVarName, L) + _ = os.Setenv(constants.ZitiEdgeRouterCsrOVarName, O) + _ = os.Setenv(constants.ZitiEdgeRouterCsrOUVarName, OU) + + config2, data2 := createRouterConfig([]string{"edge", "--routerName", routerName}, routerOptions, nil) + // Check that the template values now contains the custom external IP override value + assert.Equal(t, C, data2.Router.Edge.CsrC) + assert.Equal(t, C, config2.Edge.Csr.Country) + assert.Equal(t, ST, data2.Router.Edge.CsrST) + assert.Equal(t, ST, config2.Edge.Csr.Province) + assert.Equal(t, L, data2.Router.Edge.CsrL) + assert.Equal(t, L, config2.Edge.Csr.Locality) + assert.Equal(t, O, data2.Router.Edge.CsrO) + assert.Equal(t, O, config2.Edge.Csr.Organization) + assert.Equal(t, OU, data2.Router.Edge.CsrOU) + assert.Equal(t, OU, config2.Edge.Csr.OrganizationalUnit) +} diff --git a/ziti/cmd/create_config_test.go b/ziti/cmd/create_config_test.go index eb6e24c7c..491673722 100644 --- a/ziti/cmd/create_config_test.go +++ b/ziti/cmd/create_config_test.go @@ -64,6 +64,11 @@ func getZitiEnvironmentVariables() []string { "ZITI_PKI_ALT_SERVER_CERT", "ZITI_PKI_ALT_SERVER_KEY", "ZITI_CTRL_EDGE_BIND_ADDRESS", + "ZITI_EDGE_ROUTER_CSR_C", + "ZITI_EDGE_ROUTER_CSR_ST", + "ZITI_EDGE_ROUTER_CSR_L", + "ZITI_EDGE_ROUTER_CSR_O", + "ZITI_EDGE_ROUTER_CSR_OU", } } @@ -115,7 +120,7 @@ func TestNoUnknownOutputEnvVariablesExist(t *testing.T) { assert.Zero(t, len(unknownValues)) for _, value := range unknownValues { - fmt.Printf("The variable %s was found in env command output but was not expected.\n -If this is a new variable, add it to the ZITI env variables list in create_config_test.\n -If this variable was removed, remove the variable from the env command output.\n", value) + fmt.Printf("The variable %s was found in env command output but was not expected.\n -If this is a new variable, add it to the ZITI env variables list in create_config_test.getZitiEnvironmentVariables().\n -If this variable was removed, remove the variable from the env command output.\n", value) } } @@ -194,7 +199,7 @@ func TestAllKnownEnvVariablesAreFoundInHelpOutput(t *testing.T) { assert.Zero(t, len(unfoundVariables)) for _, value := range unfoundVariables { - fmt.Printf("The variable %s was expected in env command's help output but was not found.\n -If this is variable was removed, remove it from the ZITI env variables list in create_config_test.\n -If this is a new variable, add it to the env command's help output.\n", value) + fmt.Printf("The variable %s was expected in env command's help output but was not found.\n -If this is variable was removed, remove it from the ZITI env variables list in create_config_test.getZitiEnvironmentVariables().\n -If this is a new variable, add it to the env command's help output.\n", value) } } diff --git a/ziti/cmd/helpers/env_helpers.go b/ziti/cmd/helpers/env_helpers.go index 4504b174c..d0a584bfd 100644 --- a/ziti/cmd/helpers/env_helpers.go +++ b/ziti/cmd/helpers/env_helpers.go @@ -158,6 +158,26 @@ func GetCtrlEdgeRouterEnrollmentDuration() time.Duration { return time.Duration(retValInt) * time.Minute } +func GetZitiEdgeRouterC() string { + return getFromEnv(constants.ZitiEdgeRouterCsrCVarName, defaultValue(constants.DefaultEdgeRouterCsrC)) +} + +func GetZitiEdgeRouterST() string { + return getFromEnv(constants.ZitiEdgeRouterCsrSTVarName, defaultValue(constants.DefaultEdgeRouterCsrST)) +} + +func GetZitiEdgeRouterL() string { + return getFromEnv(constants.ZitiEdgeRouterCsrLVarName, defaultValue(constants.DefaultEdgeRouterCsrL)) +} + +func GetZitiEdgeRouterO() string { + return getFromEnv(constants.ZitiEdgeRouterCsrOVarName, defaultValue(constants.DefaultEdgeRouterCsrO)) +} + +func GetZitiEdgeRouterOU() string { + return getFromEnv(constants.ZitiEdgeRouterCsrOUVarName, defaultValue(constants.DefaultEdgeRouterCsrOU)) +} + type envVarNotFound func() string func getFromEnv(envVarName string, onNotFound envVarNotFound) string { diff --git a/ziti/constants/constants.go b/ziti/constants/constants.go index 12c657b27..b37d24a70 100644 --- a/ziti/constants/constants.go +++ b/ziti/constants/constants.go @@ -46,6 +46,12 @@ const ( DefaultCtrlEdgeBindAddress = "0.0.0.0" DefaultCtrlEdgeAdvertisedPort = "1280" + + DefaultEdgeRouterCsrC = "US" + DefaultEdgeRouterCsrST = "NC" + DefaultEdgeRouterCsrL = "Charlotte" + DefaultEdgeRouterCsrO = "NetFoundry" + DefaultEdgeRouterCsrOU = "Ziti" ) // Env Var Constants @@ -113,4 +119,14 @@ const ( ZitiEdgeRouterAdvertisedHostVarDescription = "The advertised host of the router" ZitiEdgeRouterListenerBindPortVarName = "ZITI_EDGE_ROUTER_LISTENER_BIND_PORT" ZitiEdgeRouterListenerBindPortVarDescription = "The port a public router will advertise on" + ZitiEdgeRouterCsrCVarName = "ZITI_EDGE_ROUTER_CSR_C" + ZitiEdgeRouterCsrCVarDescription = "The country (C) to use for router CSRs" + ZitiEdgeRouterCsrSTVarName = "ZITI_EDGE_ROUTER_CSR_ST" + ZitiEdgeRouterCsrSTVarDescription = "The state/province (ST) to use for router CSRs" + ZitiEdgeRouterCsrLVarName = "ZITI_EDGE_ROUTER_CSR_L" + ZitiEdgeRouterCsrLVarDescription = "The locality (L) to use for router CSRs" + ZitiEdgeRouterCsrOVarName = "ZITI_EDGE_ROUTER_CSR_O" + ZitiEdgeRouterCsrOVarDescription = "The organization (O) to use for router CSRs" + ZitiEdgeRouterCsrOUVarName = "ZITI_EDGE_ROUTER_CSR_OU" + ZitiEdgeRouterCsrOUVarDescription = "The organization unit to use for router CSRs" )