diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8204db7..f74b675 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,3 +14,21 @@ jobs: go-version-file: go.mod - run: go build ./... - run: go test ./... -v -race -count=1 + + wfctl-strict-contracts: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + - name: Fail fast if plugin.json is missing + run: test -f plugin.json || (echo "plugin.json not found" && exit 1) + - name: Fail fast if plugin.contracts.json is missing + run: test -f plugin.contracts.json || (echo "plugin.contracts.json not found" && exit 1) + - name: Verify strict contract descriptors are generated + run: make check-contracts + - name: Install wfctl and validate plugin manifest and strict contracts + run: make validate-contracts diff --git a/.goreleaser.yml b/.goreleaser.yml index 91da14c..fc3adeb 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -5,6 +5,7 @@ before: hooks: - go mod tidy - "sed -i.bak 's/\"version\": \".*\"/\"version\": \"{{ .Version }}\"/' plugin.json && rm -f plugin.json.bak" + - "sed -i.bak 's|releases/download/v[^/]*/|releases/download/v{{ .Version }}/|g' plugin.json && rm -f plugin.json.bak" builds: - id: plugin @@ -21,6 +22,7 @@ archives: format: tar.gz files: - plugin.json + - plugin.contracts.json - LICENSE checksum: name_template: checksums.txt diff --git a/Makefile b/Makefile index 25edb37..0848e97 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,13 @@ -.PHONY: build test install cross-build clean +.PHONY: build test install cross-build clean validate-contracts generate-contracts check-contracts BINARY_NAME = workflow-plugin-okta VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") -LDFLAGS = -ldflags "-X main.version=$(VERSION)" +LDFLAGS = -ldflags "-X github.com/GoCodeAlone/workflow-plugin-okta/internal.Version=$(VERSION)" INSTALL_DIR ?= data/plugins/$(BINARY_NAME) PLATFORMS = linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 +LOCAL_BIN = $(CURDIR)/bin +WFCTL_VERSION ?= v0.20.5 +WFCTL = $(LOCAL_BIN)/wfctl build: GOPRIVATE=github.com/GoCodeAlone/* go build $(LDFLAGS) -o bin/$(BINARY_NAME) ./cmd/$(BINARY_NAME) @@ -16,6 +19,7 @@ install: build mkdir -p $(DESTDIR)/$(INSTALL_DIR) cp bin/$(BINARY_NAME) $(DESTDIR)/$(INSTALL_DIR)/ cp plugin.json $(DESTDIR)/$(INSTALL_DIR)/ + cp plugin.contracts.json $(DESTDIR)/$(INSTALL_DIR)/ cross-build: @mkdir -p bin @@ -28,5 +32,21 @@ cross-build: go build $(LDFLAGS) -o $${output} ./cmd/$(BINARY_NAME); \ done +$(WFCTL): + mkdir -p $(LOCAL_BIN) + GOBIN=$(LOCAL_BIN) go install github.com/GoCodeAlone/workflow/cmd/wfctl@$(WFCTL_VERSION) + +# plugin.contracts.json is generated from plugin.json capabilities so strict +# contract coverage stays in sync with the advertised module and step types. +generate-contracts: + jq '{version:"1",contracts:(([.capabilities.moduleTypes[]|{kind:"module",type:.,mode:"strict",config:"workflow.plugins.okta.v1.ProviderConfig"}]+[.capabilities.stepTypes[]|{kind:"step",type:.,mode:"strict",config:"workflow.plugins.okta.v1.OktaStepConfig",input:"workflow.plugins.okta.v1.OktaStepInput",output:"workflow.plugins.okta.v1.OktaStepOutput"}]))}' plugin.json > plugin.contracts.json + +check-contracts: generate-contracts + git diff --exit-code -- plugin.contracts.json + +validate-contracts: $(WFCTL) + $(WFCTL) plugin validate -h 2>&1 | grep -q -- strict-contracts + $(WFCTL) plugin validate --file plugin.json --strict-contracts + clean: rm -rf bin/ diff --git a/go.mod b/go.mod index ba692c9..bae3202 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.26.0 require ( github.com/GoCodeAlone/workflow v0.3.56 github.com/okta/okta-sdk-golang/v6 v6.1.5 + github.com/patrickmn/go-cache v2.1.0+incompatible ) require ( @@ -167,7 +168,6 @@ require ( github.com/oklog/run v1.2.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect - github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pierrec/lz4/v4 v4.1.25 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect diff --git a/internal/module.go b/internal/module.go index 0d42474..10ce0ed 100644 --- a/internal/module.go +++ b/internal/module.go @@ -28,6 +28,9 @@ func (m *oktaModule) Init() error { clientID, _ := m.config["clientId"].(string) privateKey, _ := m.config["privateKey"].(string) + if apiToken != "" && (clientID != "" || privateKey != "") { + return fmt.Errorf("okta.provider %q: apiToken cannot be combined with clientId or privateKey", m.name) + } if apiToken == "" && (clientID == "" || privateKey == "") { return fmt.Errorf("okta.provider %q: either apiToken or clientId+privateKey are required", m.name) } diff --git a/internal/module_test.go b/internal/module_test.go index 77a75c7..b7d402f 100644 --- a/internal/module_test.go +++ b/internal/module_test.go @@ -63,6 +63,22 @@ func TestModuleInit_MissingCredentials(t *testing.T) { } } +func TestModuleInit_RejectsMixedCredentialModes(t *testing.T) { + m, err := newOktaModule("test-mixed-creds", map[string]any{ + "orgUrl": "https://dev-test.okta.com", + "apiToken": "test-token", + "clientId": "0oa123", + "privateKey": "-----BEGIN RSA PRIVATE KEY-----\ntest\n-----END RSA PRIVATE KEY-----", + }) + if err != nil { + t.Fatal(err) + } + if err := m.Init(); err == nil { + t.Error("expected error for mixed credential modes") + UnregisterClient("test-mixed-creds") + } +} + func TestModuleInit_WithClientIdAndPrivateKey(t *testing.T) { m, err := newOktaModule("test-oauth", map[string]any{ "orgUrl": "https://dev-test.okta.com", diff --git a/plugin.contracts.json b/plugin.contracts.json new file mode 100644 index 0000000..42dcbce --- /dev/null +++ b/plugin.contracts.json @@ -0,0 +1,1059 @@ +{ + "version": "1", + "contracts": [ + { + "kind": "module", + "type": "okta.provider", + "mode": "strict", + "config": "workflow.plugins.okta.v1.ProviderConfig" + }, + { + "kind": "step", + "type": "step.okta_user_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_reactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_suspend", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_unsuspend", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_unlock", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_reset_factors", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_change_password", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_reset_password", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_expire_password", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_set_recovery_question", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_add_user", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_remove_user", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_list_users", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_rule_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_rule_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_rule_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_rule_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_rule_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_rule_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_user_assign", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_user_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_user_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_user_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_user_unassign", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_group_assign", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_group_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_group_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_group_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_group_unassign", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_claim_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_claim_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_claim_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_scope_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_scope_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_scope_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_policy_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_policy_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_policy_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_policy_rule_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_policy_rule_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_policy_rule_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_key_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_key_rotate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_rule_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_rule_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_rule_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_rule_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_rule_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authenticator_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authenticator_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authenticator_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authenticator_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authenticator_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_factor_enroll", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_factor_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_factor_verify", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_factor_unenroll", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_factor_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_idp_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_idp_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_idp_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_idp_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_idp_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_idp_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_session_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_session_refresh", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_session_revoke", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_network_zone_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_network_zone_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_network_zone_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_network_zone_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_network_zone_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_network_zone_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_log_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_verify", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_execute", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_domain_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_domain_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_domain_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_domain_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_domain_verify", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_brand_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_brand_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_brand_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_theme_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_theme_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_theme_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_org_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_org_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + } + ] +} diff --git a/plugin.json b/plugin.json index d78f248..92c566b 100644 --- a/plugin.json +++ b/plugin.json @@ -1,6 +1,6 @@ { "name": "workflow-plugin-okta", - "version": "0.1.0", + "version": "0.2.1", "description": "Okta identity and access management plugin", "author": "GoCodeAlone", "license": "MIT", @@ -148,5 +148,27 @@ "step.okta_org_update" ], "triggerTypes": [] - } + }, + "downloads": [ + { + "os": "linux", + "arch": "amd64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-okta/releases/download/v0.2.1/workflow-plugin-okta-linux-amd64.tar.gz" + }, + { + "os": "linux", + "arch": "arm64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-okta/releases/download/v0.2.1/workflow-plugin-okta-linux-arm64.tar.gz" + }, + { + "os": "darwin", + "arch": "amd64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-okta/releases/download/v0.2.1/workflow-plugin-okta-darwin-amd64.tar.gz" + }, + { + "os": "darwin", + "arch": "arm64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-okta/releases/download/v0.2.1/workflow-plugin-okta-darwin-arm64.tar.gz" + } + ] }