From b61b2a3e54effde12af4ed58ebb5ab219ca31bee Mon Sep 17 00:00:00 2001 From: Sean <1661003+spbsoluble@users.noreply.github.com> Date: Tue, 10 Sep 2024 11:03:29 -0700 Subject: [PATCH] v1.5.0 Squash (#208) * fix(store-types): Store type create omits empty fields. * fix(pam-types): `types-list` does not crash on nil httpResponse. * chore: Update license year, and bump AKV runner go version * fix(tests): Remove "ProviderTypeParams" from pam-types tests for KFC v11.0.0+ * fix(tests): Fix nil pointer issues on tests. * feat(stores): `stores export` now allows for `--all` and user interactive exports * feat(ci): Add KFC v12.0.0 tests. * fix(storetypes): Update all store type definitions. * fix(storetypes): Update `AzureAppGw`, `CiscoAsa`, `CitrixAdc`, `PaloAlto`, and `WinSql` * fix(store-types): Update `BIPCamera` definition with correct `Capability` and remove unsupported operations. * fix(cli): `stores export` supports paging. * feat(cli): Add flag `--offline` that will prevent `kfutil` from reaching out to GitHub for latest releases of resources like store type definitions. * chore(docs): Update docs with `--offline` flag * fix(cli): Set zerolog to disabled on init to prevent logs from going out before the `--debug` flag is evaluated. * fix(cli): Use embedded store-types data on init to prevent online lookup until called. --- .github/workflows/tests.yml | 165 +- CHANGELOG.md | 20 + cmd/constants.go | 28 +- cmd/helpers.go | 12 +- cmd/pam_test.go | 237 +- cmd/root.go | 151 +- cmd/storeTypes.go | 193 +- cmd/storeTypes_test.go | 324 +- cmd/store_types.json | 3653 +++++++++++++++++ cmd/stores.go | 15 +- cmd/stores_test.go | 248 +- cmd/test.go | 51 +- docs/kfutil.md | 3 +- docs/kfutil_completion.md | 3 +- docs/kfutil_completion_bash.md | 3 +- docs/kfutil_completion_fish.md | 3 +- docs/kfutil_completion_powershell.md | 3 +- docs/kfutil_completion_zsh.md | 3 +- docs/kfutil_containers.md | 3 +- docs/kfutil_containers_get.md | 3 +- docs/kfutil_containers_list.md | 3 +- docs/kfutil_export.md | 3 +- docs/kfutil_helm.md | 3 +- docs/kfutil_helm_uo.md | 3 +- docs/kfutil_import.md | 3 +- docs/kfutil_login.md | 3 +- docs/kfutil_logout.md | 3 +- docs/kfutil_orchs.md | 3 +- docs/kfutil_orchs_approve.md | 3 +- docs/kfutil_orchs_disapprove.md | 3 +- docs/kfutil_orchs_ext.md | 3 +- docs/kfutil_orchs_get.md | 3 +- docs/kfutil_orchs_list.md | 3 +- docs/kfutil_orchs_logs.md | 3 +- docs/kfutil_orchs_reset.md | 3 +- docs/kfutil_pam.md | 3 +- docs/kfutil_pam_create.md | 3 +- docs/kfutil_pam_delete.md | 3 +- docs/kfutil_pam_get.md | 3 +- docs/kfutil_pam_list.md | 3 +- docs/kfutil_pam_types-create.md | 3 +- docs/kfutil_pam_types-list.md | 3 +- docs/kfutil_pam_update.md | 3 +- docs/kfutil_status.md | 3 +- docs/kfutil_store-types.md | 3 +- docs/kfutil_store-types_create.md | 5 +- docs/kfutil_store-types_delete.md | 3 +- docs/kfutil_store-types_get.md | 3 +- docs/kfutil_store-types_list.md | 3 +- docs/kfutil_store-types_templates-fetch.md | 3 +- docs/kfutil_stores.md | 3 +- docs/kfutil_stores_delete.md | 3 +- docs/kfutil_stores_export.md | 3 +- docs/kfutil_stores_get.md | 3 +- docs/kfutil_stores_import.md | 3 +- docs/kfutil_stores_import_csv.md | 3 +- .../kfutil_stores_import_generate-template.md | 3 +- docs/kfutil_stores_inventory.md | 3 +- docs/kfutil_stores_inventory_add.md | 3 +- docs/kfutil_stores_inventory_remove.md | 3 +- docs/kfutil_stores_inventory_show.md | 3 +- docs/kfutil_stores_list.md | 3 +- docs/kfutil_stores_rot.md | 3 +- docs/kfutil_stores_rot_audit.md | 3 +- docs/kfutil_stores_rot_generate-template.md | 3 +- docs/kfutil_stores_rot_reconcile.md | 3 +- docs/kfutil_version.md | 3 +- go.mod | 34 +- go.sum | 83 +- install.sh | 1 + main.go | 8 + store_types.json | 2105 +++++++++- 72 files changed, 6743 insertions(+), 752 deletions(-) create mode 100644 cmd/store_types.json diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8580a26f..fddeab9c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,14 +1,14 @@ name: go tests on: -# workflow_dispatch: -# workflow_run: -# workflows: -# - "Check and Update Package Version" -# types: -# - completed -# branches: -# - "*" + # workflow_dispatch: + # workflow_run: + # workflows: + # - "Check and Update Package Version" + # types: + # - completed + # branches: + # - "*" push: branches: - '*' @@ -142,25 +142,6 @@ jobs: run: echo "Running tests for KF 11.x.x" ### Store Type Tests - Test_StoreTypes_KFC_11_2_0: - runs-on: ubuntu-latest - needs: - - build - - kf_11_x_x - env: - SECRET_NAME: "command-config-1120-clean" - KEYFACTOR_HOSTNAME: "int1120-test-clean.kfdelivery.com" - KEYFACTOR_DOMAIN: "command" - KEYFACTOR_USERNAME: ${{ secrets.LAB_USERNAME }} - KEYFACTOR_PASSWORD: ${{ secrets.LAB_PASSWORD }} - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Run tests - run: | - unset KFUTIL_DEBUG - go test -v ./cmd -run "^Test_StoreTypes*" - Test_StoreTypes_KFC_11_1_2: runs-on: ubuntu-latest needs: @@ -182,15 +163,15 @@ jobs: ### Store Tests - Test_Stores_KFC_11_2_0: + Test_Stores_KFC_11_1_2: runs-on: ubuntu-latest needs: - build - kf_11_x_x - - Test_StoreTypes_KFC_11_2_0 + - Test_StoreTypes_KFC_11_1_2 env: - SECRET_NAME: "command-config-1120" - KEYFACTOR_HOSTNAME: "integrations1120-lab.kfdelivery.com" + SECRET_NAME: "command-config-1112" + KEYFACTOR_HOSTNAME: "integrations1112-lab.kfdelivery.com" KEYFACTOR_DOMAIN: "command" KEYFACTOR_USERNAME: ${{ secrets.LAB_USERNAME }} KEYFACTOR_PASSWORD: ${{ secrets.LAB_PASSWORD }} @@ -199,7 +180,9 @@ jobs: uses: actions/checkout@v4 - name: Run tests run: go test -v ./cmd -run "^Test_Stores_*" - Test_Stores_KFC_11_1_2: + + ### PAM Tests + Test_PAM_KFC_11_1_2: runs-on: ubuntu-latest needs: - build @@ -215,18 +198,50 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - name: Run tests - run: go test -v ./cmd -run "^Test_Stores_*" + run: | + unset KFUTIL_DEBUG + go test -v ./cmd -run "^Test_PAM*" - ### PAM Tests - Test_PAM_KFC_11_2_0: + + ### PAM Tests AKV Auth Provider + Test_AKV_PAM_KFC_11_1_2: + runs-on: self-hosted + needs: + - Test_PAM_KFC_11_1_2 + env: + SECRET_NAME: "command-config-1112-az" + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: "1.21" + - name: Install dependencies + run: go mod download && go mod tidy + - name: Get secret from Azure Key Vault + run: | + . ./examples/auth/akv/akv_auth.sh + cat $HOME/.keyfactor/command_config.json + - name: Install kfutil + run: | + make install + - name: Run tests + run: | + go test -v ./cmd -run "^Test_PAM*" + + + + ## KFC 12.x.x + ### Store Type Tests + Test_StoreTypes_KFC_12_2_0: runs-on: ubuntu-latest needs: - build - kf_11_x_x - - Test_StoreTypes_KFC_11_2_0 env: - SECRET_NAME: "command-config-1120" - KEYFACTOR_HOSTNAME: "integrations1120-lab.kfdelivery.com" + SECRET_NAME: "command-config-1220-clean" + KEYFACTOR_HOSTNAME: "int1220-test-clean.kfdelivery.com" KEYFACTOR_DOMAIN: "command" KEYFACTOR_USERNAME: ${{ secrets.LAB_USERNAME }} KEYFACTOR_PASSWORD: ${{ secrets.LAB_PASSWORD }} @@ -236,18 +251,19 @@ jobs: - name: Run tests run: | unset KFUTIL_DEBUG - go test -v ./cmd -run "^Test_PAM*" + go test -v ./cmd -run "^Test_StoreTypes*" - Test_PAM_KFC_11_1_2: + ### Store Tests + Test_Stores_KFC_12_2_0: runs-on: ubuntu-latest needs: - build - kf_11_x_x - - Test_StoreTypes_KFC_11_1_2 + - Test_StoreTypes_KFC_12_2_0 env: - SECRET_NAME: "command-config-1112" - KEYFACTOR_HOSTNAME: "integrations1112-lab.kfdelivery.com" + SECRET_NAME: "command-config-1220" + KEYFACTOR_HOSTNAME: "integrations1220-lab.kfdelivery.com" KEYFACTOR_DOMAIN: "command" KEYFACTOR_USERNAME: ${{ secrets.LAB_USERNAME }} KEYFACTOR_PASSWORD: ${{ secrets.LAB_PASSWORD }} @@ -255,45 +271,37 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - name: Run tests - run: | - unset KFUTIL_DEBUG - go test -v ./cmd -run "^Test_PAM*" - + run: go test -v ./cmd -run "^Test_Stores_*" - ### PAM Tests AKV Auth Provider - Test_AKV_PAM_KFC_11_2_0: - runs-on: self-hosted + ### PAM Tests + Test_PAM_KFC_12_2_0: + runs-on: ubuntu-latest needs: - - Test_PAM_KFC_11_2_0 + - build + - kf_11_x_x + - Test_StoreTypes_KFC_12_2_0 env: - SECRET_NAME: "command-config-1120-az" + SECRET_NAME: "command-config-1220" + KEYFACTOR_HOSTNAME: "integrations1220-lab.kfdelivery.com" + KEYFACTOR_DOMAIN: "command" + KEYFACTOR_USERNAME: ${{ secrets.LAB_USERNAME }} + KEYFACTOR_PASSWORD: ${{ secrets.LAB_PASSWORD }} steps: - name: Checkout code uses: actions/checkout@v4 - - name: Set up Go - uses: actions/setup-go@v5 - with: - go-version: "1.21" - - name: Install dependencies - run: go mod download && go mod tidy - - name: Get secret from Azure Key Vault - run: | - . ./examples/auth/akv/akv_auth.sh - cat $HOME/.keyfactor/command_config.json - - name: Install kfutil - run: | - make install - name: Run tests run: | + unset KFUTIL_DEBUG go test -v ./cmd -run "^Test_PAM*" - Test_AKV_PAM_KFC_11_1_2: + ### PAM Tests AKV Auth Provider + Test_AKV_PAM_KFC_12_2_0: runs-on: self-hosted needs: - - Test_PAM_KFC_11_1_2 + - Test_PAM_KFC_12_2_0 env: - SECRET_NAME: "command-config-1112-az" + SECRET_NAME: "command-config-1220-az" steps: - name: Checkout code uses: actions/checkout@v4 @@ -315,16 +323,21 @@ jobs: go test -v ./cmd -run "^Test_PAM*" + # Tester Install Script Test_Install_Script: - runs-on: ubuntu-latest - steps: - - name: Test Quick Install Script - run: | - bash <(curl -s https://raw.githubusercontent.com/Keyfactor/kfutil/${GITHUB_REF_NAME}/install.sh) - which kfutil - kfutil version - rm $(which kfutil) + runs-on: ubuntu-latest + steps: + - name: Test Quick Install Script + run: | + sudo apt update && sudo apt upgrade -y && sudo apt install -y curl wget unzip jq openssl && sudo apt clean + echo curl -s "https://raw.githubusercontent.com/Keyfactor/kfutil/${GITHUB_REF_NAME}/install.sh" + GITHUB_REF_NAME_ENCODED=$(echo -n "${GITHUB_REF_NAME}" | jq -sRr @uri) + VERIFY_CHECKSUM=0 + bash <(curl -s "https://raw.githubusercontent.com/Keyfactor/kfutil/${GITHUB_REF_NAME_ENCODED}/install.sh") + which kfutil + kfutil version + rm $(which kfutil) # Package Tests Test_Kfutil_pkg: diff --git a/CHANGELOG.md b/CHANGELOG.md index fe29d84f..6243e178 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ +# v1.5.0 + +## Features + +### CLI + +- The CLI will now embed the store_type definitions for each release of `kfutil`. +- Add global flag `--offline` to allow for offline mode. This will prevent the CLI from making requests to GitHub for + store types and store type templates and will use embedded store types and templates instead. + +## Fixes + +### Stores + +- `stores export --all`: Correctly paginates through all stores when exporting. + +### CLI + +- No longer log before the `--debug` flag is evaluated. + # v1.4.0 ## Features diff --git a/cmd/constants.go b/cmd/constants.go index b0caea3f..ee900c3c 100644 --- a/cmd/constants.go +++ b/cmd/constants.go @@ -16,19 +16,21 @@ package cmd import "fmt" const ( - ColorRed = "\033[31m" - ColorWhite = "\033[37m" - DefaultAPIPath = "KeyfactorAPI" - DefaultConfigFileName = "command_config.json" - FailedAuthMsg = "Login failed!" - SuccessfulAuthMsg = "Login successful!" - XKeyfactorRequestedWith = "APIClient" - XKeyfactorApiVersion = "1" - FlagGitRef = "git-ref" - FlagFromFile = "from-file" - DebugFuncEnter = "entered: %s" - DebugFuncExit = "exiting: %s" - DebugFuncCall = "calling: %s" + ColorRed = "\033[31m" + ColorWhite = "\033[37m" + DefaultAPIPath = "KeyfactorAPI" + DefaultConfigFileName = "command_config.json" + DefaultStoreTypesFileName = "store_types.json" + FailedAuthMsg = "Login failed!" + SuccessfulAuthMsg = "Login successful!" + XKeyfactorRequestedWith = "APIClient" + XKeyfactorApiVersion = "1" + FlagGitRef = "git-ref" + FlagFromFile = "from-file" + DebugFuncEnter = "entered: %s" + DebugFuncExit = "exiting: %s" + DebugFuncCall = "calling: %s" + MinHttpTimeout = 3 ) var ProviderTypeChoices = []string{ diff --git a/cmd/helpers.go b/cmd/helpers.go index 0a07df81..74c79d0d 100644 --- a/cmd/helpers.go +++ b/cmd/helpers.go @@ -19,16 +19,17 @@ import ( "encoding/json" "errors" "fmt" - "github.com/google/uuid" - "github.com/rs/zerolog" - "github.com/rs/zerolog/log" - "github.com/spf13/cobra" "io" "net/http" "os" "path/filepath" "strconv" "time" + + "github.com/google/uuid" + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" + "github.com/spf13/cobra" ) func boolToPointer(b bool) *bool { @@ -180,7 +181,6 @@ func getCurrentTime(f string) string { func informDebug(debugFlag bool) { debugModeEnabled := checkDebug(debugFlag) - zerolog.SetGlobalLevel(zerolog.Disabled) if debugModeEnabled { //zerolog.SetGlobalLevel(zerolog.InfoLevel) zerolog.SetGlobalLevel(zerolog.DebugLevel) @@ -189,8 +189,10 @@ func informDebug(debugFlag bool) { func initLogger() { zerolog.TimeFieldFormat = zerolog.TimeFormatUnix + zerolog.SetGlobalLevel(zerolog.Disabled) // default to disabled log.Logger = log.With().Caller().Logger() log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.RFC3339}) + } func intToPointer(i int) *int { diff --git a/cmd/pam_test.go b/cmd/pam_test.go index c377376a..d196b0e7 100644 --- a/cmd/pam_test.go +++ b/cmd/pam_test.go @@ -17,13 +17,14 @@ package cmd import ( "encoding/json" "fmt" - "github.com/stretchr/testify/assert" "os" "path" "path/filepath" "strconv" "strings" "testing" + + "github.com/stretchr/testify/assert" ) func Test_PAMHelpCmd(t *testing.T) { @@ -70,10 +71,12 @@ func Test_PAMTypesListCmd(t *testing.T) { // test var err error testCmd.SetArgs([]string{"pam", "types-list"}) - output := captureOutput(func() { - err = testCmd.Execute() - assert.NoError(t, err) - }) + output := captureOutput( + func() { + err = testCmd.Execute() + assert.NoError(t, err) + }, + ) if err != nil { t.Errorf("failed to list PAM provider types: %v", err) @@ -157,10 +160,12 @@ func Test_PAMGetCmd(t *testing.T) { idInt := int(providerConfig["Id"].(float64)) idStr := strconv.Itoa(idInt) testCmd.SetArgs([]string{"pam", "get", "--id", idStr}) - output := captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) + output := captureOutput( + func() { + err := testCmd.Execute() + assert.NoError(t, err) + }, + ) var pamProvider interface{} if err := json.Unmarshal([]byte(output), &pamProvider); err != nil { t.Fatalf("Error unmarshalling JSON: %v", err) @@ -184,10 +189,12 @@ func Test_PAMTypesCreateCmd(t *testing.T) { randomName := generateRandomUUID() t.Logf("randomName: %s", randomName) testCmd.SetArgs([]string{"pam", "types-create", "--repo", "hashicorp-vault-pam", "--name", randomName}) - output := captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) + output := captureOutput( + func() { + err := testCmd.Execute() + assert.NoError(t, err) + }, + ) var createResponse interface{} if err := json.Unmarshal([]byte(output), &createResponse); err != nil { t.Log(output) @@ -291,10 +298,12 @@ func Test_PAMUpdateCmd(t *testing.T) { testCmd := RootCmd // test testCmd.SetArgs([]string{"pam", "update", "--from-file", updatedFileName}) - output := captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) + output := captureOutput( + func() { + err := testCmd.Execute() + assert.NoError(t, err) + }, + ) var updateResponse interface{} if err := json.Unmarshal([]byte(output), &updateResponse); err != nil { @@ -386,51 +395,59 @@ func testListPamProviders(t *testing.T) ([]interface{}, error) { var pamProviders []interface{} var err error - t.Run("Listing PAM provider instances", func(t *testing.T) { - testCmd := RootCmd - // test - testCmd.SetArgs([]string{"pam", "list"}) - output = captureOutput(func() { - err = testCmd.Execute() - assert.NoError(t, err) - }) - - if err != nil { - t.Errorf("failed to list PAM providers: %v", err) - return - } - - if err = json.Unmarshal([]byte(output), &pamProviders); err != nil { - t.Fatalf("Error unmarshalling JSON: %v", err) - } + t.Run( + "Listing PAM provider instances", func(t *testing.T) { + testCmd := RootCmd + // test + testCmd.SetArgs([]string{"pam", "list"}) + output = captureOutput( + func() { + err = testCmd.Execute() + assert.NoError(t, err) + }, + ) + + if err != nil { + t.Errorf("failed to list PAM providers: %v", err) + return + } - // assert slice is len >= 0 - assert.GreaterOrEqual(t, len(pamProviders), 0) + if err = json.Unmarshal([]byte(output), &pamProviders); err != nil { + t.Fatalf("Error unmarshalling JSON: %v", err) + } - if len(pamProviders) > 0 { - for _, p := range pamProviders { - providerConfig := p.(map[string]interface{}) - // assert that each p has a name - assert.NotEmpty(t, providerConfig["Name"]) - // assert that each p has an ID - assert.NotEmpty(t, providerConfig["Id"]) - // assert that each p has a type - assert.NotEmpty(t, providerConfig["ProviderType"]) - - // Check params is a list of maps - pTypeParams := providerConfig["ProviderType"].(map[string]interface{})["ProviderTypeParams"].([]interface{}) - assert.NotEmpty(t, pTypeParams) - assert.GreaterOrEqual(t, len(pTypeParams), 0) - if len(pTypeParams) > 0 { - for _, param := range pTypeParams { - assert.NotEmpty(t, param.(map[string]interface{})["Id"]) - assert.NotEmpty(t, param.(map[string]interface{})["Name"]) - assert.NotEmpty(t, param.(map[string]interface{})["DataType"]) + // assert slice is len >= 0 + assert.GreaterOrEqual(t, len(pamProviders), 0) + + if len(pamProviders) > 0 { + for _, p := range pamProviders { + providerConfig := p.(map[string]interface{}) + // assert that each p has a name + assert.NotEmpty(t, providerConfig["Name"]) + // assert that each p has an ID + assert.NotEmpty(t, providerConfig["Id"]) + // assert that each p has a type + assert.NotEmpty(t, providerConfig["ProviderType"]) + + // Check params is a list of maps + pTypeParams := providerConfig["ProviderType"].(map[string]interface{})["ProviderTypeParams"].([]interface{}) + assert.NotEmpty(t, pTypeParams) + assert.GreaterOrEqual(t, len(pTypeParams), 0) + if len(pTypeParams) > 0 { + for _, param := range pTypeParams { + assert.NotEmpty(t, param.(map[string]interface{})["Id"]) + assert.NotEmpty(t, param.(map[string]interface{})["Name"]) + assert.NotEmpty(t, param.(map[string]interface{})["DataType"]) + } } } + } else { + t.Errorf("0 PAM providers found, cannot test list") + t.Fail() } - } - }) + + }, + ) if err != nil { t.Log(output) return nil, err @@ -447,36 +464,40 @@ func testCreatePamProvider(t *testing.T, fileName string, providerName string, a } else { testName = fmt.Sprintf("Create PAM provider '%s'", providerName) } - t.Run(testName, func(t *testing.T) { - testCmd := RootCmd + t.Run( + testName, func(t *testing.T) { + testCmd := RootCmd + + args := []string{"pam", "create", "--from-file", fileName} + // log the args as a string + t.Logf("args: %s", args) + testCmd.SetArgs(args) + t.Logf("fileName: %s", fileName) + output := captureOutput( + func() { + err = testCmd.Execute() + if !allowFail { + assert.NoError(t, err) + } + }, + ) + if err = json.Unmarshal([]byte(output), &createResponse); err != nil { + if allowFail { + t.Logf("Error unmarshalling JSON: %v", err) + } else { + t.Errorf("failed to create a PAM provider: %v", err) + } + return + } - args := []string{"pam", "create", "--from-file", fileName} - // log the args as a string - t.Logf("args: %s", args) - testCmd.SetArgs(args) - t.Logf("fileName: %s", fileName) - output := captureOutput(func() { - err = testCmd.Execute() if !allowFail { - assert.NoError(t, err) + assert.NotEmpty(t, createResponse.(map[string]interface{})["Id"]) + assert.NotEmpty(t, createResponse.(map[string]interface{})["Name"]) + assert.Equal(t, createResponse.(map[string]interface{})["Name"], providerName) + assert.NotEmpty(t, createResponse.(map[string]interface{})["ProviderType"]) } - }) - if err = json.Unmarshal([]byte(output), &createResponse); err != nil { - if allowFail { - t.Logf("Error unmarshalling JSON: %v", err) - } else { - t.Errorf("failed to create a PAM provider: %v", err) - } - return - } - - if !allowFail { - assert.NotEmpty(t, createResponse.(map[string]interface{})["Id"]) - assert.NotEmpty(t, createResponse.(map[string]interface{})["Name"]) - assert.Equal(t, createResponse.(map[string]interface{})["Name"], providerName) - assert.NotEmpty(t, createResponse.(map[string]interface{})["ProviderType"]) - } - }) + }, + ) return createResponse, err } @@ -484,20 +505,24 @@ func testCreatePamProvider(t *testing.T, fileName string, providerName string, a func testDeletePamProvider(t *testing.T, pID int, allowFail bool) error { var err error var output string - t.Run(fmt.Sprintf("Deleting PAM provider %d", pID), func(t *testing.T) { - testCmd := RootCmd - - testCmd.SetArgs([]string{"pam", "delete", "--id", strconv.Itoa(pID)}) - output = captureOutput(func() { - err = testCmd.Execute() + t.Run( + fmt.Sprintf("Deleting PAM provider %d", pID), func(t *testing.T) { + testCmd := RootCmd + + testCmd.SetArgs([]string{"pam", "delete", "--id", strconv.Itoa(pID)}) + output = captureOutput( + func() { + err = testCmd.Execute() + if !allowFail { + assert.NoError(t, err) + } + }, + ) if !allowFail { - assert.NoError(t, err) + assert.Contains(t, output, fmt.Sprintf("Deleted PAM provider with ID %d", pID)) } - }) - if !allowFail { - assert.Contains(t, output, fmt.Sprintf("Deleted PAM provider with ID %d", pID)) - } - }) + }, + ) if err != nil && !allowFail { t.Log(output) return err @@ -513,12 +538,14 @@ func testListPamProviderTypes(t *testing.T, name string, allowFail bool, allowEm testCmd := RootCmd // test testCmd.SetArgs([]string{"pam", "types-list"}) - output = captureOutput(func() { - err = testCmd.Execute() - if !allowFail { - assert.NoError(t, err) - } - }) + output = captureOutput( + func() { + err = testCmd.Execute() + if !allowFail { + assert.NoError(t, err) + } + }, + ) var pTypes []interface{} if err = json.Unmarshal([]byte(output), &pTypes); err != nil && !allowFail { t.Errorf("Error unmarshalling JSON: %v", err) @@ -632,7 +659,11 @@ func testFormatPamCreateConfig(t *testing.T, inputFileName string, providerName if oErr == nil { oErr = fmt.Errorf("failed to find PAM provider type '%s' unable to create PAM provider", cProviderTypeName) } else { - oErr = fmt.Errorf("failed to find PAM provider type '%s' unable to create PAM provider: %v", cProviderTypeName, oErr) + oErr = fmt.Errorf( + "failed to find PAM provider type '%s' unable to create PAM provider: %v", + cProviderTypeName, + oErr, + ) } t.Error(oErr) return "", oErr diff --git a/cmd/root.go b/cmd/root.go index 7029f295..a356d556 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -15,16 +15,18 @@ package cmd import ( + _ "embed" "fmt" + "io" + stdlog "log" + "os" + "github.com/Keyfactor/keyfactor-go-client-sdk/api/keyfactor" "github.com/Keyfactor/keyfactor-go-client/v2/api" "github.com/rs/zerolog/log" "github.com/spf13/cobra" "github.com/spf13/cobra/doc" "golang.org/x/crypto/bcrypt" - "io" - stdlog "log" - "os" ) var ( @@ -43,6 +45,7 @@ var ( kfcAPIPath string logInsecure bool outputFormat string + offline bool ) func hashSecretValue(secretValue string) string { @@ -63,7 +66,15 @@ func hashSecretValue(secretValue string) string { return string(hashedPassword) } -func initClient(flagConfigFile string, flagProfile string, flagAuthProviderType string, flagAuthProviderProfile string, noPrompt bool, authConfig *api.AuthConfig, saveConfig bool) (*api.Client, error) { +func initClient( + flagConfigFile string, + flagProfile string, + flagAuthProviderType string, + flagAuthProviderProfile string, + noPrompt bool, + authConfig *api.AuthConfig, + saveConfig bool, +) (*api.Client, error) { log.Debug().Msg("Enter initClient()") var clientAuth api.AuthConfig var commandConfig ConfigurationFile @@ -163,7 +174,17 @@ func initClient(flagConfigFile string, flagProfile string, flagAuthProviderType if !noPrompt { // Auth user interactively authConfigEntry := commandConfig.Servers[flagProfile] - commandConfig, _ = authInteractive(authConfigEntry.Hostname, authConfigEntry.Username, authConfigEntry.Password, authConfigEntry.Domain, authConfigEntry.APIPath, flagProfile, false, false, flagConfigFile) + commandConfig, _ = authInteractive( + authConfigEntry.Hostname, + authConfigEntry.Username, + authConfigEntry.Password, + authConfigEntry.Domain, + authConfigEntry.APIPath, + flagProfile, + false, + false, + flagConfigFile, + ) } else { //log.Fatalf("[ERROR] auth config profile: %s", flagProfile) log.Error().Str("flagProfile", flagProfile).Msg("invalid auth config profile") @@ -198,7 +219,13 @@ func initClient(flagConfigFile string, flagProfile string, flagAuthProviderType return c, nil } -func initGenClient(flagConfig string, flagProfile string, noPrompt bool, authConfig *api.AuthConfig, saveConfig bool) (*keyfactor.APIClient, error) { +func initGenClient( + flagConfig string, + flagProfile string, + noPrompt bool, + authConfig *api.AuthConfig, + saveConfig bool, +) (*keyfactor.APIClient, error) { var commandConfig ConfigurationFile if providerType != "" { @@ -246,7 +273,17 @@ func initGenClient(flagConfig string, flagProfile string, noPrompt bool, authCon if !noPrompt { // Auth user interactively authConfigEntry := commandConfig.Servers[flagProfile] - commandConfig, _ = authInteractive(authConfigEntry.Hostname, authConfigEntry.Username, authConfigEntry.Password, authConfigEntry.Domain, authConfigEntry.APIPath, flagProfile, false, false, flagConfig) + commandConfig, _ = authInteractive( + authConfigEntry.Hostname, + authConfigEntry.Username, + authConfigEntry.Password, + authConfigEntry.Domain, + authConfigEntry.APIPath, + flagProfile, + false, + false, + flagConfig, + ) } else { //log.Fatalf("[ERROR] auth config profile: %s", flagProfile) log.Error().Str("flagProfile", flagProfile).Msg("invalid auth config profile") @@ -306,24 +343,98 @@ func init() { defaultConfigPath := fmt.Sprintf("$HOME/.keyfactor/%s", DefaultConfigFileName) - RootCmd.PersistentFlags().StringVarP(&configFile, "config", "", "", fmt.Sprintf("Full path to config file in JSON format. (default is %s)", defaultConfigPath)) - RootCmd.PersistentFlags().BoolVar(&noPrompt, "no-prompt", false, "Do not prompt for any user input and assume defaults or environmental variables are set.") - RootCmd.PersistentFlags().BoolVar(&expEnabled, "exp", false, "Enable expEnabled features. (USE AT YOUR OWN RISK, these features are not supported and may change or be removed at any time.)") + RootCmd.PersistentFlags().StringVarP( + &configFile, + "config", + "", + "", + fmt.Sprintf("Full path to config file in JSON format. (default is %s)", defaultConfigPath), + ) + RootCmd.PersistentFlags().BoolVar( + &noPrompt, + "no-prompt", + false, + "Do not prompt for any user input and assume defaults or environmental variables are set.", + ) + RootCmd.PersistentFlags().BoolVar( + &expEnabled, + "exp", + false, + "Enable expEnabled features. (USE AT YOUR OWN RISK, these features are not supported and may change or be removed at any time.)", + ) + RootCmd.PersistentFlags().BoolVar( + &offline, + "offline", + false, + "Will not attempt to connect to GitHub for latest release information and resources.", + ) RootCmd.PersistentFlags().BoolVar(&debugFlag, "debug", false, "Enable debugFlag logging.") - RootCmd.PersistentFlags().BoolVar(&logInsecure, "log-insecure", false, "Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.)") - RootCmd.PersistentFlags().StringVarP(&profile, "profile", "", "", "Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists.") - RootCmd.PersistentFlags().StringVar(&outputFormat, "format", "text", "How to format the CLI output. Currently only `text` is supported.") + RootCmd.PersistentFlags().BoolVar( + &logInsecure, + "log-insecure", + false, + "Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.)", + ) + RootCmd.PersistentFlags().StringVarP( + &profile, + "profile", + "", + "", + "Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists.", + ) + RootCmd.PersistentFlags().StringVar( + &outputFormat, + "format", + "text", + "How to format the CLI output. Currently only `text` is supported.", + ) RootCmd.PersistentFlags().StringVar(&providerType, "auth-provider-type", "", "Provider type choices: (azid)") // Validating the provider-type flag against the predefined choices RootCmd.PersistentFlags().SetAnnotation("auth-provider-type", cobra.BashCompCustom, ProviderTypeChoices) - RootCmd.PersistentFlags().StringVarP(&providerProfile, "auth-provider-profile", "", "default", "The profile to use defined in the securely stored config. If not specified the config named 'default' will be used if it exists.") - - RootCmd.PersistentFlags().StringVarP(&kfcUsername, "username", "", "", "Username to use for authenticating to Keyfactor Command.") - RootCmd.PersistentFlags().StringVarP(&kfcHostName, "hostname", "", "", "Hostname to use for authenticating to Keyfactor Command.") - RootCmd.PersistentFlags().StringVarP(&kfcPassword, "password", "", "", "Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text.") - RootCmd.PersistentFlags().StringVarP(&kfcDomain, "domain", "", "", "Domain to use for authenticating to Keyfactor Command.") - RootCmd.PersistentFlags().StringVarP(&kfcAPIPath, "api-path", "", "KeyfactorAPI", "API Path to use for authenticating to Keyfactor Command. (default is KeyfactorAPI)") + RootCmd.PersistentFlags().StringVarP( + &providerProfile, + "auth-provider-profile", + "", + "default", + "The profile to use defined in the securely stored config. If not specified the config named 'default' will be used if it exists.", + ) + + RootCmd.PersistentFlags().StringVarP( + &kfcUsername, + "username", + "", + "", + "Username to use for authenticating to Keyfactor Command.", + ) + RootCmd.PersistentFlags().StringVarP( + &kfcHostName, + "hostname", + "", + "", + "Hostname to use for authenticating to Keyfactor Command.", + ) + RootCmd.PersistentFlags().StringVarP( + &kfcPassword, + "password", + "", + "", + "Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text.", + ) + RootCmd.PersistentFlags().StringVarP( + &kfcDomain, + "domain", + "", + "", + "Domain to use for authenticating to Keyfactor Command.", + ) + RootCmd.PersistentFlags().StringVarP( + &kfcAPIPath, + "api-path", + "", + "KeyfactorAPI", + "API Path to use for authenticating to Keyfactor Command. (default is KeyfactorAPI)", + ) // Cobra also supports local flags, which will only run // when this action is called directly. diff --git a/cmd/storeTypes.go b/cmd/storeTypes.go index 3d8b56ba..7bced1db 100644 --- a/cmd/storeTypes.go +++ b/cmd/storeTypes.go @@ -15,19 +15,25 @@ package cmd import ( + _ "embed" "encoding/json" "fmt" - "github.com/AlecAivazis/survey/v2" - "github.com/Keyfactor/keyfactor-go-client/v2/api" - "github.com/rs/zerolog/log" - "github.com/spf13/cobra" "io" "net/http" "os" "sort" "strings" + "time" + + "github.com/AlecAivazis/survey/v2" + "github.com/Keyfactor/keyfactor-go-client/v2/api" + "github.com/rs/zerolog/log" + "github.com/spf13/cobra" ) +//go:embed store_types.json +var EmbeddedStoreTypesJSON []byte + var storeTypesCmd = &cobra.Command{ Use: "store-types", Short: "Keyfactor certificate store types APIs and utilities.", @@ -102,6 +108,14 @@ var storesTypeCreateCmd = &cobra.Command{ } storeTypeIsValid := false + log.Debug().Str("storeType", storeType). + Bool("listTypes", listTypes). + Str("storeTypeConfigFile", storeTypeConfigFile). + Bool("creatAll", creatAll). + Str("gitRef", gitRef). + Strs("validStoreTypes", validStoreTypes). + Msg("create command flags") + if listTypes { fmt.Println("Available store types:") sort.Strings(validStoreTypes) @@ -138,12 +152,16 @@ var storesTypeCreateCmd = &cobra.Command{ } for _, v := range validStoreTypes { if strings.EqualFold(v, strings.ToUpper(storeType)) || creatAll { - log.Printf("[DEBUG] Valid store type: %s", storeType) + log.Debug().Str("storeType", storeType).Msg("Store type is valid") storeTypeIsValid = true break } } if !storeTypeIsValid { + log.Error(). + Str("storeType", storeType). + Bool("isValid", storeTypeIsValid). + Msg("Invalid store type") fmt.Printf("ERROR: Invalid store type: %s\nValid types are:\n", storeType) for _, st := range validStoreTypes { fmt.Println(fmt.Sprintf("\t%s", st)) @@ -157,7 +175,7 @@ var storesTypeCreateCmd = &cobra.Command{ } else { typesToCreate = validStoreTypes } - storeTypeConfig, stErr := readStoreTypesConfig("", gitRef) + storeTypeConfig, stErr := readStoreTypesConfig("", gitRef, offline) if stErr != nil { log.Error().Err(stErr).Send() return stErr @@ -292,7 +310,10 @@ var storesTypeDeleteCmd = &cobra.Command{ } if dryRun { - outputResult(fmt.Sprintf("dry run delete called on certificate store type (%v) with ID: %d", st, id), outputFormat) + outputResult( + fmt.Sprintf("dry run delete called on certificate store type (%v) with ID: %d", st, id), + outputFormat, + ) } else { log.Debug().Interface("storeType", st). Int("id", id). @@ -344,7 +365,7 @@ var fetchStoreTypesCmd = &cobra.Command{ if gitRef == "" { gitRef = "main" } - templates, err := readStoreTypesConfig("", gitRef) + templates, err := readStoreTypesConfig("", gitRef, offline) if err != nil { log.Error().Err(err).Send() return err @@ -406,11 +427,42 @@ func createStoreFromFile(filename string, kfClient *api.Client) (*api.Certificat return createResp, nil } +func formatStoreTypes(sTypesList *[]interface{}) (map[string]interface{}, error) { + + if sTypesList == nil || len(*sTypesList) == 0 { + return nil, fmt.Errorf("empty store types list") + } + + output := make(map[string]interface{}) + for _, v := range *sTypesList { + v2 := v.(map[string]interface{}) + output[v2["ShortName"].(string)] = v2 + } + + return output, nil +} + func getStoreTypesInternet(gitRef string) (map[string]interface{}, error) { //resp, err := http.Get("https://raw.githubusercontent.com/keyfactor/kfutil/main/store_types.json") //resp, err := http.Get("https://raw.githubusercontent.com/keyfactor/kfctl/master/storetypes/storetypes.json") - resp, rErr := http.Get(fmt.Sprintf("https://raw.githubusercontent.com/Keyfactor/kfutil/%s/store_types.json", gitRef)) + baseUrl := "https://raw.githubusercontent.com/Keyfactor/kfutil/%s/store_types.json" + if gitRef == "" { + gitRef = "main" + } + url := fmt.Sprintf(baseUrl, gitRef) + log.Debug(). + Str("url", url). + Msg("Getting store types from internet") + + // Define the timeout duration + timeout := MinHttpTimeout * time.Second + + // Create a custom http.Client with the timeout + client := &http.Client{ + Timeout: timeout, + } + resp, rErr := client.Get(url) if rErr != nil { return nil, rErr } @@ -421,24 +473,34 @@ func getStoreTypesInternet(gitRef string) (map[string]interface{}, error) { } // read as list of interfaces var result []interface{} - json.Unmarshal(body, &result) - - // convert to map - var result2 map[string]interface{} - result2 = make(map[string]interface{}) - for _, v := range result { - v2 := v.(map[string]interface{}) - result2[v2["ShortName"].(string)] = v2 + jErr := json.Unmarshal(body, &result) + if jErr != nil { + return nil, jErr } + output, sErr := formatStoreTypes(&result) + if sErr != nil { + return nil, err + } else if output == nil { + return nil, fmt.Errorf("unable to fetch store types from %s", url) + } + return output, nil - return result2, nil } func getValidStoreTypes(fp string, gitRef string) []string { - validStoreTypes, rErr := readStoreTypesConfig(fp, gitRef) + log.Debug(). + Str("file", fp). + Str("gitRef", gitRef). + Bool("offline", offline). + Msg(DebugFuncEnter) + + log.Debug(). + Str("file", fp). + Str("gitRef", gitRef). + Msg("Reading store types config.") + validStoreTypes, rErr := readStoreTypesConfig(fp, gitRef, offline) if rErr != nil { - log.Printf("Error: %s", rErr) - fmt.Printf("Error: %s\n", rErr) + log.Error().Err(rErr).Msg("unable to read store types") return nil } validStoreTypesList := make([]string, 0, len(validStoreTypes)) @@ -449,33 +511,51 @@ func getValidStoreTypes(fp string, gitRef string) []string { return validStoreTypesList } -func readStoreTypesConfig(fp string, gitRef string) (map[string]interface{}, error) { - sTypes, stErr := getStoreTypesInternet(gitRef) - if stErr != nil { - log.Error().Err(stErr).Msg("unable to read store types from internet") +func readStoreTypesConfig(fp, gitRef string, offline bool) (map[string]interface{}, error) { + log.Debug().Str("file", fp).Str("gitRef", gitRef).Msg("Entering readStoreTypesConfig") + + var ( + sTypes map[string]interface{} + stErr error + ) + if offline { + log.Debug().Msg("Reading store types config from file") + } else { + log.Debug().Msg("Reading store types config from internet") + sTypes, stErr = getStoreTypesInternet(gitRef) + } + + if stErr != nil || sTypes == nil || len(sTypes) == 0 { + log.Warn().Err(stErr).Msg("Using embedded store-type definitions") + var emStoreTypes []interface{} + if err := json.Unmarshal(EmbeddedStoreTypesJSON, &emStoreTypes); err != nil { + log.Error().Err(err).Msg("Unable to unmarshal embedded store type definitions") + return nil, err + } + sTypes, stErr = formatStoreTypes(&emStoreTypes) + if stErr != nil { + log.Error().Err(stErr).Msg("Unable to format store types") + return nil, stErr + } } var content []byte var err error if sTypes == nil { if fp == "" { - fp = "store_types.json" + fp = DefaultStoreTypesFileName } content, err = os.ReadFile(fp) - if err != nil { - return nil, err - } } else { content, err = json.Marshal(sTypes) - if err != nil { - return nil, err - } + } + if err != nil { + return nil, err } var d map[string]interface{} - err = json.Unmarshal(content, &d) - if err != nil { - log.Error().Err(err).Msg("unable to unmarshal store types") + if err = json.Unmarshal(content, &d); err != nil { + log.Error().Err(err).Msg("Unable to unmarshal store types") return nil, err } return d, nil @@ -483,13 +563,22 @@ func readStoreTypesConfig(fp string, gitRef string) (map[string]interface{}, err func init() { defaultGitRef := "main" + offline = true // temporarily set to true as it runs before the flag is set + debugFlag = false // temporarily set to false as it runs before the flag is set var gitRef string validTypesString := strings.Join(getValidStoreTypes("", defaultGitRef), ", ") + offline = false //revert this so that flag is not set to true by default RootCmd.AddCommand(storeTypesCmd) // GET store type templates storeTypesCmd.AddCommand(fetchStoreTypesCmd) - fetchStoreTypesCmd.Flags().StringVarP(&gitRef, FlagGitRef, "b", "main", "The git branch or tag to reference when pulling store-types from the internet.") + fetchStoreTypesCmd.Flags().StringVarP( + &gitRef, + FlagGitRef, + "b", + "main", + "The git branch or tag to reference when pulling store-types from the internet.", + ) // LIST command storeTypesCmd.AddCommand(storesTypesListCmd) @@ -504,10 +593,28 @@ func init() { var storeTypeName string var storeTypeID int storeTypesCmd.AddCommand(storesTypeCreateCmd) - storesTypeCreateCmd.Flags().StringVarP(&storeTypeName, "name", "n", "", "Short name of the certificate store type to get. Valid choices are: "+validTypesString) + storesTypeCreateCmd.Flags().StringVarP( + &storeTypeName, + "name", + "n", + "", + "Short name of the certificate store type to get. Valid choices are: "+validTypesString, + ) storesTypeCreateCmd.Flags().BoolVarP(&listValidStoreTypes, "list", "l", false, "List valid store types.") - storesTypeCreateCmd.Flags().StringVarP(&filePath, "from-file", "f", "", "Path to a JSON file containing certificate store type data for a single store.") - storesTypeCreateCmd.Flags().StringVarP(&gitRef, FlagGitRef, "b", "main", "The git branch or tag to reference when pulling store-types from the internet.") + storesTypeCreateCmd.Flags().StringVarP( + &filePath, + "from-file", + "f", + "", + "Path to a JSON file containing certificate store type data for a single store.", + ) + storesTypeCreateCmd.Flags().StringVarP( + &gitRef, + FlagGitRef, + "b", + "main", + "The git branch or tag to reference when pulling store-types from the internet.", + ) storesTypeCreateCmd.Flags().BoolVarP(&createAll, "all", "a", false, "Create all store types.") // UPDATE command @@ -519,7 +626,13 @@ func init() { var dryRun bool storeTypesCmd.AddCommand(storesTypeDeleteCmd) storesTypeDeleteCmd.Flags().IntVarP(&storeTypeID, "id", "i", -1, "ID of the certificate store type to delete.") - storesTypeDeleteCmd.Flags().StringVarP(&storeTypeName, "name", "n", "", "Name of the certificate store type to delete.") + storesTypeDeleteCmd.Flags().StringVarP( + &storeTypeName, + "name", + "n", + "", + "Name of the certificate store type to delete.", + ) storesTypeDeleteCmd.Flags().BoolVarP(&dryRun, "dry-run", "t", false, "Specifies whether to perform a dry run.") storesTypeDeleteCmd.MarkFlagsMutuallyExclusive("id", "name") storesTypeDeleteCmd.Flags().BoolVarP(&deleteAll, "all", "a", false, "Delete all store types.") diff --git a/cmd/storeTypes_test.go b/cmd/storeTypes_test.go index 6cc3e201..9098d7fb 100644 --- a/cmd/storeTypes_test.go +++ b/cmd/storeTypes_test.go @@ -17,10 +17,36 @@ package cmd import ( "encoding/json" "fmt" - "github.com/stretchr/testify/assert" + "net/url" "os" "strings" "testing" + + "github.com/spf13/cobra" + "github.com/stretchr/testify/assert" +) + +var ( + UndeleteableExceptions = []string{ + "F5-CA-REST: Certificate Store Type with either short name 'F5-CA-REST' or name 'F5 CA Profiles REST' already exists.", + "F5-WS-REST: Certificate Store Type with either short name 'F5-WS-REST' or name 'F5 WS Profiles REST' already exists.", + "F5-SL-REST: Certificate Store Type with either short name 'F5-SL-REST' or name 'F5 SSL Profiles REST' already exists.", + "F5: Certificate Store Type with either short name 'F5' or name 'F5' already exists.", + "IIS: Certificate Store Type with either short name 'IIS' or name 'IIS' already exists.", + "JKS: Certificate Store Type with either short name 'JKS' or name 'JKS' already exists.", + "NS: Certificate Store Type with either short name 'NS' or name 'Netscaler' already exists.", + "PEM: Certificate Store Type with either short name 'PEM' or name 'PEM' already exists.", + } + UndeleteableTypes = []string{ + "F5-CA-REST", + "F5-WS-REST", + "F5-SL-REST", + "F5", + "IIS", + "JKS", + "NS", + "PEM", + } ) func Test_StoreTypesHelpCmd(t *testing.T) { @@ -51,12 +77,22 @@ func Test_StoreTypesListCmd(t *testing.T) { testCmd := RootCmd // test testCmd.SetArgs([]string{"store-types", "list"}) - output := captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) + output := captureOutput( + func() { + err := testCmd.Execute() + assert.NoError(t, err) + }, + ) + // search output string for JSON and unmarshal it + //parsedOutput, pErr := findLastJSON(output) + //if pErr != nil { + // t.Log(output) + // t.Fatalf("Error parsing JSON from response: %v", pErr) + //} + var storeTypes []map[string]interface{} if err := json.Unmarshal([]byte(output), &storeTypes); err != nil { + t.Log(output) t.Fatalf("Error unmarshalling JSON: %v", err) } @@ -92,10 +128,12 @@ func Test_StoreTypesFetchTemplatesCmd(t *testing.T) { testCmd := RootCmd // test testCmd.SetArgs([]string{"store-types", "templates-fetch"}) - output := captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) + output := captureOutput( + func() { + err := testCmd.Execute() + assert.NoError(t, err) + }, + ) var storeTypes map[string]interface{} if err := json.Unmarshal([]byte(output), &storeTypes); err != nil { t.Fatalf("Error unmarshalling JSON: %v", err) @@ -125,15 +163,19 @@ func Test_StoreTypesCreateFromTemplatesCmd(t *testing.T) { if isGhAction == "true" { ghBranch := os.Getenv("GITHUB_REF") ghBranch = strings.Replace(ghBranch, "refs/heads/", "", 1) - testArgs = append(testArgs, "--git-ref", ghBranch) + // url escape the branch name + ghBranch = url.QueryEscape(ghBranch) + testArgs = append(testArgs, "--git-ref", fmt.Sprintf("%s", ghBranch)) t.Log("GITHUB_REF: ", ghBranch) } t.Log("testArgs: ", testArgs) testCmd.SetArgs(testArgs) - templatesOutput := captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) + templatesOutput := captureOutput( + func() { + err := testCmd.Execute() + assert.NoError(t, err) + }, + ) var storeTypes map[string]interface{} if err := json.Unmarshal([]byte(templatesOutput), &storeTypes); err != nil { t.Fatalf("Error unmarshalling JSON: %v", err) @@ -158,102 +200,202 @@ func Test_StoreTypesCreateFromTemplatesCmd(t *testing.T) { // Attempt to create the store type shortName := storeType["ShortName"].(string) - createStoreTypeTest(t, shortName) + createStoreTypeTest(t, shortName, false) } createAllStoreTypes(t, storeTypes) } -func createAllStoreTypes(t *testing.T, storeTypes map[string]interface{}) { - t.Run(fmt.Sprintf("Create ALL StoreTypes"), func(t *testing.T) { - testCmd := RootCmd - // check if I'm running inside a GitHub Action - testArgs := []string{"store-types", "create", "--all"} - isGhAction := os.Getenv("GITHUB_ACTIONS") - t.Log("GITHUB_ACTIONS: ", isGhAction) - if isGhAction == "true" { - ghBranch := os.Getenv("GITHUB_REF") - ghBranch = strings.Replace(ghBranch, "refs/heads/", "", 1) - testArgs = append(testArgs, "--git-ref", ghBranch) - t.Log("GITHUB_REF: ", ghBranch) +func testCreateStoreType( + t *testing.T, + testCmd *cobra.Command, + testArgs []string, + storeTypes map[string]interface{}, +) error { + isGhAction := os.Getenv("GITHUB_ACTIONS") + t.Log("GITHUB_ACTIONS: ", isGhAction) + if isGhAction == "true" { + ghBranch := os.Getenv("GITHUB_REF") + ghBranch = strings.Replace(ghBranch, "refs/heads/", "", 1) + // url escape the branch name + ghBranch = url.QueryEscape(ghBranch) + testArgs = append(testArgs, "--git-ref", fmt.Sprintf("%s", ghBranch)) + t.Log("GITHUB_REF: ", ghBranch) + } + t.Log("testArgs: ", testArgs) + allowFail := false + // Attempt to get the AWS store type because it comes with the product + testCmd.SetArgs(testArgs) + output := captureOutput( + func() { + err := testCmd.Execute() - } - t.Log("testArgs: ", testArgs) + if err != nil { + eMsg := err.Error() + eMsg = strings.Replace(eMsg, "while creating store types:", "", -1) + for _, exception := range UndeleteableExceptions { + eMsg = strings.Replace(eMsg, exception, "", -1) + } + eMsg = strings.TrimSpace(eMsg) + if eMsg == "" { + return + } + t.Error("Emsg: ", eMsg) + if !allowFail { + assert.NoError(t, err) + } + } + if !allowFail { + assert.NoError(t, err) + } + }, + ) - // Attempt to get the AWS store type because it comes with the product - testCmd.SetArgs(testArgs) - output := captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) + if !allowFail { assert.NotNil(t, output, "No output returned from create all command") + } - // iterate over the store types and verify that each has a name shortname and storetype - for sType := range storeTypes { - storeType := storeTypes[sType].(map[string]interface{}) - assert.NotNil(t, storeType["Name"], "Expected store type to have a name") - assert.NotNil(t, storeType["ShortName"], "Expected store type to have short name") - - // verify short name is a string - _, ok := storeType["ShortName"].(string) - assert.True(t, ok, "Expected short name to be a string") - // verify name is a string - _, ok = storeType["Name"].(string) - assert.True(t, ok, "Expected name to be a string") + // iterate over the store types and verify that each has a name shortname and storetype + for sType := range storeTypes { + storeType := storeTypes[sType].(map[string]interface{}) + assert.NotNil(t, storeType["Name"], "Expected store type to have a name") + assert.NotNil(t, storeType["ShortName"], "Expected store type to have short name") - // Attempt to create the store type - shortName := storeType["ShortName"].(string) + // verify short name is a string + _, ok := storeType["ShortName"].(string) + assert.True(t, ok, "Expected short name to be a string") + // verify name is a string + _, ok = storeType["Name"].(string) + assert.True(t, ok, "Expected name to be a string") - assert.Contains(t, output, fmt.Sprintf("Certificate store type %s created with ID", shortName), "Expected output to contain store type created message") + // Attempt to create the store type + shortName := storeType["ShortName"].(string) + allowStoreTypeFail := false + if checkIsUnDeleteable(shortName) { + t.Logf("WARNING: Skipping check for un-deletable store-type: %s", shortName) + allowStoreTypeFail = true + } - // Delete again after create - deleteStoreTypeTest(t, shortName, true) + if !allowStoreTypeFail { + assert.Contains( + t, + output, + fmt.Sprintf("Certificate store type %s created with ID", shortName), + "Expected output to contain store type created message", + ) } - }) + + // Delete again after create + deleteStoreTypeTest(t, shortName, allowStoreTypeFail) + } + return nil +} + +func createAllStoreTypes(t *testing.T, storeTypes map[string]interface{}) { + t.Run( + fmt.Sprintf("ONLINE Create ALL StoreTypes"), func(t *testing.T) { + testCmd := RootCmd + // check if I'm running inside a GitHub Action + testArgs := []string{"store-types", "create", "--all"} + testCreateStoreType(t, testCmd, testArgs, storeTypes) + + }, + ) + t.Run( + fmt.Sprintf("OFFLINE Create ALL StoreTypes"), func(t *testing.T) { + testCmd := RootCmd + // check if I'm running inside a GitHub Action + testArgs := []string{"store-types", "create", "--all", "--offline"} + testCreateStoreType(t, testCmd, testArgs, storeTypes) + }, + ) } func deleteStoreTypeTest(t *testing.T, shortName string, allowFail bool) { - t.Run(fmt.Sprintf("Delete StoreType %s", shortName), func(t *testing.T) { - testCmd := RootCmd - testCmd.SetArgs([]string{"store-types", "delete", "--name", shortName}) - deleteStoreOutput := captureOutput(func() { - err := testCmd.Execute() + t.Run( + fmt.Sprintf("Delete StoreType %s", shortName), func(t *testing.T) { + testCmd := RootCmd + testCmd.SetArgs([]string{"store-types", "delete", "--name", shortName}) + deleteStoreOutput := captureOutput( + func() { + if checkIsUnDeleteable(shortName) { + allowFail = true + //t.Skip("Not processing un-deletable store-type: ", shortName) + //return + } + + err := testCmd.Execute() + if !allowFail { + assert.NoError(t, err) + } + }, + ) if !allowFail { - assert.NoError(t, err) + if strings.Contains(deleteStoreOutput, "does not exist") { + t.Errorf("Store type %s does not exist", shortName) + } + if strings.Contains(deleteStoreOutput, "cannot be deleted") { + assert.Fail(t, fmt.Sprintf("Store type %s already exists", shortName)) + } + if !strings.Contains(deleteStoreOutput, "deleted") { + assert.Fail(t, fmt.Sprintf("Store type %s was not deleted: %s", shortName, deleteStoreOutput)) + } + if strings.Contains(deleteStoreOutput, "error processing the request") { + assert.Fail(t, fmt.Sprintf("Store type %s was not deleted: %s", shortName, deleteStoreOutput)) + } } - }) - if !allowFail { - if strings.Contains(deleteStoreOutput, "does not exist") { - t.Errorf("Store type %s does not exist", shortName) - } - if strings.Contains(deleteStoreOutput, "cannot be deleted") { - assert.Fail(t, fmt.Sprintf("Store type %s already exists", shortName)) - } - if !strings.Contains(deleteStoreOutput, "deleted") { - assert.Fail(t, fmt.Sprintf("Store type %s was not deleted: %s", shortName, deleteStoreOutput)) - } - if strings.Contains(deleteStoreOutput, "error processing the request") { - assert.Fail(t, fmt.Sprintf("Store type %s was not deleted: %s", shortName, deleteStoreOutput)) - } - } - }) + }, + ) } -func createStoreTypeTest(t *testing.T, shortName string) { - t.Run(fmt.Sprintf("CreateStore %s", shortName), func(t *testing.T) { - testCmd := RootCmd - deleteStoreTypeTest(t, shortName, true) - testCmd.SetArgs([]string{"store-types", "create", "--name", shortName}) - createStoreOutput := captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) +func checkIsUnDeleteable(shortName string) bool { - if strings.Contains(createStoreOutput, "already exists") { - assert.Fail(t, fmt.Sprintf("Store type %s already exists", shortName)) - } else if !strings.Contains(createStoreOutput, "created with ID") { - assert.Fail(t, fmt.Sprintf("Store type %s was not created: %s", shortName, createStoreOutput)) + for _, v := range UndeleteableTypes { + if v == shortName { + return true } - // Delete again after create - deleteStoreTypeTest(t, shortName, false) - }) + } + return false +} + +func createStoreTypeTest(t *testing.T, shortName string, allowFail bool) { + t.Run( + fmt.Sprintf("CreateStore %s", shortName), func(t *testing.T) { + testCmd := RootCmd + if checkIsUnDeleteable(shortName) { + t.Logf("WARNING: Allowing un-deletable store-type: %s to FAIL", shortName) + allowFail = true + } + deleteStoreTypeTest(t, shortName, true) + testCmd.SetArgs([]string{"store-types", "create", "--name", shortName}) + createStoreOutput := captureOutput( + func() { + err := testCmd.Execute() + if !allowFail { + assert.NoError(t, err) + } + }, + ) + + // check if any of the undeleteable_exceptions are in the output + for _, exception := range UndeleteableExceptions { + if strings.Contains(createStoreOutput, exception) { + t.Logf( + "WARNING: wxpected error encountered '%s' allowing un-deletable store-type: %s to FAIL", + exception, shortName, + ) + allowFail = true + } + } + + if !allowFail { + if strings.Contains(createStoreOutput, "already exists") { + assert.Fail(t, fmt.Sprintf("Store type %s already exists", shortName)) + } else if !strings.Contains(createStoreOutput, "created with ID") { + assert.Fail(t, fmt.Sprintf("Store type %s was not created: %s", shortName, createStoreOutput)) + } + } + // Delete again after create + deleteStoreTypeTest(t, shortName, allowFail) + }, + ) } diff --git a/cmd/store_types.json b/cmd/store_types.json new file mode 100644 index 00000000..cf7471af --- /dev/null +++ b/cmd/store_types.json @@ -0,0 +1,3653 @@ +[ + { + "BlueprintAllowed": false, + "Capability": "AKV", + "CustomAliasAllowed": "Optional", + "EntryParameters": null, + "JobProperties": [], + "LocalStore": false, + "Name": "Azure Keyvault", + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PowerShell": false, + "PrivateKeyAllowed": "Optional", + "Properties": [ + { + "Name": "TenantId", + "DisplayName": "Tenant Id", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "SkuType", + "DisplayName": "SKU Type", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "standard,premium", + "Required": false + }, + { + "Name": "VaultRegion", + "DisplayName": "Vault Region", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "eastus,eastus2,westus2,westus3,westus", + "Required": false + }, + { + "Name": "AzureCloud", + "DisplayName": "Azure Cloud", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "public,china,germany,government", + "Required": false + }, + { + "Name": "PrivateEndpoint", + "DisplayName": "Private KeyVault Endpoint", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + } + ], + "ServerRequired": true, + "ShortName": "AKV", + "StorePathType": "", + "StorePathValue": "", + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + } + }, + { + "Name": "AWS Certificate Manager", + "ShortName": "AWS-ACM", + "Capability": "AWS-ACM", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "UseOAuth", + "DisplayName": "Use OAuth 2.0 Provider", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "false", + "Required": true + }, + { + "Name": "UseIAM", + "DisplayName": "Use IAM User Auth", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "false", + "Required": true + }, + { + "Name": "OAuthScope", + "DisplayName": "OAuth Scope", + "Type": "String", + "DependsOn": "UseOAuth", + "DefaultValue": null, + "Required": false + }, + { + "Name": "OAuthGrantType", + "DisplayName": "OAuth Grant Type", + "Type": "String", + "DependsOn": "UseOAuth", + "DefaultValue": "client_credentials", + "Required": false + }, + { + "Name": "OAuthUrl", + "DisplayName": "OAuth Url", + "Type": "String", + "DependsOn": "UseOAuth", + "DefaultValue": "https://***/oauth2/default/v1/token", + "Required": false + }, + { + "Name": "IamAccountId", + "DisplayName": "IAM AWS Account ID", + "Type": "String", + "DependsOn": "UseIAM", + "DefaultValue": null, + "Required": false + }, + { + "Name": "OAuthAccountId", + "DisplayName": "OAuth AWS Account ID", + "Type": "String", + "DependsOn": "UseOAuth", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "true", + "Required": true + } + ], + "EntryParameters": [ + { + "Name": "AWS Region", + "DisplayName": "AWS Region", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": true, + "OnRemove": false, + "OnReenrollment": false + } + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Optional" + }, + { + "Name": "Akamai Certificate Provisioning Service", + "ShortName": "Akamai", + "Capability": "Akamai", + "LocalStore": false, + "SupportedOperations": { + "Add": false, + "Create": false, + "Discovery": false, + "Enrollment": true, + "Remove": false + }, + "Properties": [ + { + "StoreTypeId;omitempty": 0, + "Name": "access_token", + "DisplayName": "Access Token", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": true + }, + { + "StoreTypeId;omitempty": 0, + "Name": "client_token", + "DisplayName": "Client Token", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": true + }, + { + "StoreTypeId;omitempty": 0, + "Name": "client_secret", + "DisplayName": "Client Secret", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": true + } + ], + "EntryParameters": [ + { + "StoreTypeId;omitempty": 0, + "Name": "EnrollmentId", + "DisplayName": "Enrollment ID", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + }, + { + "StoreTypeId;omitempty": 0, + "Name": "ContractId", + "DisplayName": "Contract ID", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "Sans", + "DisplayName": "SANs", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + } + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-addressLineOne", + "DisplayName": "Admin - Address Line 1", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-addressLineTwo", + "DisplayName": "Admin - Address Line 2", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-city", + "DisplayName": "Admin - City", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-country", + "DisplayName": "Admin - Country", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-email", + "DisplayName": "Admin - Email", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-firstName", + "DisplayName": "Admin - First Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-lastName", + "DisplayName": "Admin - Last Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-organizationName", + "DisplayName": "Admin - Organization Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-phone", + "DisplayName": "Admin - Phone", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-postalCode", + "DisplayName": "Admin - Postal Code", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-region", + "DisplayName": "Admin - Region", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-title", + "DisplayName": "Admin - Title", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-addressLineOne", + "DisplayName": "Org - Address Line 1", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-addressLineTwo", + "DisplayName": "Org - Address Line 2", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-city", + "DisplayName": "Org - City", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-country", + "DisplayName": "Org - Country", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-organizationName", + "DisplayName": "Org - Organization Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-phone", + "DisplayName": "Org - Phone", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-postalCode", + "DisplayName": "Org - Postal Code", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-region", + "DisplayName": "Org - Region", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-addressLineOne", + "DisplayName": "Tech - Address Line 1", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-addressLineTwo", + "DisplayName": "Tech - Address Line 2", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-city", + "DisplayName": "Tech - City", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-country", + "DisplayName": "Tech - Country", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-email", + "DisplayName": "Tech - Email", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-firstName", + "DisplayName": "Tech - First Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-lastName", + "DisplayName": "Tech - Last Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-organizationName", + "DisplayName": "Tech - Organization Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-phone", + "DisplayName": "Tech - Phone", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-postalCode", + "DisplayName": "Tech - Postal Code", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-region", + "DisplayName": "Tech - Region", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-title", + "DisplayName": "Tech - Title", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "MultipleChoice", + "StorePathValue": "[\"Production\",\"Staging\"]", + "PrivateKeyAllowed": "Forbidden", + "ServerRequired": false, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "Azure Application Gateway Certificate Binding", + "ShortName": "AppGwBin", + "Capability": "AzureAppGwBin", + "LocalStore": false, + "ClientMachineDescription": "The Azure Tenant (directory) ID that owns the Service Principal.", + "StorePathDescription": "Azure resource ID of the application gateway, following the format: /subscriptions//resourceGroups//providers/Microsoft.Network/applicationGateways/.", + "SupportedOperations": { + "Add": true, + "Remove": false, + "Enrollment": false, + "Discovery": true, + "Inventory": false + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "Description": "Application ID of the service principal, representing the identity used for managing the Application Gateway.", + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "Description": "A Client Secret that the extension will use to authenticate with the Azure Resource Management API for managing Application Gateway certificates, OR the password that encrypts the private key in ClientCertificate", + "Required": false + }, + { + "Name": "ClientCertificate", + "DisplayName": "Client Certificate", + "Type": "Secret", + "Description": "The client certificate used to authenticate with Azure Resource Management API for managing Application Gateway certificates. See the [requirements](#client-certificate-or-client-secret) for more information.", + "Required": false + }, + { + "Name": "AzureCloud", + "DisplayName": "Azure Global Cloud Authority Host", + "Type": "MultipleChoice", + "DefaultValue": "public,china,germany,government", + "Description": "Specifies the Azure Cloud instance used by the organization.", + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DefaultValue": "true", + "Description": "Specifies whether SSL should be used for communication with the server. Set to 'true' to enable SSL, and 'false' to disable it.", + "Required": true + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "Azure App Registration (Application)", + "ShortName": "AzureApp", + "Capability": "AzureApp", + "LocalStore": false, + "ClientMachineDescription": "The Azure Tenant (directory) ID that owns the Service Principal.", + "StorePathDescription": "The Application ID of the target Application/Service Principal that will be managed by the Azure App Registration and Enterprise Application Orchestrator extension.", + "SupportedOperations": { + "Add": true, + "Remove": true, + "Enrollment": false, + "Discovery": true, + "Inventory": true + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "Description": "The Application ID of the Service Principal used to authenticate with Microsoft Graph for managing Application/Service Principal certificates.", + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "Description": "A Client Secret that the extension will use to authenticate with Microsoft Graph for managing Application/Service Principal certificates, OR the password that encrypts the private key in ClientCertificate", + "Required": false + }, + { + "Name": "ClientCertificate", + "DisplayName": "Client Certificate", + "Type": "Secret", + "Description": "The client certificate used to authenticate with Microsoft Graph for managing Application/Service Principal certificates. See the [requirements](#client-certificate-or-client-secret) for more information.", + "Required": false + }, + { + "Name": "AzureCloud", + "DisplayName": "Azure Global Cloud Authority Host", + "Type": "MultipleChoice", + "DefaultValue": "public,china,germany,government", + "Description": "Specifies the Azure Cloud instance used by the organization.", + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DefaultValue": "true", + "Description": "Specifies whether SSL should be used for communication with the server. Set to 'true' to enable SSL, and 'false' to disable it.", + "Required": true + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "Azure Application Gateway Certificate", + "ShortName": "AzureAppGw", + "Capability": "AzureAppGw", + "LocalStore": false, + "ClientMachineDescription": "The Azure Tenant (directory) ID that owns the Service Principal.", + "StorePathDescription": "Azure resource ID of the application gateway, following the format: /subscriptions//resourceGroups//providers/Microsoft.Network/applicationGateways/.", + "SupportedOperations": { + "Add": true, + "Remove": true, + "Enrollment": false, + "Discovery": true, + "Inventory": true + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "Description": "Application ID of the service principal, representing the identity used for managing the Application Gateway.", + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "Description": "A Client Secret that the extension will use to authenticate with the Azure Resource Management API for managing Application Gateway certificates, OR the password that encrypts the private key in ClientCertificate", + "Required": false + }, + { + "Name": "ClientCertificate", + "DisplayName": "Client Certificate", + "Type": "Secret", + "Description": "The client certificate used to authenticate with Azure Resource Management API for managing Application Gateway certificates. See the [requirements](#client-certificate-or-client-secret) for more information.", + "Required": false + }, + { + "Name": "AzureCloud", + "DisplayName": "Azure Global Cloud Authority Host", + "Type": "MultipleChoice", + "DefaultValue": "public,china,germany,government", + "Description": "Specifies the Azure Cloud instance used by the organization.", + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DefaultValue": "true", + "Description": "Specifies whether SSL should be used for communication with the server. Set to 'true' to enable SSL, and 'false' to disable it.", + "Required": true + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "Azure Enterprise Application (Service Principal)", + "ShortName": "AzureSP", + "Capability": "AzureSP", + "LocalStore": false, + "ClientMachineDescription": "The Azure Tenant (directory) ID that owns the Service Principal.", + "StorePathDescription": "The Application ID of the target Application/Service Principal that will be managed by the Azure App Registration and Enterprise Application Orchestrator extension.", + "SupportedOperations": { + "Add": true, + "Remove": true, + "Enrollment": false, + "Discovery": true, + "Inventory": true + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "Description": "The Application ID of the Service Principal used to authenticate with Microsoft Graph for managing Application/Service Principal certificates.", + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "Description": "A Client Secret that the extension will use to authenticate with Microsoft Graph for managing Application/Service Principal certificates, OR the password that encrypts the private key in ClientCertificate", + "Required": false + }, + { + "Name": "ClientCertificate", + "DisplayName": "Client Certificate", + "Type": "Secret", + "Description": "The client certificate used to authenticate with Microsoft Graph for managing Application/Service Principal certificates. See the [requirements](#client-certificate-or-client-secret) for more information.", + "Required": false + }, + { + "Name": "AzureCloud", + "DisplayName": "Azure Global Cloud Authority Host", + "Type": "MultipleChoice", + "DefaultValue": "public,china,germany,government", + "Description": "Specifies the Azure Cloud instance used by the organization.", + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DefaultValue": "true", + "Description": "Specifies whether SSL should be used for communication with the server. Set to 'true' to enable SSL, and 'false' to disable it.", + "Required": true + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "Bosch IP Camera", + "ShortName": "BIPCamera", + "Capability": "BIPCamera", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": true, + "Remove": true + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "true", + "Required": true + } + ], + "EntryParameters": [ + { + "Name": "CertificateUsage", + "DisplayName": "Certificate Usage", + "Type": "MultipleChoice", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, + "Options": ",HTTPS,EAP-TLS-client,TLS-DATE-client" + }, + { + "Name": "Name", + "DisplayName": "Name (Alias)", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + } + }, + { + "Name": "Overwrite", + "DisplayName": "Overwrite", + "Type": "Bool", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, + "DefaultValue": "false" + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Optional", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Required" + }, + { + "Name": "CiscoAsa", + "ShortName": "CiscoAsa", + "Capability": "CiscoAsa", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "CommitToDisk", + "DisplayName": "Commit To Disk", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "false", + "Required": false + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "true", + "Required": true + } + ], + "EntryParameters": [ + { + "Name": "interfaces", + "DisplayName": "Interfaces Comma Separated", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Required" + }, + { + "Name": "CitrixAdc", + "ShortName": "CitrixAdc", + "Capability": "CitrixAdc", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "true", + "Required": true + }, + { + "Name": "linkToIssuer", + "DisplayName": "Link To Issuer", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "false", + "Required": false + } + ], + "EntryParameters": [ + { + "Name": "virtualServerName", + "DisplayName": "Virtual Server Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + }, + { + "Name": "sniCert", + "DisplayName": "SNI Cert", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": true, + "OnRemove": false, + "OnReenrollment": false + }, + "DefaultValue": "FALSE" + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required", + "InventoryEndpoint": "/AnyInventory/Update" + }, + { + "Name": "F5 Big IQ", + "ShortName": "F5-BigIQ", + "Capability": "F5-BigIQ", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": true, + "Remove": true + }, + "Properties": [ + { + "Name": "DeployCertificateOnRenewal", + "DisplayName": "Deploy Certificate to Linked Big IP on Renewal", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "IgnoreSSLWarning", + "DisplayName": "Ignore SSL Warning", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "UseTokenAuth", + "DisplayName": "Use Token Authentication", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "LoginProviderName", + "DisplayName": "Authentication Provider Name", + "Type": "String", + "DependsOn": "UseTokenAuth", + "DefaultValue": "", + "Required": false + } + ], + "EntryParameters": [ + { + "Name": "Alias", + "DisplayName": "Alias (Reenrollment only)", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DependsOn": "", + "DefaultValue": "", + "Options": "" + }, + { + "Name": "Overwrite", + "DisplayName": "Overwrite (Reenrollment only)", + "Type": "Bool", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DependsOn": "", + "DefaultValue": "False", + "Options": "" + }, + { + "Name": "SANs", + "DisplayName": "SANs (Reenrollment only)", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, + "DependsOn": "", + "DefaultValue": "", + "Options": "" + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Required" + }, + { + "Name": "F5 CA Profiles REST", + "ShortName": "F5-CA-REST", + "Capability": "F5-CA-REST", + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "PrimaryNode", + "DisplayName": "Primary Node", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "", + "Required": true + }, + { + "Name": "PrimaryNodeCheckRetryWaitSecs", + "DisplayName": "Primary Node Check Retry Wait Seconds", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "120", + "Required": true + }, + { + "Name": "PrimaryNodeCheckRetryMax", + "DisplayName": "Primary Node Check Retry Maximum", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "3", + "Required": true + }, + { + "Name": "F5Version", + "DisplayName": "Version of F5", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "v12,v13,v14,v15", + "Required": true + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "true", + "Required": true + }, + { + "Name": "PrimaryNodeOnlineRequired", + "DisplayName": "Primary Node Online Required", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "", + "Required": true + }, + { + "Name": "IgnoreSSLWarning", + "DisplayName": "Ignore SSL Warning", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "False", + "Required": true + }, + { + "Name": "UseTokenAuth", + "DisplayName": "Use Token Authentication", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": true + } + ], + "EntryParameters": [], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Forbidden", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Required" + }, + { + "Name": "F5 SSL Profiles REST", + "ShortName": "F5-SL-REST", + "Capability": "F5-SL-REST", + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "PrimaryNode", + "DisplayName": "Primary Node", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "", + "Required": true + }, + { + "Name": "PrimaryNodeCheckRetryWaitSecs", + "DisplayName": "Primary Node Check Retry Wait Seconds", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "120", + "Required": true + }, + { + "Name": "PrimaryNodeCheckRetryMax", + "DisplayName": "Primary Node Check Retry Maximum", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "3", + "Required": true + }, + { + "Name": "F5Version", + "DisplayName": "Version of F5", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "v12,v13,v14,v15", + "Required": true + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "true", + "Required": true + }, + { + "Name": "PrimaryNodeOnlineRequired", + "DisplayName": "Primary Node Online Required", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "", + "Required": true + }, + { + "Name": "IgnoreSSLWarning", + "DisplayName": "Ignore SSL Warning", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "False", + "Required": true + }, + { + "Name": "UseTokenAuth", + "DisplayName": "Use Token Authentication", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": true + } + ], + "EntryParameters": [], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Required" + }, + { + "Name": "F5 WS Profiles REST", + "ShortName": "F5-WS-REST", + "Capability": "F5-WS-REST", + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": false + }, + "Properties": [ + { + "Name": "PrimaryNode", + "DisplayName": "Primary Node", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "", + "Required": true + }, + { + "Name": "PrimaryNodeCheckRetryWaitSecs", + "DisplayName": "Primary Node Check Retry Wait Seconds", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "120", + "Required": true + }, + { + "Name": "PrimaryNodeCheckRetryMax", + "DisplayName": "Primary Node Check Retry Maximum", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "3", + "Required": true + }, + { + "Name": "F5Version", + "DisplayName": "Version of F5", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "v12,v13,v14,v15", + "Required": true + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "true", + "Required": true + }, + { + "Name": "PrimaryNodeOnlineRequired", + "DisplayName": "Primary Node Online Required", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "", + "Required": true + }, + { + "Name": "IgnoreSSLWarning", + "DisplayName": "Ignore SSL Warning", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "False", + "Required": true + }, + { + "Name": "UseTokenAuth", + "DisplayName": "Use Token Authentication", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": true + } + ], + "EntryParameters": [], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "Fortigate", + "ShortName": "Fortigate", + "Capability": "Fortigate", + "ServerRequired": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Required", + "PowerShell": false, + "PrivateKeyAllowed": "Required", + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": true + }, + "Properties": [], + "EntryParameters": [] + }, + { + "Name": "GCP Load Balancer", + "ShortName": "GCPLoadBal", + "Capability": "GCPLoadBal", + "ServerRequired": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Optional", + "PowerShell": false, + "PrivateKeyAllowed": "Required", + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": false + }, + "Properties": [ + { + "Name": "jsonKey", + "DisplayName": "Service Account Key", + "Required": true, + "DependsOn": "", + "Type": "Secret", + "DefaultValue": "" + } + ], + "EntryParameters": [] + }, + { + "Name": "GCP Certificate Manager", + "ShortName": "GcpCertMgr", + "Capability": "GcpCertMgr", + "ServerRequired": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required", + "PowerShell": false, + "PrivateKeyAllowed": "Required", + "StorePathType": "", + "StorePathValue": "n/a", + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": false + }, + "Properties": [ + { + "Name": "Location", + "DisplayName": "Location", + "Type": "String", + "DependsOn": "", + "DefaultValue": "global", + "Required": true + }, + { + "Name": "ServiceAccountKey", + "DisplayName": "Service Account Key File Path", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + } + ], + "EntryParameters": [] + }, + { + "Name": "Hashicorp Vault Key-Value", + "ShortName": "HCVKV", + "Capability": "HCVKV", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "MountPoint", + "DisplayName": "Mount Point", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "VaultToken", + "DisplayName": "Vault Token", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "VaultServerUrl", + "DisplayName": "Vault Server URL", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "SubfolderInventory", + "DisplayName": "Subfolder Inventory", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "IncludeCertChain", + "DisplayName": "Include Cert Chain", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "true", + "Required": false + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": false, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Optional" + }, + { + "Name": "Hashicorp Vault Key-Value JKS", + "ShortName": "HCVKVJKS", + "Capability": "HCVKVJKS", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "SubfolderInventory", + "DisplayName": "Sub-folder Inventory", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "IncludeCertChain", + "DisplayName": "Include Certificate Chain", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "MountPoint", + "DisplayName": "Mount Point", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "true", + "Required": true + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Optional" + }, + { + "Name": "Hashicorp Vault Key-Value PKCS12", + "ShortName": "HCVKVP12", + "Capability": "HCVKVP12", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "SubfolderInventory", + "DisplayName": "Sub-folder Inventory", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "MountPoint", + "DisplayName": "Mount Point", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "IncludeCertChain", + "DisplayName": "Include Certificate Chain", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "true", + "Required": true + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Optional" + }, + { + "Name": "Hashicorp Vault Key-Value PEM", + "ShortName": "HCVKVPEM", + "Capability": "HCVKVPEM", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "SubfolderInventory", + "DisplayName": "Subfolder Inventory", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "IncludeCertChain", + "DisplayName": "Include Certificate Chain", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "MountPoint", + "DisplayName": "Mount Point", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "true", + "Required": true + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Optional" + }, + { + "Name": "Hashicorp Vault Key-Value PFX", + "ShortName": "HCVKVPFX", + "Capability": "HCVKVPFX", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "SubfolderInventory", + "DisplayName": "Sub-folder Inventory", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "IncludeCertChain", + "DisplayName": "Include Certificate Chain", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "MountPoint", + "DisplayName": "Mount Point", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "true", + "Required": true + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Optional" + }, + { + "Name": "Hashicorp Vault PKI", + "ShortName": "HCVPKI", + "Capability": "HCVPKI", + "LocalStore": false, + "SupportedOperations": { + "Add": false, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": false + }, + "Properties": [ + { + "Name": "MountPoint", + "DisplayName": "Mount Point", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": true + }, + { + "Name": "VaultToken", + "DisplayName": "VaultToken", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": true + }, + { + "Name": "VaultServerUrl", + "DisplayName": "Vault Server URL", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": false, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Optional" + }, + { + "Name": "IIS Bound Certificate", + "ShortName": "IISU", + "Capability": "IISU", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": true, + "Remove": true + }, + "Properties": [ + { + "Name": "spnwithport", + "DisplayName": "SPN With Port", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "WinRm Protocol", + "DisplayName": "WinRm Protocol", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "https,http", + "Required": true + }, + { + "Name": "WinRm Port", + "DisplayName": "WinRm Port", + "Type": "String", + "DependsOn": "", + "DefaultValue": "5986", + "Required": true + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "true", + "Required": true + } + ], + "EntryParameters": [ + { + "Name": "Port", + "DisplayName": "Port", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, + "DependsOn": "", + "DefaultValue": "443", + "Options": "" + }, + { + "Name": "IPAddress", + "DisplayName": "IP Address", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": true, + "OnRemove": true, + "OnReenrollment": true + }, + "DependsOn": "", + "DefaultValue": "*", + "Options": "" + }, + { + "Name": "HostName", + "DisplayName": "Host Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, + "DependsOn": "", + "DefaultValue": "", + "Options": "" + }, + { + "Name": "SiteName", + "DisplayName": "IIS Site Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": true, + "OnRemove": true, + "OnReenrollment": true + }, + "DependsOn": "", + "DefaultValue": "Default Web Site", + "Options": "" + }, + { + "Name": "SniFlag", + "DisplayName": "SNI Support", + "Type": "MultipleChoice", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, + "DependsOn": "", + "DefaultValue": "0 - No SNI", + "Options": "0 - No SNI,1 - SNI Enabled,2 - Non SNI Binding,3 - SNI Binding" + }, + { + "Name": "Protocol", + "DisplayName": "Protocol", + "Type": "MultipleChoice", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": true, + "OnRemove": true, + "OnReenrollment": true + }, + "DependsOn": "", + "DefaultValue": "https", + "Options": "https,http" + }, + { + "Name": "ProviderName", + "DisplayName": "Crypto Provider Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, + "DependsOn": "", + "DefaultValue": "", + "Options": "" + }, + { + "Name": "SAN", + "DisplayName": "SAN", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DependsOn": "", + "DefaultValue": "", + "Options": "" + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathValue": "[\"My\",\"WebHosting\"]", + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "Imperva", + "ShortName": "Imperva", + "Capability": "Imperva", + "ServerRequired": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required", + "PowerShell": false, + "PrivateKeyAllowed": "Required", + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": true + }, + "Properties": [], + "EntryParameters": [] + }, + { + "Name": "K8SCert", + "ShortName": "K8SCert", + "Capability": "K8SCert", + "LocalStore": false, + "SupportedOperations": { + "Add": false, + "Create": false, + "Discovery": true, + "Enrollment": false, + "Remove": false + }, + "Properties": [ + { + "Name": "KubeNamespace", + "DisplayName": "KubeNamespace", + "Type": "String", + "DependsOn": "", + "DefaultValue": "default", + "Required": false + }, + { + "Name": "KubeSecretName", + "DisplayName": "KubeSecretName", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "KubeSecretType", + "DisplayName": "KubeSecretType", + "Type": "String", + "DependsOn": "", + "DefaultValue": "cert", + "Required": true + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Forbidden", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "K8SCluster", + "ShortName": "K8SCluster", + "Capability": "K8SCluster", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "SeparateChain", + "DisplayName": "Separate Certificate Chain", + "Type": "Bool", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "IncludeCertChain", + "DisplayName": "Include Certificate Chain", + "Type": "Bool", + "DefaultValue": "true", + "Required": false + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "K8SJKS", + "ShortName": "K8SJKS", + "Capability": "K8SJKS", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "KubeNamespace", + "DisplayName": "KubeNamespace", + "Type": "String", + "DependsOn": "", + "DefaultValue": "default", + "Required": false + }, + { + "Name": "KubeSecretName", + "DisplayName": "KubeSecretName", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "KubeSecretType", + "DisplayName": "KubeSecretType", + "Type": "String", + "DependsOn": "", + "DefaultValue": "jks", + "Required": true + }, + { + "Name": "CertificateDataFieldName", + "DisplayName": "CertificateDataFieldName", + "Type": "String", + "DependsOn": "", + "DefaultValue": ".jks", + "Required": true + }, + { + "Name": "PasswordFieldName", + "DisplayName": "PasswordFieldName", + "Type": "String", + "DependsOn": "", + "DefaultValue": "password", + "Required": false + }, + { + "Name": "PasswordIsK8SSecret", + "DisplayName": "Password Is K8S Secret", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "StorePasswordPath", + "DisplayName": "StorePasswordPath", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "K8SNS", + "ShortName": "K8SNS", + "Capability": "K8SNS", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "KubeNamespace", + "DisplayName": "Kube Namespace", + "Type": "String", + "DependsOn": "", + "DefaultValue": "default", + "Required": false + }, + { + "Name": "SeparateChain", + "DisplayName": "Separate Certificate Chain", + "Type": "Bool", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "IncludeCertChain", + "DisplayName": "Include Certificate Chain", + "Type": "Bool", + "DefaultValue": "true", + "Required": false + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "K8SPKCS12", + "ShortName": "K8SPKCS12", + "Capability": "K8SPKCS12", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "KubeSecretType", + "DisplayName": "Kube Secret Type", + "Type": "String", + "DependsOn": "", + "DefaultValue": "pkcs12", + "Required": true + }, + { + "Name": "CertificateDataFieldName", + "DisplayName": "CertificateDataFieldName", + "Type": "String", + "DependsOn": "", + "DefaultValue": ".p12", + "Required": true + }, + { + "Name": "PasswordFieldName", + "DisplayName": "Password Field Name", + "Type": "String", + "DependsOn": "", + "DefaultValue": "password", + "Required": false + }, + { + "Name": "PasswordIsK8SSecret", + "DisplayName": "Password Is K8S Secret", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "KubeNamespace", + "DisplayName": "Kube Namespace", + "Type": "String", + "DependsOn": "", + "DefaultValue": "default", + "Required": false + }, + { + "Name": "KubeSecretName", + "DisplayName": "Kube Secret Name", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "StorePasswordPath", + "DisplayName": "StorePasswordPath", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "K8SSecret", + "ShortName": "K8SSecret", + "Capability": "K8SSecret", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "KubeNamespace", + "DisplayName": "KubeNamespace", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "KubeSecretName", + "DisplayName": "KubeSecretName", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "KubeSecretType", + "DisplayName": "KubeSecretType", + "Type": "String", + "DependsOn": "", + "DefaultValue": "secret", + "Required": true + }, + { + "Name": "SeparateChain", + "DisplayName": "Separate Certificate Chain", + "Type": "Bool", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "IncludeCertChain", + "DisplayName": "Include Certificate Chain", + "Type": "Bool", + "DefaultValue": "true", + "Required": false + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "K8STLSSecr", + "ShortName": "K8STLSSecr", + "Capability": "K8STLSSecr", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "KubeNamespace", + "DisplayName": "KubeNamespace", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "KubeSecretName", + "DisplayName": "KubeSecretName", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "KubeSecretType", + "DisplayName": "KubeSecretType", + "Type": "String", + "DependsOn": "", + "DefaultValue": "tls_secret", + "Required": true + }, + { + "Name": "SeparateChain", + "DisplayName": "Separate Certificate Chain", + "Type": "Bool", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "IncludeCertChain", + "DisplayName": "Include Certificate Chain", + "Type": "Bool", + "DefaultValue": "true", + "Required": false + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "MyOrchestratorStoreType", + "ShortName": "MOST", + "Capability": "MOST", + "LocalStore": false, + "SupportedOperations": { + "Add": false, + "Create": false, + "Discovery": true, + "Enrollment": false, + "Remove": false + }, + "Properties": [ + { + "Name": "CustomField1", + "DisplayName": "CustomField1", + "Type": "String", + "DependsOn": "", + "DefaultValue": "default", + "Required": true + }, + { + "Name": "CustomField2", + "DisplayName": "CustomField2", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": true + } + ], + "EntryParameters": [], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Forbidden", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "Nmap Orchestrator", + "ShortName": "Nmap", + "Capability": "Nmap", + "LocalStore": false, + "SupportedOperations": { + "Add": false, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Inventory": true, + "Reenrollment": false, + "Remove": true + }, + "Properties": [], + "EntryParameters": [], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "Freeform", + "StorePathValue": "", + "PrivateKeyAllowed": "Forbidden", + "ServerRequired": false, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Optional" + }, + { + "Name": "PaloAlto", + "ShortName": "PaloAlto", + "Capability": "PaloAlto", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "true", + "Required": true + }, + { + "Name": "DeviceGroup", + "DisplayName": "Device Group", + "Type": "String", + "DependsOn": null, + "DefaultValue": null, + "Required": false + } + ], + "EntryParameters": [], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "RFDER", + "ShortName": "RFDER", + "Capability": "RFDER", + "ServerRequired": true, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden", + "PowerShell": false, + "PrivateKeyAllowed": "Optional", + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": true + }, + "Properties": [ + { + "Name": "LinuxFilePermissionsOnStoreCreation", + "DisplayName": "Linux File Permissions on Store Creation", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "LinuxFileOwnerOnStoreCreation", + "DisplayName": "Linux File Owner on Store Creation", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "SudoImpersonatingUser", + "DisplayName": "Sudo Impersonating User", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "SeparatePrivateKeyFilePath", + "DisplayName": "Separate Private Key File Location", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + } + ], + "EntryParameters": [] + }, + { + "Name": "RFJKS", + "ShortName": "RFJKS", + "Capability": "RFJKS", + "ServerRequired": true, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required", + "PowerShell": false, + "PrivateKeyAllowed": "Optional", + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": true + }, + "Properties": [ + { + "Name": "LinuxFilePermissionsOnStoreCreation", + "DisplayName": "Linux File Permissions on Store Creation", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "LinuxFileOwnerOnStoreCreation", + "DisplayName": "Linux File Owner on Store Creation", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "SudoImpersonatingUser", + "DisplayName": "Sudo Impersonating User", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + } + ], + "EntryParameters": [] + }, + { + "Name": "RFKDB", + "ShortName": "RFKDB", + "Capability": "RFKDB", + "ServerRequired": true, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required", + "PowerShell": false, + "PrivateKeyAllowed": "Optional", + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": true + }, + "Properties": [ + { + "Name": "LinuxFilePermissionsOnStoreCreation", + "DisplayName": "Linux File Permissions on Store Creation", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "LinuxFileOwnerOnStoreCreation", + "DisplayName": "Linux File Owner on Store Creation", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "SudoImpersonatingUser", + "DisplayName": "Sudo Impersonating User", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + } + ], + "EntryParameters": [] + }, + { + "Name": "RFORA", + "ShortName": "RFORA", + "Capability": "RFORA", + "ServerRequired": true, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required", + "PowerShell": false, + "PrivateKeyAllowed": "Optional", + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": true + }, + "Properties": [ + { + "Name": "LinuxFilePermissionsOnStoreCreation", + "DisplayName": "Linux File Permissions on Store Creation", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "LinuxFileOwnerOnStoreCreation", + "DisplayName": "Linux File Owner on Store Creation", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "SudoImpersonatingUser", + "DisplayName": "Sudo Impersonating User", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "WorkFolder", + "DisplayName": "Location to use for creation/removal of work files", + "Required": true, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + } + ], + "EntryParameters": [] + }, + { + "Name": "RFPEM", + "ShortName": "RFPEM", + "Capability": "RFPEM", + "ServerRequired": true, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden", + "PowerShell": false, + "PrivateKeyAllowed": "Optional", + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": true + }, + "Properties": [ + { + "Name": "LinuxFilePermissionsOnStoreCreation", + "DisplayName": "Linux File Permissions on Store Creation", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "LinuxFileOwnerOnStoreCreation", + "DisplayName": "Linux File Owner on Store Creation", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "SudoImpersonatingUser", + "DisplayName": "Sudo Impersonating User", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "IsTrustStore", + "DisplayName": "Trust Store", + "Required": false, + "DependsOn": "", + "Type": "Bool", + "DefaultValue": false + }, + { + "Name": "IncludesChain", + "DisplayName": "Store Includes Chain", + "Required": false, + "DependsOn": "", + "Type": "Bool", + "DefaultValue": false + }, + { + "Name": "SeparatePrivateKeyFilePath", + "DisplayName": "Separate Private Key File Location", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "IsRSAPrivateKey", + "DisplayName": "Is RSA Private Key", + "Required": false, + "DependsOn": "", + "Type": "Bool", + "DefaultValue": false + }, + { + "Name": "IgnorePrivateKeyOnInventory", + "DisplayName": "Ignore Private Key On Inventory", + "Required": false, + "DependsOn": "", + "Type": "Bool", + "DefaultValue": false + } + ], + "EntryParameters": [] + }, + { + "Name": "RFPkcs12", + "ShortName": "RFPkcs12", + "Capability": "RFPkcs12", + "ServerRequired": true, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required", + "PowerShell": false, + "PrivateKeyAllowed": "Optional", + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": true + }, + "Properties": [ + { + "Name": "LinuxFilePermissionsOnStoreCreation", + "DisplayName": "Linux File Permissions on Store Creation", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "LinuxFileOwnerOnStoreCreation", + "DisplayName": "Linux File Owner on Store Creation", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, + { + "Name": "SudoImpersonatingUser", + "DisplayName": "Sudo Impersonating User", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + } + ], + "EntryParameters": [] + }, + { + "Name": "SampleStoreType", + "ShortName": "SAMPLETYPE", + "Capability": "SAMPLETYPE", + "SupportedOperations": { + "Add": false, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": false + }, + "Properties": [], + "EntryParameters": [], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Forbidden", + "JobProperties": [], + "ServerRequired": false, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "Signum", + "ShortName": "Signum", + "Capability": "Signum", + "LocalStore": false, + "SupportedOperations": { + "Add": false, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": false + }, + "Properties": [], + "EntryParameters": [], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "na", + "PrivateKeyAllowed": "Required", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "VMware-NSX", + "ShortName": "VMware-NSX", + "Capability": "VMware-NSX", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": true + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": true + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "true", + "Required": true + }, + { + "Name": "ApiVersion", + "DisplayName": "X-Avi-Version", + "Type": "String", + "DependsOn": "", + "DefaultValue": "20.1.1", + "Required": true + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "MultipleChoice", + "StorePathValue": "[\"Application\",\"Controller\",\"CA\"]", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "WinCerMgmt", + "ShortName": "WinCerMgmt", + "Capability": "WinCerMgmt", + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "spnwithport", + "DisplayName": "spnwithport", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + } + ], + "EntryParameters": [], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "Windows Certificate", + "ShortName": "WinCert", + "Capability": "WinCert", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": true, + "Remove": true + }, + "Properties": [ + { + "Name": "spnwithport", + "DisplayName": "SPN With Port", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "WinRM Protocol", + "DisplayName": "WinRM Protocol", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "https,http", + "Required": true + }, + { + "Name": "WinRM Port", + "DisplayName": "WinRM Port", + "Type": "String", + "DependsOn": "", + "DefaultValue": "5986", + "Required": true + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "true", + "Required": true + } + ], + "EntryParameters": [ + { + "Name": "ProviderName", + "DisplayName": "Crypto Provider Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, + "DependsOn": "", + "DefaultValue": "", + "Options": "" + }, + { + "Name": "SAN", + "DisplayName": "SAN", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DependsOn": "", + "DefaultValue": "", + "Options": "" + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "WinSql", + "ShortName": "WinSql", + "Capability": "WinSql", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "WinRm Protocol", + "DisplayName": "WinRm Protocol", + "Type": "MultipleChoice", + "DependsOn": null, + "DefaultValue": "https,http", + "Required": true + }, + { + "Name": "WinRm Port", + "DisplayName": "WinRm Port", + "Type": "String", + "DependsOn": null, + "DefaultValue": "5986", + "Required": true + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "true", + "Required": true + }, + { + "Name": "RestartService", + "DisplayName": "Restart SQL Service After Cert Installed", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "false", + "Required": true + } + ], + "EntryParameters": [ + { + "Name": "InstanceName", + "DisplayName": "Instance Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + }, + { + "Name": "ProviderName", + "DisplayName": "Crypto Provider Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, + "DependsOn": "", + "DefaultValue": "", + "Options": "" + }, + { + "Name": "SAN", + "DisplayName": "SAN", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DependsOn": "", + "DefaultValue": "", + "Options": "" + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathValue": "My", + "PrivateKeyAllowed": "Optional", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Forbidden" + } +] \ No newline at end of file diff --git a/cmd/stores.go b/cmd/stores.go index bad34f78..9205d1f0 100644 --- a/cmd/stores.go +++ b/cmd/stores.go @@ -18,10 +18,11 @@ import ( "encoding/csv" "encoding/json" "fmt" + "os" + "github.com/AlecAivazis/survey/v2" "github.com/rs/zerolog/log" "github.com/spf13/cobra" - "os" ) // storesCmd represents the stores command @@ -55,7 +56,11 @@ var storesListCmd = &cobra.Command{ // CLI Logic params := make(map[string]interface{}) + log.Debug(). + Str("params", fmt.Sprintf("%v", params)). + Msg("Calling ListCertificateStores") stores, err := kfClient.ListCertificateStores(¶ms) + log.Debug().Str("stores", fmt.Sprintf("%v", stores)).Msg("Stores returned") if err != nil { log.Error().Err(err).Send() @@ -298,7 +303,13 @@ func init() { // delete cmd storesDeleteCmd.Flags().StringVarP(&storeID, "id", "i", "", "ID of the certificate store to delete.") - storesDeleteCmd.Flags().StringVarP(&inputFile, "file", "f", "", "The path to a CSV file containing the Ids of the stores to delete.") + storesDeleteCmd.Flags().StringVarP( + &inputFile, + "file", + "f", + "", + "The path to a CSV file containing the Ids of the stores to delete.", + ) storesDeleteCmd.Flags().BoolVarP(&deleteAll, "all", "a", false, "Attempt to delete ALL stores.") storesDeleteCmd.MarkFlagsMutuallyExclusive("id", "all") diff --git a/cmd/stores_test.go b/cmd/stores_test.go index 81c3f4e7..3e03ba8b 100644 --- a/cmd/stores_test.go +++ b/cmd/stores_test.go @@ -17,11 +17,12 @@ package cmd import ( "encoding/json" "fmt" - "github.com/stretchr/testify/assert" "os" "path/filepath" "strings" "testing" + + "github.com/stretchr/testify/assert" ) func Test_Stores_HelpCmd(t *testing.T) { @@ -52,10 +53,12 @@ func Test_Stores_ListCmd(t *testing.T) { testCmd := RootCmd // test testCmd.SetArgs([]string{"stores", "list", "--exp"}) - output := captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) + output := captureOutput( + func() { + err := testCmd.Execute() + assert.NoError(t, err) + }, + ) var stores []interface{} if err := json.Unmarshal([]byte(output), &stores); err != nil { t.Fatalf("Error unmarshalling JSON: %v", err) @@ -80,10 +83,12 @@ func Test_Stores_GetCmd(t *testing.T) { testCmd := RootCmd // test testCmd.SetArgs([]string{"stores", "list", "--exp"}) - output := captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) + output := captureOutput( + func() { + err := testCmd.Execute() + assert.NoError(t, err) + }, + ) var stores []interface{} if err := json.Unmarshal([]byte(output), &stores); err != nil { t.Fatalf("Error unmarshalling JSON: %v", err) @@ -102,10 +107,12 @@ func Test_Stores_GetCmd(t *testing.T) { assert.NotEmpty(t, store.(map[string]interface{})["CertStoreType"]) testCmd.SetArgs([]string{"stores", "get", "--id", store.(map[string]interface{})["Id"].(string)}) - output = captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) + output = captureOutput( + func() { + err := testCmd.Execute() + assert.NoError(t, err) + }, + ) var store map[string]interface{} if err := json.Unmarshal([]byte(output), &store); err != nil { @@ -183,11 +190,24 @@ func Test_Stores_ImportCmd(t *testing.T) { testCmd := RootCmd // test - testCmd.SetArgs([]string{"stores", "import", "csv", "--file", outFileName, "--store-type-name", "k8ssecret", "--exp"}) - output := captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) + testCmd.SetArgs( + []string{ + "stores", + "import", + "csv", + "--file", + outFileName, + "--store-type-name", + "k8ssecret", + "--exp", + }, + ) + output := captureOutput( + func() { + err := testCmd.Execute() + assert.NoError(t, err) + }, + ) assert.Contains(t, output, "records processed") assert.Contains(t, output, "results written to") @@ -234,14 +254,16 @@ func Test_Stores_GenerateImportTemplateCmd(t *testing.T) { testCmd := RootCmd // test testCmd.SetArgs([]string{"stores", "import", "generate-template", "--store-type-name", "k8ssecret"}) - output := captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - if err != nil { - t.Errorf("Error: %v", err) - return - } - }) + output := captureOutput( + func() { + err := testCmd.Execute() + assert.NoError(t, err) + if err != nil { + t.Errorf("Error: %v", err) + return + } + }, + ) assert.Contains(t, output, "Template file for store type with id") assert.Contains(t, output, "csv") @@ -312,105 +334,117 @@ func testExportStore(t *testing.T, storeTypeName string) (string, []string) { files []string err error ) - t.Run(fmt.Sprintf("Export Stores of type %s", storeTypeName), func(t *testing.T) { - testCmd := RootCmd - testCmd.SetArgs([]string{"stores", "export", "--store-type-name", storeTypeName}) - output = captureOutput(func() { - err := testCmd.Execute() - assert.NoError(t, err) - }) - - // assert that output is not empty - assert.NotEmpty(t, output) - - // assert that output is a string - assert.IsType(t, "", output) - - // assert that output does not contain 'error' - assert.NotContains(t, output, "error") - - // assert that output does not contain 'Error' - assert.NotContains(t, output, "Error") - - // assert that output does not contain 'ERROR' - assert.NotContains(t, output, "ERROR") - - // assert that contains "exported for store type with id" - assert.Contains(t, output, "exported for store type with id") - - // assert that contains .csv - assert.Contains(t, output, ".csv") - - // assert that a csv file was created in current working directory with a filename that contains 'export_store_*.csv' - files, err = findMatchingFiles("*stores_export*.csv") - assert.Nil(t, err) - assert.NotEmpty(t, files) - }) + t.Run( + fmt.Sprintf("Export Stores of type %s", storeTypeName), func(t *testing.T) { + testCmd := RootCmd + testCmd.SetArgs([]string{"stores", "export", "--store-type-name", storeTypeName}) + output = captureOutput( + func() { + err := testCmd.Execute() + assert.NoError(t, err) + }, + ) + + // assert that output is not empty + assert.NotEmpty(t, output) + + // assert that output is a string + assert.IsType(t, "", output) + + // assert that output does not contain 'error' + assert.NotContains(t, output, "error") + + // assert that output does not contain 'Error' + assert.NotContains(t, output, "Error") + + // assert that output does not contain 'ERROR' + assert.NotContains(t, output, "ERROR") + + // assert that contains "exported for store type with id" + assert.Contains(t, output, "exported for store type with id") + + // assert that contains .csv + assert.Contains(t, output, ".csv") + + // assert that a csv file was created in current working directory with a filename that contains 'export_store_*.csv' + files, err = findMatchingFiles("*stores_export*.csv") + assert.Nil(t, err) + assert.NotEmpty(t, files) + }, + ) return output, files } func deleteStoreTest(t *testing.T, storeID string, allowFail bool) { - t.Run(fmt.Sprintf("Delete Store %s", storeID), func(t *testing.T) { - testCmd := RootCmd - testCmd.SetArgs([]string{"stores", "delete", "--id", storeID}) - deleteStoreOutput := captureOutput(func() { - err := testCmd.Execute() + t.Run( + fmt.Sprintf("Delete Store %s", storeID), func(t *testing.T) { + testCmd := RootCmd + testCmd.SetArgs([]string{"stores", "delete", "--id", storeID}) + deleteStoreOutput := captureOutput( + func() { + err := testCmd.Execute() + if !allowFail { + assert.NoError(t, err) + } + }, + ) if !allowFail { - assert.NoError(t, err) - } - }) - if !allowFail { - if strings.Contains(deleteStoreOutput, "does not exist") { - t.Errorf("Store %s does not exist", storeID) - } - if strings.Contains(deleteStoreOutput, "cannot be deleted") { - assert.Fail(t, fmt.Sprintf("Store %s already exists", storeID)) - } - if strings.Contains(deleteStoreOutput, "error processing the request") { - assert.Fail(t, fmt.Sprintf("Store %s was not deleted: %s", storeID, deleteStoreOutput)) + if strings.Contains(deleteStoreOutput, "does not exist") { + t.Errorf("Store %s does not exist", storeID) + } + if strings.Contains(deleteStoreOutput, "cannot be deleted") { + assert.Fail(t, fmt.Sprintf("Store %s already exists", storeID)) + } + if strings.Contains(deleteStoreOutput, "error processing the request") { + assert.Fail(t, fmt.Sprintf("Store %s was not deleted: %s", storeID, deleteStoreOutput)) + } + assert.Contains(t, deleteStoreOutput, "deleted") + assert.Contains(t, deleteStoreOutput, storeID) } - assert.Contains(t, deleteStoreOutput, "deleted") - assert.Contains(t, deleteStoreOutput, storeID) - } - }) + }, + ) } func testValidateCSVHeader(t *testing.T, filename string, header []string, expected []string) { // iterate bulkStoreImportCSVHeader and verify that each header is in the csv header - t.Run(fmt.Sprintf("Validate CSV header %s", filename), func(t *testing.T) { - // Check that first col isn't empty - assert.NotEmpty(t, header[0], "First column of CSV is empty") - - for _, h := range expected { - if h != "Properties" { - assert.Contains(t, header, h) + t.Run( + fmt.Sprintf("Validate CSV header %s", filename), func(t *testing.T) { + // Check that first col isn't empty + assert.NotEmpty(t, header[0], "First column of CSV is empty") + + for _, h := range expected { + if h != "Properties" { + assert.Contains(t, header, h) + } } - } - var props []string - for _, h := range header { - if strings.Contains(h, "Properties") { - props = append(props, h) + var props []string + for _, h := range header { + if strings.Contains(h, "Properties") { + props = append(props, h) + } } - } - assert.NotEmpty(t, props) - }) + assert.NotEmpty(t, props) + }, + ) } func testDeleteImportResults(t *testing.T, fileName string) { // get filename from path fName := filepath.Base(fileName) - t.Run(fmt.Sprintf("Deleting imported stores %s", fName), func(t *testing.T) { - csvData, err := csvToMap(fileName) - assert.NoError(t, err) + t.Run( + fmt.Sprintf("Deleting imported stores %s", fName), func(t *testing.T) { + csvData, err := csvToMap(fileName) + assert.NoError(t, err) - for _, row := range csvData { - // assert that each row has an ID - //assert.NotEmpty(t, row[""]) - // delete store - if row["Id"] != "" && row["Id"] != "error" && row["Id"] != "Id" { - deleteStoreTest(t, row["Id"], false) + for _, row := range csvData { + // assert that each row has an ID + //assert.NotEmpty(t, row[""]) + // delete store + if row["Id"] != "" && row["Id"] != "error" && row["Id"] != "Id" { + deleteStoreTest(t, row["Id"], false) + } } - } - }) + }, + ) } diff --git a/cmd/test.go b/cmd/test.go index 941df876..30cdfb3d 100644 --- a/cmd/test.go +++ b/cmd/test.go @@ -16,22 +16,47 @@ package cmd import ( "bytes" + "encoding/json" + "errors" "io" "os" + "regexp" ) func captureOutput(f func()) string { + // Save the original os.Stdout old := os.Stdout + // Create a pipe r, w, _ := os.Pipe() + // Set os.Stdout to the write end of the pipe os.Stdout = w + // Create a channel to signal when f() has completed + done := make(chan bool) + + // Buffer to store the output + var buf bytes.Buffer + + // Start a goroutine to copy from the read end of the pipe to the buffer + go func() { + io.Copy(&buf, r) + // Signal that the copying is done + done <- true + }() + + // Run the provided function f f() + // Close the write end of the pipe to signal EOF to the reader w.Close() + + // Wait for the goroutine to finish copying + <-done + + // Restore the original os.Stdout os.Stdout = old - var buf bytes.Buffer - io.Copy(&buf, r) + // Return the captured output as a string return buf.String() } @@ -73,3 +98,25 @@ func getTestEnv() (testEnv, error) { return testEnv, nil } + +// findLastJSON attempts to find the last valid JSON object or array in a string. +func findLastJSON(input string) (string, error) { + // Regular expression to match JSON objects and arrays + // This regex looks for the most complex JSON objects and arrays, allowing nested structures + re := regexp.MustCompile(`(\{(?:[^{}]*|\{[^{}]*\})*\}|\[(?:[^\[\]]*|\[[^\[\]]*\])*\])`) + matches := re.FindAllString(input, -1) + + // If no match is found, return an empty string + if len(matches) == 0 { + return "", errors.New("no JSON object or array found") + } + + // Validate that the last match is a valid JSON object or array + lastMatch := matches[len(matches)-1] + var js json.RawMessage + if err := json.Unmarshal([]byte(lastMatch), &js); err != nil { + return "", errors.New("invalid JSON object or array found") + } + + return lastMatch, nil +} diff --git a/docs/kfutil.md b/docs/kfutil.md index e201503e..c784705a 100644 --- a/docs/kfutil.md +++ b/docs/kfutil.md @@ -21,6 +21,7 @@ A CLI wrapper around the Keyfactor Platform API. --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -42,4 +43,4 @@ A CLI wrapper around the Keyfactor Platform API. * [kfutil stores](kfutil_stores.md) - Keyfactor certificate stores APIs and utilities. * [kfutil version](kfutil_version.md) - Shows version of kfutil -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_completion.md b/docs/kfutil_completion.md index e4557d02..14d566b9 100644 --- a/docs/kfutil_completion.md +++ b/docs/kfutil_completion.md @@ -28,6 +28,7 @@ See each sub-command's help for details on how to use the generated script. --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -41,4 +42,4 @@ See each sub-command's help for details on how to use the generated script. * [kfutil completion powershell](kfutil_completion_powershell.md) - Generate the autocompletion script for powershell * [kfutil completion zsh](kfutil_completion_zsh.md) - Generate the autocompletion script for zsh -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_completion_bash.md b/docs/kfutil_completion_bash.md index 81afccb6..f961da7a 100644 --- a/docs/kfutil_completion_bash.md +++ b/docs/kfutil_completion_bash.md @@ -51,6 +51,7 @@ kfutil completion bash --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -60,4 +61,4 @@ kfutil completion bash * [kfutil completion](kfutil_completion.md) - Generate the autocompletion script for the specified shell -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_completion_fish.md b/docs/kfutil_completion_fish.md index 32b1b40d..a0d386f4 100644 --- a/docs/kfutil_completion_fish.md +++ b/docs/kfutil_completion_fish.md @@ -42,6 +42,7 @@ kfutil completion fish [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -51,4 +52,4 @@ kfutil completion fish [flags] * [kfutil completion](kfutil_completion.md) - Generate the autocompletion script for the specified shell -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_completion_powershell.md b/docs/kfutil_completion_powershell.md index 5a19e9f6..e96bc995 100644 --- a/docs/kfutil_completion_powershell.md +++ b/docs/kfutil_completion_powershell.md @@ -39,6 +39,7 @@ kfutil completion powershell [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -48,4 +49,4 @@ kfutil completion powershell [flags] * [kfutil completion](kfutil_completion.md) - Generate the autocompletion script for the specified shell -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_completion_zsh.md b/docs/kfutil_completion_zsh.md index 8865a542..98b4917b 100644 --- a/docs/kfutil_completion_zsh.md +++ b/docs/kfutil_completion_zsh.md @@ -53,6 +53,7 @@ kfutil completion zsh [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -62,4 +63,4 @@ kfutil completion zsh [flags] * [kfutil completion](kfutil_completion.md) - Generate the autocompletion script for the specified shell -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_containers.md b/docs/kfutil_containers.md index 745d5f6f..625c7e57 100644 --- a/docs/kfutil_containers.md +++ b/docs/kfutil_containers.md @@ -26,6 +26,7 @@ A collections of APIs and utilities for interacting with Keyfactor certificate s --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -37,4 +38,4 @@ A collections of APIs and utilities for interacting with Keyfactor certificate s * [kfutil containers get](kfutil_containers_get.md) - Get certificate store container by ID or name. * [kfutil containers list](kfutil_containers_list.md) - List certificate store containers. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_containers_get.md b/docs/kfutil_containers_get.md index 5838b6d6..fa8c3e01 100644 --- a/docs/kfutil_containers_get.md +++ b/docs/kfutil_containers_get.md @@ -31,6 +31,7 @@ kfutil containers get [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -40,4 +41,4 @@ kfutil containers get [flags] * [kfutil containers](kfutil_containers.md) - Keyfactor certificate store container API and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_containers_list.md b/docs/kfutil_containers_list.md index 73e5c1dd..465cc196 100644 --- a/docs/kfutil_containers_list.md +++ b/docs/kfutil_containers_list.md @@ -30,6 +30,7 @@ kfutil containers list [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -39,4 +40,4 @@ kfutil containers list [flags] * [kfutil containers](kfutil_containers.md) - Keyfactor certificate store container API and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_export.md b/docs/kfutil_export.md index 5445dc2e..fb69f131 100644 --- a/docs/kfutil_export.md +++ b/docs/kfutil_export.md @@ -42,6 +42,7 @@ kfutil export [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -51,4 +52,4 @@ kfutil export [flags] * [kfutil](kfutil.md) - Keyfactor CLI utilities -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_helm.md b/docs/kfutil_helm.md index 55754d4f..a7c8bf56 100644 --- a/docs/kfutil_helm.md +++ b/docs/kfutil_helm.md @@ -32,6 +32,7 @@ kubectl helm uo | helm install -f - keyfactor-universal-orchestrator keyfactor/k --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -42,4 +43,4 @@ kubectl helm uo | helm install -f - keyfactor-universal-orchestrator keyfactor/k * [kfutil](kfutil.md) - Keyfactor CLI utilities * [kfutil helm uo](kfutil_helm_uo.md) - Configure the Keyfactor Universal Orchestrator Helm Chart -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_helm_uo.md b/docs/kfutil_helm_uo.md index d7d8f9c4..eca60b99 100644 --- a/docs/kfutil_helm_uo.md +++ b/docs/kfutil_helm_uo.md @@ -37,6 +37,7 @@ kfutil helm uo [-t ] [-o ] [-f ] [-e ] [-o ] [-f ] [-e -e @,@ -o ./app/extension --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -56,4 +57,4 @@ ext -t -e @,@ -o ./app/extension * [kfutil orchs](kfutil_orchs.md) - Keyfactor agents/orchestrators APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_orchs_get.md b/docs/kfutil_orchs_get.md index 5011e1a1..580fcd5c 100644 --- a/docs/kfutil_orchs_get.md +++ b/docs/kfutil_orchs_get.md @@ -31,6 +31,7 @@ kfutil orchs get [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -40,4 +41,4 @@ kfutil orchs get [flags] * [kfutil orchs](kfutil_orchs.md) - Keyfactor agents/orchestrators APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_orchs_list.md b/docs/kfutil_orchs_list.md index e41c8f39..5873538d 100644 --- a/docs/kfutil_orchs_list.md +++ b/docs/kfutil_orchs_list.md @@ -30,6 +30,7 @@ kfutil orchs list [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -39,4 +40,4 @@ kfutil orchs list [flags] * [kfutil orchs](kfutil_orchs.md) - Keyfactor agents/orchestrators APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_orchs_logs.md b/docs/kfutil_orchs_logs.md index 07c7e5d5..f65cea8a 100644 --- a/docs/kfutil_orchs_logs.md +++ b/docs/kfutil_orchs_logs.md @@ -31,6 +31,7 @@ kfutil orchs logs [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -40,4 +41,4 @@ kfutil orchs logs [flags] * [kfutil orchs](kfutil_orchs.md) - Keyfactor agents/orchestrators APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_orchs_reset.md b/docs/kfutil_orchs_reset.md index 0e46fd0d..b7c5d7ec 100644 --- a/docs/kfutil_orchs_reset.md +++ b/docs/kfutil_orchs_reset.md @@ -31,6 +31,7 @@ kfutil orchs reset [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -40,4 +41,4 @@ kfutil orchs reset [flags] * [kfutil orchs](kfutil_orchs.md) - Keyfactor agents/orchestrators APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_pam.md b/docs/kfutil_pam.md index 48ec53aa..45a5a4ff 100644 --- a/docs/kfutil_pam.md +++ b/docs/kfutil_pam.md @@ -28,6 +28,7 @@ programmatically create, delete, edit, and list PAM Providers. --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -44,4 +45,4 @@ programmatically create, delete, edit, and list PAM Providers. * [kfutil pam types-list](kfutil_pam_types-list.md) - Returns a list of all available PAM provider types. * [kfutil pam update](kfutil_pam_update.md) - Updates an existing PAM Provider, currently only supported from file. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_pam_create.md b/docs/kfutil_pam_create.md index 752f9147..f2446b62 100644 --- a/docs/kfutil_pam_create.md +++ b/docs/kfutil_pam_create.md @@ -31,6 +31,7 @@ kfutil pam create [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -40,4 +41,4 @@ kfutil pam create [flags] * [kfutil pam](kfutil_pam.md) - Keyfactor PAM Provider APIs. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_pam_delete.md b/docs/kfutil_pam_delete.md index 27d2410a..133f1039 100644 --- a/docs/kfutil_pam_delete.md +++ b/docs/kfutil_pam_delete.md @@ -31,6 +31,7 @@ kfutil pam delete [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -40,4 +41,4 @@ kfutil pam delete [flags] * [kfutil pam](kfutil_pam.md) - Keyfactor PAM Provider APIs. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_pam_get.md b/docs/kfutil_pam_get.md index 62f4b754..03c66a00 100644 --- a/docs/kfutil_pam_get.md +++ b/docs/kfutil_pam_get.md @@ -31,6 +31,7 @@ kfutil pam get [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -40,4 +41,4 @@ kfutil pam get [flags] * [kfutil pam](kfutil_pam.md) - Keyfactor PAM Provider APIs. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_pam_list.md b/docs/kfutil_pam_list.md index af95f9bb..2e11dfb6 100644 --- a/docs/kfutil_pam_list.md +++ b/docs/kfutil_pam_list.md @@ -30,6 +30,7 @@ kfutil pam list [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -39,4 +40,4 @@ kfutil pam list [flags] * [kfutil pam](kfutil_pam.md) - Keyfactor PAM Provider APIs. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_pam_types-create.md b/docs/kfutil_pam_types-create.md index d6e2e49a..7002cbe1 100644 --- a/docs/kfutil_pam_types-create.md +++ b/docs/kfutil_pam_types-create.md @@ -38,6 +38,7 @@ kfutil pam types-create [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -47,4 +48,4 @@ kfutil pam types-create [flags] * [kfutil pam](kfutil_pam.md) - Keyfactor PAM Provider APIs. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_pam_types-list.md b/docs/kfutil_pam_types-list.md index 33fb9dae..63544703 100644 --- a/docs/kfutil_pam_types-list.md +++ b/docs/kfutil_pam_types-list.md @@ -30,6 +30,7 @@ kfutil pam types-list [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -39,4 +40,4 @@ kfutil pam types-list [flags] * [kfutil pam](kfutil_pam.md) - Keyfactor PAM Provider APIs. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_pam_update.md b/docs/kfutil_pam_update.md index c92d7073..abb7db52 100644 --- a/docs/kfutil_pam_update.md +++ b/docs/kfutil_pam_update.md @@ -31,6 +31,7 @@ kfutil pam update [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -40,4 +41,4 @@ kfutil pam update [flags] * [kfutil pam](kfutil_pam.md) - Keyfactor PAM Provider APIs. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_status.md b/docs/kfutil_status.md index 55a3647d..8c300156 100644 --- a/docs/kfutil_status.md +++ b/docs/kfutil_status.md @@ -30,6 +30,7 @@ kfutil status [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -39,4 +40,4 @@ kfutil status [flags] * [kfutil](kfutil.md) - Keyfactor CLI utilities -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_store-types.md b/docs/kfutil_store-types.md index 65127266..239320a5 100644 --- a/docs/kfutil_store-types.md +++ b/docs/kfutil_store-types.md @@ -26,6 +26,7 @@ A collections of APIs and utilities for interacting with Keyfactor certificate s --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -40,4 +41,4 @@ A collections of APIs and utilities for interacting with Keyfactor certificate s * [kfutil store-types list](kfutil_store-types_list.md) - List certificate store types. * [kfutil store-types templates-fetch](kfutil_store-types_templates-fetch.md) - Fetches store type templates from Keyfactor's Github. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_store-types_create.md b/docs/kfutil_store-types_create.md index e9cca52f..9b071b59 100644 --- a/docs/kfutil_store-types_create.md +++ b/docs/kfutil_store-types_create.md @@ -18,7 +18,7 @@ kfutil store-types create [flags] -b, --git-ref string The git branch or tag to reference when pulling store-types from the internet. (default "main") -h, --help help for create -l, --list List valid store types. - -n, --name string Short name of the certificate store type to get. Valid choices are: AKV, AzureApp, AzureAppGW, AzureSP, Fortigate, HCVKV, HCVKVJKS, HCVKVP12, HCVKVPEM, HCVKVPFX, HCVPKI, IISU, K8SCert, K8SCluster, K8SJKS, K8SNS, K8SPKCS12, K8SSecret, K8STLSSecr, RFDER, RFJKS, RFKDB, RFORA, RFPEM, RFPkcs12, SAMPLETYPE, Signum, VMware-NSX, WinCerMgmt, WinCert + -n, --name string Short name of the certificate store type to get. Valid choices are: AKV, AWS-ACM, Akamai, AppGwBin, AzureApp, AzureAppGw, AzureSP, BIPCamera, CiscoAsa, CitrixAdc, F5-BigIQ, F5-CA-REST, F5-SL-REST, F5-WS-REST, Fortigate, GCPLoadBal, GcpCertMgr, HCVKV, HCVKVJKS, HCVKVP12, HCVKVPEM, HCVKVPFX, HCVPKI, IISU, Imperva, K8SCert, K8SCluster, K8SJKS, K8SNS, K8SPKCS12, K8SSecret, K8STLSSecr, MOST, Nmap, PaloAlto, RFDER, RFJKS, RFKDB, RFORA, RFPEM, RFPkcs12, SAMPLETYPE, Signum, VMware-NSX, WinCerMgmt, WinCert, WinSql ``` ### Options inherited from parent commands @@ -35,6 +35,7 @@ kfutil store-types create [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -44,4 +45,4 @@ kfutil store-types create [flags] * [kfutil store-types](kfutil_store-types.md) - Keyfactor certificate store types APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_store-types_delete.md b/docs/kfutil_store-types_delete.md index 2fd868df..ff643096 100644 --- a/docs/kfutil_store-types_delete.md +++ b/docs/kfutil_store-types_delete.md @@ -34,6 +34,7 @@ kfutil store-types delete [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -43,4 +44,4 @@ kfutil store-types delete [flags] * [kfutil store-types](kfutil_store-types.md) - Keyfactor certificate store types APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_store-types_get.md b/docs/kfutil_store-types_get.md index f272b165..2cddccc8 100644 --- a/docs/kfutil_store-types_get.md +++ b/docs/kfutil_store-types_get.md @@ -35,6 +35,7 @@ kfutil store-types get [-i | -n ] [-b --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -44,4 +45,4 @@ kfutil store-types get [-i | -n ] [-b * [kfutil store-types](kfutil_store-types.md) - Keyfactor certificate store types APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_store-types_list.md b/docs/kfutil_store-types_list.md index 5e65ce91..feefa242 100644 --- a/docs/kfutil_store-types_list.md +++ b/docs/kfutil_store-types_list.md @@ -30,6 +30,7 @@ kfutil store-types list [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -39,4 +40,4 @@ kfutil store-types list [flags] * [kfutil store-types](kfutil_store-types.md) - Keyfactor certificate store types APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_store-types_templates-fetch.md b/docs/kfutil_store-types_templates-fetch.md index 305f700f..558db742 100644 --- a/docs/kfutil_store-types_templates-fetch.md +++ b/docs/kfutil_store-types_templates-fetch.md @@ -31,6 +31,7 @@ kfutil store-types templates-fetch [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -40,4 +41,4 @@ kfutil store-types templates-fetch [flags] * [kfutil store-types](kfutil_store-types.md) - Keyfactor certificate store types APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores.md b/docs/kfutil_stores.md index 895cb020..11cd5231 100644 --- a/docs/kfutil_stores.md +++ b/docs/kfutil_stores.md @@ -26,6 +26,7 @@ A collections of APIs and utilities for interacting with Keyfactor certificate s --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -42,4 +43,4 @@ A collections of APIs and utilities for interacting with Keyfactor certificate s * [kfutil stores list](kfutil_stores_list.md) - List certificate stores. * [kfutil stores rot](kfutil_stores_rot.md) - Root of trust utility -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_delete.md b/docs/kfutil_stores_delete.md index b1f6f106..18a6b609 100644 --- a/docs/kfutil_stores_delete.md +++ b/docs/kfutil_stores_delete.md @@ -33,6 +33,7 @@ kfutil stores delete [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -42,4 +43,4 @@ kfutil stores delete [flags] * [kfutil stores](kfutil_stores.md) - Keyfactor certificate stores APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_export.md b/docs/kfutil_stores_export.md index 07a8a61e..bcd5fdf8 100644 --- a/docs/kfutil_stores_export.md +++ b/docs/kfutil_stores_export.md @@ -34,6 +34,7 @@ kfutil stores export [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -43,4 +44,4 @@ kfutil stores export [flags] * [kfutil stores](kfutil_stores.md) - Keyfactor certificate stores APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_get.md b/docs/kfutil_stores_get.md index 4592c8e2..97a0f409 100644 --- a/docs/kfutil_stores_get.md +++ b/docs/kfutil_stores_get.md @@ -31,6 +31,7 @@ kfutil stores get [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -40,4 +41,4 @@ kfutil stores get [flags] * [kfutil stores](kfutil_stores.md) - Keyfactor certificate stores APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_import.md b/docs/kfutil_stores_import.md index fe02d290..fc7b75e6 100644 --- a/docs/kfutil_stores_import.md +++ b/docs/kfutil_stores_import.md @@ -26,6 +26,7 @@ Tools for generating import templates and importing certificate stores --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -37,4 +38,4 @@ Tools for generating import templates and importing certificate stores * [kfutil stores import csv](kfutil_stores_import_csv.md) - Create certificate stores from CSV file. * [kfutil stores import generate-template](kfutil_stores_import_generate-template.md) - For generating a CSV template with headers for bulk store creation. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_import_csv.md b/docs/kfutil_stores_import_csv.md index 1766049f..67d1239e 100644 --- a/docs/kfutil_stores_import_csv.md +++ b/docs/kfutil_stores_import_csv.md @@ -38,6 +38,7 @@ kfutil stores import csv --file --store-type-id --store-type-id --store-t --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -45,4 +46,4 @@ kfutil stores import generate-template --store-type-id --store-t * [kfutil stores import](kfutil_stores_import.md) - Import a file with certificate store parameters and create them in keyfactor. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_inventory.md b/docs/kfutil_stores_inventory.md index 39563a54..ee55cfc7 100644 --- a/docs/kfutil_stores_inventory.md +++ b/docs/kfutil_stores_inventory.md @@ -26,6 +26,7 @@ Commands related to certificate store inventory management --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -38,4 +39,4 @@ Commands related to certificate store inventory management * [kfutil stores inventory remove](kfutil_stores_inventory_remove.md) - Removes a certificate from the certificate store inventory. * [kfutil stores inventory show](kfutil_stores_inventory_show.md) - Show the inventory of a certificate store. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_inventory_add.md b/docs/kfutil_stores_inventory_add.md index 84014d22..be3e5d92 100644 --- a/docs/kfutil_stores_inventory_add.md +++ b/docs/kfutil_stores_inventory_add.md @@ -44,6 +44,7 @@ kfutil stores inventory add [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -53,4 +54,4 @@ kfutil stores inventory add [flags] * [kfutil stores inventory](kfutil_stores_inventory.md) - Commands related to certificate store inventory management -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_inventory_remove.md b/docs/kfutil_stores_inventory_remove.md index 200d649a..706058f9 100644 --- a/docs/kfutil_stores_inventory_remove.md +++ b/docs/kfutil_stores_inventory_remove.md @@ -40,6 +40,7 @@ kfutil stores inventory remove [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -49,4 +50,4 @@ kfutil stores inventory remove [flags] * [kfutil stores inventory](kfutil_stores_inventory.md) - Commands related to certificate store inventory management -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_inventory_show.md b/docs/kfutil_stores_inventory_show.md index 76ec36da..25948fba 100644 --- a/docs/kfutil_stores_inventory_show.md +++ b/docs/kfutil_stores_inventory_show.md @@ -34,6 +34,7 @@ kfutil stores inventory show [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -43,4 +44,4 @@ kfutil stores inventory show [flags] * [kfutil stores inventory](kfutil_stores_inventory.md) - Commands related to certificate store inventory management -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_list.md b/docs/kfutil_stores_list.md index eb1eeb4d..cedc3b25 100644 --- a/docs/kfutil_stores_list.md +++ b/docs/kfutil_stores_list.md @@ -30,6 +30,7 @@ kfutil stores list [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -39,4 +40,4 @@ kfutil stores list [flags] * [kfutil stores](kfutil_stores.md) - Keyfactor certificate stores APIs and utilities. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_rot.md b/docs/kfutil_stores_rot.md index d3d7d632..ff49440e 100644 --- a/docs/kfutil_stores_rot.md +++ b/docs/kfutil_stores_rot.md @@ -38,6 +38,7 @@ kfutil stores rot reconcile --import-csv --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -50,4 +51,4 @@ kfutil stores rot reconcile --import-csv * [kfutil stores rot generate-template](kfutil_stores_rot_generate-template.md) - For generating Root Of Trust template(s) * [kfutil stores rot reconcile](kfutil_stores_rot_reconcile.md) - Reconcile either takes in or will generate an audit report and then add/remove certs as needed. -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_rot_audit.md b/docs/kfutil_stores_rot_audit.md index a03ce0dc..7d8a321a 100644 --- a/docs/kfutil_stores_rot_audit.md +++ b/docs/kfutil_stores_rot_audit.md @@ -38,6 +38,7 @@ kfutil stores rot audit [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -47,4 +48,4 @@ kfutil stores rot audit [flags] * [kfutil stores rot](kfutil_stores_rot.md) - Root of trust utility -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_rot_generate-template.md b/docs/kfutil_stores_rot_generate-template.md index 7c143a90..054ec028 100644 --- a/docs/kfutil_stores_rot_generate-template.md +++ b/docs/kfutil_stores_rot_generate-template.md @@ -36,6 +36,7 @@ kfutil stores rot generate-template [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -45,4 +46,4 @@ kfutil stores rot generate-template [flags] * [kfutil stores rot](kfutil_stores_rot.md) - Root of trust utility -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_stores_rot_reconcile.md b/docs/kfutil_stores_rot_reconcile.md index 24c49be2..6f45ed9f 100644 --- a/docs/kfutil_stores_rot_reconcile.md +++ b/docs/kfutil_stores_rot_reconcile.md @@ -43,6 +43,7 @@ kfutil stores rot reconcile [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -52,4 +53,4 @@ kfutil stores rot reconcile [flags] * [kfutil stores rot](kfutil_stores_rot.md) - Root of trust utility -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/docs/kfutil_version.md b/docs/kfutil_version.md index 45ebfb37..383c1de2 100644 --- a/docs/kfutil_version.md +++ b/docs/kfutil_version.md @@ -30,6 +30,7 @@ kfutil version [flags] --hostname string Hostname to use for authenticating to Keyfactor Command. --log-insecure Log insecure API requests. (USE AT YOUR OWN RISK, this WILL log sensitive information to the console.) --no-prompt Do not prompt for any user input and assume defaults or environmental variables are set. + --offline Will not attempt to connect to GitHub for latest release information and resources. --password string Password to use for authenticating to Keyfactor Command. WARNING: Remember to delete your console history if providing kfcPassword here in plain text. --profile string Use a specific profile from your config file. If not specified the config named 'default' will be used if it exists. --username string Username to use for authenticating to Keyfactor Command. @@ -39,4 +40,4 @@ kfutil version [flags] * [kfutil](kfutil.md) - Keyfactor CLI utilities -###### Auto generated by spf13/cobra on 27-Feb-2024 +###### Auto generated by spf13/cobra on 8-Sep-2024 diff --git a/go.mod b/go.mod index eeaf7315..d839dc21 100644 --- a/go.mod +++ b/go.mod @@ -4,45 +4,45 @@ go 1.21 require ( github.com/AlecAivazis/survey/v2 v2.3.7 - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 github.com/Jeffail/gabs v1.4.0 github.com/Keyfactor/keyfactor-go-client-sdk v1.0.2 - github.com/Keyfactor/keyfactor-go-client/v2 v2.2.7 + github.com/Keyfactor/keyfactor-go-client/v2 v2.2.11 github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 - github.com/creack/pty v1.1.21 + github.com/creack/pty v1.1.23 github.com/google/go-cmp v0.6.0 github.com/google/uuid v1.6.0 github.com/hinshun/vt10x v0.0.0-20220301184237-5011da428d02 github.com/joho/godotenv v1.5.1 - github.com/rs/zerolog v1.31.0 - github.com/spf13/cobra v1.8.0 + github.com/rs/zerolog v1.33.0 + github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.8.4 - golang.org/x/crypto v0.19.0 + github.com/stretchr/testify v1.9.0 + golang.org/x/crypto v0.25.0 gopkg.in/yaml.v3 v3.0.1 //github.com/google/go-cmp/cmp v0.5.9 ) require ( - github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/golang-jwt/jwt/v5 v5.0.0 // indirect + github.com/golang-jwt/jwt/v5 v5.2.1 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect - github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/spbsoluble/go-pkcs12 v0.3.3 // indirect go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 // indirect - golang.org/x/net v0.20.0 // indirect - golang.org/x/sys v0.17.0 // indirect - golang.org/x/term v0.17.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/net v0.27.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 // indirect + golang.org/x/text v0.16.0 // indirect ) diff --git a/go.sum b/go.sum index f0537dc1..2b7305cd 100644 --- a/go.sum +++ b/go.sum @@ -1,37 +1,35 @@ github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ= github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2 h1:c4k2FIYIh4xtwqrQwV0Ct1v5+ehlNXj5NI/MWVsiTkQ= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2/go.mod h1:5FDJtLEO/GxwNgUxbwrY3LP0pEoThTQJtk2oysdXHxM= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc= -github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk= -github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 h1:nyQWyZvwGTvunIMxi1Y9uXkcyr+I7TeNrr/foo4Kpk8= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/Jeffail/gabs v1.4.0 h1://5fYRRTq1edjfIrQGvdkcd22pkYUrHZ5YC/H2GJVAo= github.com/Jeffail/gabs v1.4.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= github.com/Keyfactor/keyfactor-go-client v1.4.3 h1:CmGvWcuIbDRFM0PfYOQH6UdtAgplvZBpU++KTU8iseg= github.com/Keyfactor/keyfactor-go-client v1.4.3/go.mod h1:3ZymLNCaSazglcuYeNfm9nrzn22wcwLjIWURrnUygBo= github.com/Keyfactor/keyfactor-go-client-sdk v1.0.2 h1:caLlzFCz2L4Dth/9wh+VlypFATmOMmCSQkCPKOKMxw8= github.com/Keyfactor/keyfactor-go-client-sdk v1.0.2/go.mod h1:Z5pSk8YFGXHbKeQ1wTzVN8A4P/fZmtAwqu3NgBHbDOs= -github.com/Keyfactor/keyfactor-go-client/v2 v2.2.7 h1:fHZF5lDEWKQEI8QOPeseG/y9Bd4h2DhOiUWkNx+rKJU= -github.com/Keyfactor/keyfactor-go-client/v2 v2.2.7/go.mod h1:3mfxdcwntB532QIATokBEkBCH0eXN2G/cdMZtu9NwNg= +github.com/Keyfactor/keyfactor-go-client/v2 v2.2.11 h1:Tpk/AKQZmfCZFpODTpLO2+T0XUOgOrvp1ZhQq6J+RSo= +github.com/Keyfactor/keyfactor-go-client/v2 v2.2.11/go.mod h1:fiv/ai955uffPu+ZVye5OfOR+fHoVS/sbfVwTWokNrc= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= -github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.23 h1:4M6+isWdcStXEf15G/RbrMPOQj1dZ7HPZCGwE4kOeP0= +github.com/creack/pty v1.1.23/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= -github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= @@ -45,6 +43,10 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -56,71 +58,72 @@ github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APP github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= -github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/spbsoluble/go-pkcs12 v0.3.3 h1:3nh7IKn16RDpmrSMtOu1JvbB0XHYq1j+IsICdU1c7J4= github.com/spbsoluble/go-pkcs12 v0.3.3/go.mod h1:MAxKIUEIl/QVcua/I1L4Otyxl9UvLCCIktce2Tjz6Nw= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 h1:CCriYyAfq1Br1aIYettdHZTy8mBTIPo7We18TuO/bak= go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/install.sh b/install.sh index 240a661c..43d16ad9 100755 --- a/install.sh +++ b/install.sh @@ -146,6 +146,7 @@ getVersion() { printf "Could not retrieve the latest release tag information from %s: %s\n" "${remote_release_url}" "${releases_response}" exit 1 fi + echo "Latest release version is $VERSION" else # Clean up version if prefixed with 'v' VERSION=$(echo "$VERSION" | tr -d 'v') diff --git a/main.go b/main.go index 69f352bd..15e0228b 100644 --- a/main.go +++ b/main.go @@ -15,6 +15,9 @@ package main import ( + _ "embed" + + "github.com/spf13/cobra/doc" "kfutil/cmd" ) @@ -26,5 +29,10 @@ func main() { // docs() // os.Exit(0) //} + cmd.Execute() } + +func docs() { + doc.GenMarkdownTree(cmd.RootCmd, "./docs") +} diff --git a/store_types.json b/store_types.json index 8b7cb27c..cf7471af 100644 --- a/store_types.json +++ b/store_types.json @@ -1,78 +1,1298 @@ [ { + "BlueprintAllowed": false, + "Capability": "AKV", + "CustomAliasAllowed": "Optional", + "EntryParameters": null, + "JobProperties": [], + "LocalStore": false, "Name": "Azure Keyvault", + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PowerShell": false, + "PrivateKeyAllowed": "Optional", + "Properties": [ + { + "Name": "TenantId", + "DisplayName": "Tenant Id", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "SkuType", + "DisplayName": "SKU Type", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "standard,premium", + "Required": false + }, + { + "Name": "VaultRegion", + "DisplayName": "Vault Region", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "eastus,eastus2,westus2,westus3,westus", + "Required": false + }, + { + "Name": "AzureCloud", + "DisplayName": "Azure Cloud", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "public,china,germany,government", + "Required": false + }, + { + "Name": "PrivateEndpoint", + "DisplayName": "Private KeyVault Endpoint", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + } + ], + "ServerRequired": true, "ShortName": "AKV", - "Capability": "AKV", + "StorePathType": "", + "StorePathValue": "", + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + } + }, + { + "Name": "AWS Certificate Manager", + "ShortName": "AWS-ACM", + "Capability": "AWS-ACM", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "UseOAuth", + "DisplayName": "Use OAuth 2.0 Provider", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "false", + "Required": true + }, + { + "Name": "UseIAM", + "DisplayName": "Use IAM User Auth", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "false", + "Required": true + }, + { + "Name": "OAuthScope", + "DisplayName": "OAuth Scope", + "Type": "String", + "DependsOn": "UseOAuth", + "DefaultValue": null, + "Required": false + }, + { + "Name": "OAuthGrantType", + "DisplayName": "OAuth Grant Type", + "Type": "String", + "DependsOn": "UseOAuth", + "DefaultValue": "client_credentials", + "Required": false + }, + { + "Name": "OAuthUrl", + "DisplayName": "OAuth Url", + "Type": "String", + "DependsOn": "UseOAuth", + "DefaultValue": "https://***/oauth2/default/v1/token", + "Required": false + }, + { + "Name": "IamAccountId", + "DisplayName": "IAM AWS Account ID", + "Type": "String", + "DependsOn": "UseIAM", + "DefaultValue": null, + "Required": false + }, + { + "Name": "OAuthAccountId", + "DisplayName": "OAuth AWS Account ID", + "Type": "String", + "DependsOn": "UseOAuth", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "true", + "Required": true + } + ], + "EntryParameters": [ + { + "Name": "AWS Region", + "DisplayName": "AWS Region", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": true, + "OnRemove": false, + "OnReenrollment": false + } + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Optional" + }, + { + "Name": "Akamai Certificate Provisioning Service", + "ShortName": "Akamai", + "Capability": "Akamai", + "LocalStore": false, + "SupportedOperations": { + "Add": false, + "Create": false, + "Discovery": false, + "Enrollment": true, + "Remove": false + }, + "Properties": [ + { + "StoreTypeId;omitempty": 0, + "Name": "access_token", + "DisplayName": "Access Token", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": true + }, + { + "StoreTypeId;omitempty": 0, + "Name": "client_token", + "DisplayName": "Client Token", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": true + }, + { + "StoreTypeId;omitempty": 0, + "Name": "client_secret", + "DisplayName": "Client Secret", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": true + } + ], + "EntryParameters": [ + { + "StoreTypeId;omitempty": 0, + "Name": "EnrollmentId", + "DisplayName": "Enrollment ID", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + }, + { + "StoreTypeId;omitempty": 0, + "Name": "ContractId", + "DisplayName": "Contract ID", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "Sans", + "DisplayName": "SANs", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + } + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-addressLineOne", + "DisplayName": "Admin - Address Line 1", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-addressLineTwo", + "DisplayName": "Admin - Address Line 2", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-city", + "DisplayName": "Admin - City", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-country", + "DisplayName": "Admin - Country", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-email", + "DisplayName": "Admin - Email", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-firstName", + "DisplayName": "Admin - First Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-lastName", + "DisplayName": "Admin - Last Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-organizationName", + "DisplayName": "Admin - Organization Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-phone", + "DisplayName": "Admin - Phone", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-postalCode", + "DisplayName": "Admin - Postal Code", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-region", + "DisplayName": "Admin - Region", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "admin-title", + "DisplayName": "Admin - Title", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-addressLineOne", + "DisplayName": "Org - Address Line 1", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-addressLineTwo", + "DisplayName": "Org - Address Line 2", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-city", + "DisplayName": "Org - City", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-country", + "DisplayName": "Org - Country", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-organizationName", + "DisplayName": "Org - Organization Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-phone", + "DisplayName": "Org - Phone", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-postalCode", + "DisplayName": "Org - Postal Code", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "org-region", + "DisplayName": "Org - Region", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-addressLineOne", + "DisplayName": "Tech - Address Line 1", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-addressLineTwo", + "DisplayName": "Tech - Address Line 2", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-city", + "DisplayName": "Tech - City", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-country", + "DisplayName": "Tech - Country", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-email", + "DisplayName": "Tech - Email", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-firstName", + "DisplayName": "Tech - First Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-lastName", + "DisplayName": "Tech - Last Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-organizationName", + "DisplayName": "Tech - Organization Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-phone", + "DisplayName": "Tech - Phone", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-postalCode", + "DisplayName": "Tech - Postal Code", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-region", + "DisplayName": "Tech - Region", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + }, + { + "StoreTypeId;omitempty": 0, + "Name": "tech-title", + "DisplayName": "Tech - Title", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DefaultValue": null + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "MultipleChoice", + "StorePathValue": "[\"Production\",\"Staging\"]", + "PrivateKeyAllowed": "Forbidden", + "ServerRequired": false, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "Azure Application Gateway Certificate Binding", + "ShortName": "AppGwBin", + "Capability": "AzureAppGwBin", + "LocalStore": false, + "ClientMachineDescription": "The Azure Tenant (directory) ID that owns the Service Principal.", + "StorePathDescription": "Azure resource ID of the application gateway, following the format: /subscriptions//resourceGroups//providers/Microsoft.Network/applicationGateways/.", + "SupportedOperations": { + "Add": true, + "Remove": false, + "Enrollment": false, + "Discovery": true, + "Inventory": false + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "Description": "Application ID of the service principal, representing the identity used for managing the Application Gateway.", + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "Description": "A Client Secret that the extension will use to authenticate with the Azure Resource Management API for managing Application Gateway certificates, OR the password that encrypts the private key in ClientCertificate", + "Required": false + }, + { + "Name": "ClientCertificate", + "DisplayName": "Client Certificate", + "Type": "Secret", + "Description": "The client certificate used to authenticate with Azure Resource Management API for managing Application Gateway certificates. See the [requirements](#client-certificate-or-client-secret) for more information.", + "Required": false + }, + { + "Name": "AzureCloud", + "DisplayName": "Azure Global Cloud Authority Host", + "Type": "MultipleChoice", + "DefaultValue": "public,china,germany,government", + "Description": "Specifies the Azure Cloud instance used by the organization.", + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DefaultValue": "true", + "Description": "Specifies whether SSL should be used for communication with the server. Set to 'true' to enable SSL, and 'false' to disable it.", + "Required": true + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "Azure App Registration (Application)", + "ShortName": "AzureApp", + "Capability": "AzureApp", + "LocalStore": false, + "ClientMachineDescription": "The Azure Tenant (directory) ID that owns the Service Principal.", + "StorePathDescription": "The Application ID of the target Application/Service Principal that will be managed by the Azure App Registration and Enterprise Application Orchestrator extension.", + "SupportedOperations": { + "Add": true, + "Remove": true, + "Enrollment": false, + "Discovery": true, + "Inventory": true + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "Description": "The Application ID of the Service Principal used to authenticate with Microsoft Graph for managing Application/Service Principal certificates.", + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "Description": "A Client Secret that the extension will use to authenticate with Microsoft Graph for managing Application/Service Principal certificates, OR the password that encrypts the private key in ClientCertificate", + "Required": false + }, + { + "Name": "ClientCertificate", + "DisplayName": "Client Certificate", + "Type": "Secret", + "Description": "The client certificate used to authenticate with Microsoft Graph for managing Application/Service Principal certificates. See the [requirements](#client-certificate-or-client-secret) for more information.", + "Required": false + }, + { + "Name": "AzureCloud", + "DisplayName": "Azure Global Cloud Authority Host", + "Type": "MultipleChoice", + "DefaultValue": "public,china,germany,government", + "Description": "Specifies the Azure Cloud instance used by the organization.", + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DefaultValue": "true", + "Description": "Specifies whether SSL should be used for communication with the server. Set to 'true' to enable SSL, and 'false' to disable it.", + "Required": true + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "Azure Application Gateway Certificate", + "ShortName": "AzureAppGw", + "Capability": "AzureAppGw", + "LocalStore": false, + "ClientMachineDescription": "The Azure Tenant (directory) ID that owns the Service Principal.", + "StorePathDescription": "Azure resource ID of the application gateway, following the format: /subscriptions//resourceGroups//providers/Microsoft.Network/applicationGateways/.", + "SupportedOperations": { + "Add": true, + "Remove": true, + "Enrollment": false, + "Discovery": true, + "Inventory": true + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "Description": "Application ID of the service principal, representing the identity used for managing the Application Gateway.", + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "Description": "A Client Secret that the extension will use to authenticate with the Azure Resource Management API for managing Application Gateway certificates, OR the password that encrypts the private key in ClientCertificate", + "Required": false + }, + { + "Name": "ClientCertificate", + "DisplayName": "Client Certificate", + "Type": "Secret", + "Description": "The client certificate used to authenticate with Azure Resource Management API for managing Application Gateway certificates. See the [requirements](#client-certificate-or-client-secret) for more information.", + "Required": false + }, + { + "Name": "AzureCloud", + "DisplayName": "Azure Global Cloud Authority Host", + "Type": "MultipleChoice", + "DefaultValue": "public,china,germany,government", + "Description": "Specifies the Azure Cloud instance used by the organization.", + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DefaultValue": "true", + "Description": "Specifies whether SSL should be used for communication with the server. Set to 'true' to enable SSL, and 'false' to disable it.", + "Required": true + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "Azure Enterprise Application (Service Principal)", + "ShortName": "AzureSP", + "Capability": "AzureSP", + "LocalStore": false, + "ClientMachineDescription": "The Azure Tenant (directory) ID that owns the Service Principal.", + "StorePathDescription": "The Application ID of the target Application/Service Principal that will be managed by the Azure App Registration and Enterprise Application Orchestrator extension.", + "SupportedOperations": { + "Add": true, + "Remove": true, + "Enrollment": false, + "Discovery": true, + "Inventory": true + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "Description": "The Application ID of the Service Principal used to authenticate with Microsoft Graph for managing Application/Service Principal certificates.", + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "Description": "A Client Secret that the extension will use to authenticate with Microsoft Graph for managing Application/Service Principal certificates, OR the password that encrypts the private key in ClientCertificate", + "Required": false + }, + { + "Name": "ClientCertificate", + "DisplayName": "Client Certificate", + "Type": "Secret", + "Description": "The client certificate used to authenticate with Microsoft Graph for managing Application/Service Principal certificates. See the [requirements](#client-certificate-or-client-secret) for more information.", + "Required": false + }, + { + "Name": "AzureCloud", + "DisplayName": "Azure Global Cloud Authority Host", + "Type": "MultipleChoice", + "DefaultValue": "public,china,germany,government", + "Description": "Specifies the Azure Cloud instance used by the organization.", + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DefaultValue": "true", + "Description": "Specifies whether SSL should be used for communication with the server. Set to 'true' to enable SSL, and 'false' to disable it.", + "Required": true + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required" + }, + { + "Name": "Bosch IP Camera", + "ShortName": "BIPCamera", + "Capability": "BIPCamera", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": true, + "Remove": true + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "true", + "Required": true + } + ], + "EntryParameters": [ + { + "Name": "CertificateUsage", + "DisplayName": "Certificate Usage", + "Type": "MultipleChoice", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, + "Options": ",HTTPS,EAP-TLS-client,TLS-DATE-client" + }, + { + "Name": "Name", + "DisplayName": "Name (Alias)", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + } + }, + { + "Name": "Overwrite", + "DisplayName": "Overwrite", + "Type": "Bool", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, + "DefaultValue": "false" + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Optional", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Required" + }, + { + "Name": "CiscoAsa", + "ShortName": "CiscoAsa", + "Capability": "CiscoAsa", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "CommitToDisk", + "DisplayName": "Commit To Disk", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "false", + "Required": false + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "true", + "Required": true + } + ], + "EntryParameters": [ + { + "Name": "interfaces", + "DisplayName": "Interfaces Comma Separated", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Required" + }, + { + "Name": "CitrixAdc", + "ShortName": "CitrixAdc", + "Capability": "CitrixAdc", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "true", + "Required": true + }, + { + "Name": "linkToIssuer", + "DisplayName": "Link To Issuer", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "false", + "Required": false + } + ], + "EntryParameters": [ + { + "Name": "virtualServerName", + "DisplayName": "Virtual Server Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + }, + { + "Name": "sniCert", + "DisplayName": "SNI Cert", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": true, + "OnRemove": false, + "OnReenrollment": false + }, + "DefaultValue": "FALSE" + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "PrivateKeyAllowed": "Required", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required", + "InventoryEndpoint": "/AnyInventory/Update" + }, + { + "Name": "F5 Big IQ", + "ShortName": "F5-BigIQ", + "Capability": "F5-BigIQ", "LocalStore": false, "SupportedOperations": { "Add": true, - "Create": true, - "Discovery": true, - "Enrollment": false, + "Create": false, + "Discovery": false, + "Enrollment": true, "Remove": true }, "Properties": [ { - "Name": "TenantId", - "DisplayName": "Tenant Id", - "Type": "String", + "Name": "DeployCertificateOnRenewal", + "DisplayName": "Deploy Certificate to Linked Big IP on Renewal", + "Type": "Bool", "DependsOn": "", - "DefaultValue": null, + "DefaultValue": "false", "Required": false }, { - "Name": "SkuType", - "DisplayName": "SKU Type", - "Type": "MultipleChoice", + "Name": "IgnoreSSLWarning", + "DisplayName": "Ignore SSL Warning", + "Type": "Bool", "DependsOn": "", - "DefaultValue": "standard,premium", + "DefaultValue": "false", "Required": false }, { - "Name": "VaultRegion", - "DisplayName": "Vault Region", - "Type": "MultipleChoice", + "Name": "UseTokenAuth", + "DisplayName": "Use Token Authentication", + "Type": "Bool", "DependsOn": "", - "DefaultValue": "eastus,eastus2,westus2,westus3,westus", + "DefaultValue": "false", "Required": false }, { - "Name": "AzureCloud", - "DisplayName": "Azure Cloud", - "Type": "MultipleChoice", - "DependsOn": "", - "DefaultValue": "public,china,germany,government", + "Name": "LoginProviderName", + "DisplayName": "Authentication Provider Name", + "Type": "String", + "DependsOn": "UseTokenAuth", + "DefaultValue": "", "Required": false + } + ], + "EntryParameters": [ + { + "Name": "Alias", + "DisplayName": "Alias (Reenrollment only)", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DependsOn": "", + "DefaultValue": "", + "Options": "" }, { - "Name": "PrivateEndpoint", - "DisplayName": "Private KeyVault Endpoint", + "Name": "Overwrite", + "DisplayName": "Overwrite (Reenrollment only)", + "Type": "Bool", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DependsOn": "", + "DefaultValue": "False", + "Options": "" + }, + { + "Name": "SANs", + "DisplayName": "SANs (Reenrollment only)", "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, "DependsOn": "", - "DefaultValue": null, - "Required": false + "DefaultValue": "", + "Options": "" } ], - "EntryParameters": null, "PasswordOptions": { "EntrySupported": false, "StoreRequired": false, "Style": "Default" }, - "StorePathType": "", - "StorePathValue": "", - "PrivateKeyAllowed": "Optional", + "PrivateKeyAllowed": "Required", "JobProperties": [], "ServerRequired": true, "PowerShell": false, - "BlueprintAllowed": false, - "CustomAliasAllowed": "Optional" + "BlueprintAllowed": true, + "CustomAliasAllowed": "Required" }, { - "Name": "Azure Application (Auth)", - "ShortName": "AzureApp", - "Capability": "AzureApp", - "LocalStore": false, + "Name": "F5 CA Profiles REST", + "ShortName": "F5-CA-REST", + "Capability": "F5-CA-REST", "SupportedOperations": { "Add": true, "Create": false, @@ -82,31 +1302,84 @@ }, "Properties": [ { - "StoreTypeId": 279, + "Name": "PrimaryNode", + "DisplayName": "Primary Node", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "", + "Required": true + }, + { + "Name": "PrimaryNodeCheckRetryWaitSecs", + "DisplayName": "Primary Node Check Retry Wait Seconds", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "120", + "Required": true + }, + { + "Name": "PrimaryNodeCheckRetryMax", + "DisplayName": "Primary Node Check Retry Maximum", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "3", + "Required": true + }, + { + "Name": "F5Version", + "DisplayName": "Version of F5", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "v12,v13,v14,v15", + "Required": true + }, + { "Name": "ServerUsername", "DisplayName": "Server Username", "Type": "Secret", "DependsOn": "", - "DefaultValue": "", + "DefaultValue": null, "Required": false }, { - "StoreTypeId": 279, "Name": "ServerPassword", "DisplayName": "Server Password", "Type": "Secret", "DependsOn": "", - "DefaultValue": "", + "DefaultValue": null, "Required": false }, { - "StoreTypeId": 279, "Name": "ServerUseSsl", "DisplayName": "Use SSL", "Type": "Bool", "DependsOn": "", "DefaultValue": "true", "Required": true + }, + { + "Name": "PrimaryNodeOnlineRequired", + "DisplayName": "Primary Node Online Required", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "", + "Required": true + }, + { + "Name": "IgnoreSSLWarning", + "DisplayName": "Ignore SSL Warning", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "False", + "Required": true + }, + { + "Name": "UseTokenAuth", + "DisplayName": "Use Token Authentication", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": true } ], "EntryParameters": [], @@ -119,14 +1392,13 @@ "JobProperties": [], "ServerRequired": true, "PowerShell": false, - "BlueprintAllowed": false, + "BlueprintAllowed": true, "CustomAliasAllowed": "Required" }, { - "Name": "Azure Application Gateway", - "ShortName": "AzureAppGW", - "Capability": "AzureAppGW", - "LocalStore": false, + "Name": "F5 SSL Profiles REST", + "ShortName": "F5-SL-REST", + "Capability": "F5-SL-REST", "SupportedOperations": { "Add": true, "Create": false, @@ -135,95 +1407,190 @@ "Remove": true }, "Properties": [ + { + "Name": "PrimaryNode", + "DisplayName": "Primary Node", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "", + "Required": true + }, + { + "Name": "PrimaryNodeCheckRetryWaitSecs", + "DisplayName": "Primary Node Check Retry Wait Seconds", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "120", + "Required": true + }, + { + "Name": "PrimaryNodeCheckRetryMax", + "DisplayName": "Primary Node Check Retry Maximum", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "3", + "Required": true + }, + { + "Name": "F5Version", + "DisplayName": "Version of F5", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "v12,v13,v14,v15", + "Required": true + }, { "Name": "ServerUsername", "DisplayName": "Server Username", "Type": "Secret", - "DependsOn": null, + "DependsOn": "", "DefaultValue": null, - "Required": true + "Required": false }, { "Name": "ServerPassword", "DisplayName": "Server Password", "Type": "Secret", - "DependsOn": null, + "DependsOn": "", "DefaultValue": null, - "Required": true + "Required": false }, { "Name": "ServerUseSsl", "DisplayName": "Use SSL", "Type": "Bool", - "DependsOn": null, + "DependsOn": "", "DefaultValue": "true", - "Required": false - } - ], - "EntryParameters": [ + "Required": true + }, { - "Name": "HTTPListenerName", - "DisplayName": "HTTP Listener Name", - "Type": "String", - "RequiredWhen": { - "HasPrivateKey": false, - "OnAdd": false, - "OnRemove": false, - "OnReenrollment": false - } + "Name": "PrimaryNodeOnlineRequired", + "DisplayName": "Primary Node Online Required", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "", + "Required": true + }, + { + "Name": "IgnoreSSLWarning", + "DisplayName": "Ignore SSL Warning", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "False", + "Required": true + }, + { + "Name": "UseTokenAuth", + "DisplayName": "Use Token Authentication", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "false", + "Required": true } ], + "EntryParameters": [], "PasswordOptions": { "EntrySupported": false, "StoreRequired": false, "Style": "Default" }, - "PrivateKeyAllowed": "Required", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], "ServerRequired": true, "PowerShell": false, - "BlueprintAllowed": false, - "CustomAliasAllowed": "Required", - "ServerRegistration": 13, - "InventoryEndpoint": "/AnyInventory/Update" + "BlueprintAllowed": true, + "CustomAliasAllowed": "Required" }, { - "Name": "Azure Service Principal (SSO/SAML)", - "ShortName": "AzureSP", - "Capability": "AzureSP", - "LocalStore": false, + "Name": "F5 WS Profiles REST", + "ShortName": "F5-WS-REST", + "Capability": "F5-WS-REST", "SupportedOperations": { "Add": true, "Create": false, - "Discovery": true, + "Discovery": false, "Enrollment": false, - "Remove": true + "Remove": false }, "Properties": [ { - "StoreTypeId": 280, + "Name": "PrimaryNode", + "DisplayName": "Primary Node", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "", + "Required": true + }, + { + "Name": "PrimaryNodeCheckRetryWaitSecs", + "DisplayName": "Primary Node Check Retry Wait Seconds", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "120", + "Required": true + }, + { + "Name": "PrimaryNodeCheckRetryMax", + "DisplayName": "Primary Node Check Retry Maximum", + "Type": "String", + "DependsOn": "PrimaryNodeOnlineRequired", + "DefaultValue": "3", + "Required": true + }, + { + "Name": "F5Version", + "DisplayName": "Version of F5", + "Type": "MultipleChoice", + "DependsOn": "", + "DefaultValue": "v12,v13,v14,v15", + "Required": true + }, + { "Name": "ServerUsername", "DisplayName": "Server Username", "Type": "Secret", "DependsOn": "", - "DefaultValue": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": "", + "DefaultValue": null, "Required": false }, { - "StoreTypeId": 280, - "Name": "ServerPassword", - "DisplayName": "Server Password", - "Type": "Secret", + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "true", + "Required": true + }, + { + "Name": "PrimaryNodeOnlineRequired", + "DisplayName": "Primary Node Online Required", + "Type": "Bool", + "DependsOn": "", + "DefaultValue": "", + "Required": true + }, + { + "Name": "IgnoreSSLWarning", + "DisplayName": "Ignore SSL Warning", + "Type": "Bool", "DependsOn": "", - "DefaultValue": "", - "Required": false + "DefaultValue": "False", + "Required": true }, { - "StoreTypeId": 280, - "Name": "ServerUseSsl", - "DisplayName": "Use SSL", + "Name": "UseTokenAuth", + "DisplayName": "Use Token Authentication", "Type": "Bool", "DependsOn": "", - "DefaultValue": "true", + "DefaultValue": "false", "Required": true } ], @@ -237,8 +1604,8 @@ "JobProperties": [], "ServerRequired": true, "PowerShell": false, - "BlueprintAllowed": false, - "CustomAliasAllowed": "Required" + "BlueprintAllowed": true, + "CustomAliasAllowed": "Forbidden" }, { "Name": "Fortigate", @@ -264,6 +1631,82 @@ "Properties": [], "EntryParameters": [] }, + { + "Name": "GCP Load Balancer", + "ShortName": "GCPLoadBal", + "Capability": "GCPLoadBal", + "ServerRequired": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Optional", + "PowerShell": false, + "PrivateKeyAllowed": "Required", + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": false + }, + "Properties": [ + { + "Name": "jsonKey", + "DisplayName": "Service Account Key", + "Required": true, + "DependsOn": "", + "Type": "Secret", + "DefaultValue": "" + } + ], + "EntryParameters": [] + }, + { + "Name": "GCP Certificate Manager", + "ShortName": "GcpCertMgr", + "Capability": "GcpCertMgr", + "ServerRequired": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required", + "PowerShell": false, + "PrivateKeyAllowed": "Required", + "StorePathType": "", + "StorePathValue": "n/a", + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": false + }, + "Properties": [ + { + "Name": "Location", + "DisplayName": "Location", + "Type": "String", + "DependsOn": "", + "DefaultValue": "global", + "Required": true + }, + { + "Name": "ServiceAccountKey", + "DisplayName": "Service Account Key File Path", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + } + ], + "EntryParameters": [] + }, { "Name": "Hashicorp Vault Key-Value", "ShortName": "HCVKV", @@ -401,6 +1844,8 @@ "StoreRequired": false, "Style": "Default" }, + "StorePathType": "", + "StorePathValue": "", "PrivateKeyAllowed": "Optional", "JobProperties": [], "ServerRequired": true, @@ -476,6 +1921,8 @@ "StoreRequired": false, "Style": "Default" }, + "StorePathType": "", + "StorePathValue": "", "PrivateKeyAllowed": "Optional", "JobProperties": [], "ServerRequired": true, @@ -626,6 +2073,8 @@ "StoreRequired": false, "Style": "Default" }, + "StorePathType": "", + "StorePathValue": "", "PrivateKeyAllowed": "Optional", "JobProperties": [], "ServerRequired": true, @@ -853,7 +2302,7 @@ "HasPrivateKey": false, "OnAdd": false, "OnRemove": false, - "OnReenrollment": false + "OnReenrollment": true }, "DependsOn": "", "DefaultValue": "", @@ -872,6 +2321,30 @@ "BlueprintAllowed": false, "CustomAliasAllowed": "Forbidden" }, + { + "Name": "Imperva", + "ShortName": "Imperva", + "Capability": "Imperva", + "ServerRequired": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Required", + "PowerShell": false, + "PrivateKeyAllowed": "Required", + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "PasswordOptions": { + "Style": "Default", + "EntrySupported": false, + "StoreRequired": true + }, + "Properties": [], + "EntryParameters": [] + }, { "Name": "K8SCert", "ShortName": "K8SCert", @@ -1023,7 +2496,7 @@ }, { "Name": "PasswordIsK8SSecret", - "DisplayName": "PasswordIsK8SSecret", + "DisplayName": "Password Is K8S Secret", "Type": "Bool", "DependsOn": "", "DefaultValue": "false", @@ -1036,36 +2509,12 @@ "DependsOn": "", "DefaultValue": null, "Required": false - }, - { - "Name": "ServerUsername", - "DisplayName": "Server Username", - "Type": "Secret", - "DependsOn": "", - "DefaultValue": null, - "Required": false - }, - { - "Name": "ServerPassword", - "DisplayName": "Server Password", - "Type": "Secret", - "DependsOn": "", - "DefaultValue": null, - "Required": true - }, - { - "Name": "ServerUseSsl", - "DisplayName": "Use SSL", - "Type": "Bool", - "DependsOn": "", - "DefaultValue": "true", - "Required": true } ], "EntryParameters": null, "PasswordOptions": { "EntrySupported": false, - "StoreRequired": true, + "StoreRequired": false, "Style": "Default" }, "StorePathType": "", @@ -1149,14 +2598,6 @@ "DefaultValue": "pkcs12", "Required": true }, - { - "Name": "KubeSecretKey", - "DisplayName": "Kube Secret Key", - "Type": "String", - "DependsOn": "", - "DefaultValue": "pfx", - "Required": false - }, { "Name": "CertificateDataFieldName", "DisplayName": "CertificateDataFieldName", @@ -1209,7 +2650,7 @@ "EntryParameters": null, "PasswordOptions": { "EntrySupported": false, - "StoreRequired": true, + "StoreRequired": false, "Style": "Default" }, "StorePathType": "", @@ -1243,37 +2684,149 @@ "Required": false }, { - "Name": "KubeSecretName", - "DisplayName": "KubeSecretName", + "Name": "KubeSecretName", + "DisplayName": "KubeSecretName", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "KubeSecretType", + "DisplayName": "KubeSecretType", + "Type": "String", + "DependsOn": "", + "DefaultValue": "secret", + "Required": true + }, + { + "Name": "SeparateChain", + "DisplayName": "Separate Certificate Chain", + "Type": "Bool", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "IncludeCertChain", + "DisplayName": "Include Certificate Chain", + "Type": "Bool", + "DefaultValue": "true", + "Required": false + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "K8STLSSecr", + "ShortName": "K8STLSSecr", + "Capability": "K8STLSSecr", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": true, + "Discovery": true, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "KubeNamespace", + "DisplayName": "KubeNamespace", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "KubeSecretName", + "DisplayName": "KubeSecretName", + "Type": "String", + "DependsOn": "", + "DefaultValue": null, + "Required": false + }, + { + "Name": "KubeSecretType", + "DisplayName": "KubeSecretType", + "Type": "String", + "DependsOn": "", + "DefaultValue": "tls_secret", + "Required": true + }, + { + "Name": "SeparateChain", + "DisplayName": "Separate Certificate Chain", + "Type": "Bool", + "DefaultValue": "false", + "Required": false + }, + { + "Name": "IncludeCertChain", + "DisplayName": "Include Certificate Chain", + "Type": "Bool", + "DefaultValue": "true", + "Required": false + } + ], + "EntryParameters": null, + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "", + "StorePathValue": "", + "PrivateKeyAllowed": "Optional", + "JobProperties": [], + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "MyOrchestratorStoreType", + "ShortName": "MOST", + "Capability": "MOST", + "LocalStore": false, + "SupportedOperations": { + "Add": false, + "Create": false, + "Discovery": true, + "Enrollment": false, + "Remove": false + }, + "Properties": [ + { + "Name": "CustomField1", + "DisplayName": "CustomField1", "Type": "String", "DependsOn": "", - "DefaultValue": null, - "Required": false + "DefaultValue": "default", + "Required": true }, { - "Name": "KubeSecretType", - "DisplayName": "KubeSecretType", + "Name": "CustomField2", + "DisplayName": "CustomField2", "Type": "String", "DependsOn": "", - "DefaultValue": "secret", + "DefaultValue": null, "Required": true - }, - { - "Name": "SeparateChain", - "DisplayName": "Separate Certificate Chain", - "Type": "Bool", - "DefaultValue": "false", - "Required": false - }, - { - "Name": "IncludeCertChain", - "DisplayName": "Include Certificate Chain", - "Type": "Bool", - "DefaultValue": "true", - "Required": false } ], - "EntryParameters": null, + "EntryParameters": [], "PasswordOptions": { "EntrySupported": false, "StoreRequired": false, @@ -1281,7 +2834,7 @@ }, "StorePathType": "", "StorePathValue": "", - "PrivateKeyAllowed": "Optional", + "PrivateKeyAllowed": "Forbidden", "JobProperties": [], "ServerRequired": true, "PowerShell": false, @@ -1289,71 +2842,92 @@ "CustomAliasAllowed": "Forbidden" }, { - "Name": "K8STLSSecr", - "ShortName": "K8STLSSecr", - "Capability": "K8STLSSecr", + "Name": "Nmap Orchestrator", + "ShortName": "Nmap", + "Capability": "Nmap", + "LocalStore": false, + "SupportedOperations": { + "Add": false, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Inventory": true, + "Reenrollment": false, + "Remove": true + }, + "Properties": [], + "EntryParameters": [], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathType": "Freeform", + "StorePathValue": "", + "PrivateKeyAllowed": "Forbidden", + "ServerRequired": false, + "PowerShell": false, + "BlueprintAllowed": false, + "CustomAliasAllowed": "Optional" + }, + { + "Name": "PaloAlto", + "ShortName": "PaloAlto", + "Capability": "PaloAlto", "LocalStore": false, "SupportedOperations": { "Add": true, - "Create": true, - "Discovery": true, + "Create": false, + "Discovery": false, "Enrollment": false, "Remove": true }, "Properties": [ { - "Name": "KubeNamespace", - "DisplayName": "KubeNamespace", - "Type": "String", - "DependsOn": "", + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": null, "DefaultValue": null, "Required": false }, { - "Name": "KubeSecretName", - "DisplayName": "KubeSecretName", - "Type": "String", - "DependsOn": "", + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": null, "DefaultValue": null, "Required": false }, { - "Name": "KubeSecretType", - "DisplayName": "KubeSecretType", - "Type": "String", - "DependsOn": "", - "DefaultValue": "tls_secret", - "Required": true - }, - { - "Name": "SeparateChain", - "DisplayName": "Separate Certificate Chain", + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", "Type": "Bool", - "DefaultValue": "false", - "Required": false + "DependsOn": null, + "DefaultValue": "true", + "Required": true }, { - "Name": "IncludeCertChain", - "DisplayName": "Include Certificate Chain", - "Type": "Bool", - "DefaultValue": "true", + "Name": "DeviceGroup", + "DisplayName": "Device Group", + "Type": "String", + "DependsOn": null, + "DefaultValue": null, "Required": false } ], - "EntryParameters": null, + "EntryParameters": [], "PasswordOptions": { "EntrySupported": false, "StoreRequired": false, "Style": "Default" }, - "StorePathType": "", - "StorePathValue": "", "PrivateKeyAllowed": "Optional", "JobProperties": [], "ServerRequired": true, "PowerShell": false, "BlueprintAllowed": false, - "CustomAliasAllowed": "Forbidden" + "CustomAliasAllowed": "Required" }, { "Name": "RFDER", @@ -1393,6 +2967,14 @@ "Type": "String", "DefaultValue": "" }, + { + "Name": "SudoImpersonatingUser", + "DisplayName": "Sudo Impersonating User", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, { "Name": "SeparatePrivateKeyFilePath", "DisplayName": "Separate Private Key File Location", @@ -1441,6 +3023,14 @@ "DependsOn": "", "Type": "String", "DefaultValue": "" + }, + { + "Name": "SudoImpersonatingUser", + "DisplayName": "Sudo Impersonating User", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" } ], "EntryParameters": [] @@ -1482,6 +3072,14 @@ "DependsOn": "", "Type": "String", "DefaultValue": "" + }, + { + "Name": "SudoImpersonatingUser", + "DisplayName": "Sudo Impersonating User", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" } ], "EntryParameters": [] @@ -1524,6 +3122,14 @@ "Type": "String", "DefaultValue": "" }, + { + "Name": "SudoImpersonatingUser", + "DisplayName": "Sudo Impersonating User", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, { "Name": "WorkFolder", "DisplayName": "Location to use for creation/removal of work files", @@ -1573,6 +3179,14 @@ "Type": "String", "DefaultValue": "" }, + { + "Name": "SudoImpersonatingUser", + "DisplayName": "Sudo Impersonating User", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" + }, { "Name": "IsTrustStore", "DisplayName": "Trust Store", @@ -1604,6 +3218,14 @@ "DependsOn": "", "Type": "Bool", "DefaultValue": false + }, + { + "Name": "IgnorePrivateKeyOnInventory", + "DisplayName": "Ignore Private Key On Inventory", + "Required": false, + "DependsOn": "", + "Type": "Bool", + "DefaultValue": false } ], "EntryParameters": [] @@ -1645,6 +3267,14 @@ "DependsOn": "", "Type": "String", "DefaultValue": "" + }, + { + "Name": "SudoImpersonatingUser", + "DisplayName": "Sudo Impersonating User", + "Required": false, + "DependsOn": "", + "Type": "String", + "DefaultValue": "" } ], "EntryParameters": [] @@ -1904,5 +3534,120 @@ "PowerShell": false, "BlueprintAllowed": false, "CustomAliasAllowed": "Forbidden" + }, + { + "Name": "WinSql", + "ShortName": "WinSql", + "Capability": "WinSql", + "LocalStore": false, + "SupportedOperations": { + "Add": true, + "Create": false, + "Discovery": false, + "Enrollment": false, + "Remove": true + }, + "Properties": [ + { + "Name": "WinRm Protocol", + "DisplayName": "WinRm Protocol", + "Type": "MultipleChoice", + "DependsOn": null, + "DefaultValue": "https,http", + "Required": true + }, + { + "Name": "WinRm Port", + "DisplayName": "WinRm Port", + "Type": "String", + "DependsOn": null, + "DefaultValue": "5986", + "Required": true + }, + { + "Name": "ServerUsername", + "DisplayName": "Server Username", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerPassword", + "DisplayName": "Server Password", + "Type": "Secret", + "DependsOn": null, + "DefaultValue": null, + "Required": false + }, + { + "Name": "ServerUseSsl", + "DisplayName": "Use SSL", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "true", + "Required": true + }, + { + "Name": "RestartService", + "DisplayName": "Restart SQL Service After Cert Installed", + "Type": "Bool", + "DependsOn": null, + "DefaultValue": "false", + "Required": true + } + ], + "EntryParameters": [ + { + "Name": "InstanceName", + "DisplayName": "Instance Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + } + }, + { + "Name": "ProviderName", + "DisplayName": "Crypto Provider Name", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": false + }, + "DependsOn": "", + "DefaultValue": "", + "Options": "" + }, + { + "Name": "SAN", + "DisplayName": "SAN", + "Type": "String", + "RequiredWhen": { + "HasPrivateKey": false, + "OnAdd": false, + "OnRemove": false, + "OnReenrollment": true + }, + "DependsOn": "", + "DefaultValue": "", + "Options": "" + } + ], + "PasswordOptions": { + "EntrySupported": false, + "StoreRequired": false, + "Style": "Default" + }, + "StorePathValue": "My", + "PrivateKeyAllowed": "Optional", + "ServerRequired": true, + "PowerShell": false, + "BlueprintAllowed": true, + "CustomAliasAllowed": "Forbidden" } ] \ No newline at end of file