diff --git a/Makefile b/Makefile index 5773d11..c2bef8d 100644 --- a/Makefile +++ b/Makefile @@ -2,20 +2,23 @@ BINARY_NAME = workflow-plugin-authz 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-authz/internal.Version=$(VERSION)" INSTALL_DIR ?= data/plugins/$(BINARY_NAME) +INSTALL_PATH = $(if $(DESTDIR),$(DESTDIR)/$(INSTALL_DIR),$(INSTALL_DIR)) +GO_ENV = GOWORK=off GOPRIVATE=github.com/GoCodeAlone/* PLATFORMS = linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 build: - GOPRIVATE=github.com/GoCodeAlone/* go build $(LDFLAGS) -o bin/$(BINARY_NAME) ./cmd/$(BINARY_NAME) + $(GO_ENV) go build $(LDFLAGS) -o bin/$(BINARY_NAME) ./cmd/$(BINARY_NAME) test: - GOPRIVATE=github.com/GoCodeAlone/* go test ./... -v -race + $(GO_ENV) go test ./... -v -race install: build - mkdir -p $(DESTDIR)/$(INSTALL_DIR) - cp bin/$(BINARY_NAME) $(DESTDIR)/$(INSTALL_DIR)/ - cp plugin.json $(DESTDIR)/$(INSTALL_DIR)/ + mkdir -p $(INSTALL_PATH) + cp bin/$(BINARY_NAME) $(INSTALL_PATH)/ + cp plugin.json $(INSTALL_PATH)/ + cp plugin.contracts.json $(INSTALL_PATH)/ cross-build: @mkdir -p bin @@ -24,7 +27,7 @@ cross-build: arch=$${platform##*/}; \ output=bin/$(BINARY_NAME)-$${os}-$${arch}; \ echo "Building $${output}..."; \ - GOOS=$${os} GOARCH=$${arch} GOPRIVATE=github.com/GoCodeAlone/* \ + GOOS=$${os} GOARCH=$${arch} $(GO_ENV) \ go build $(LDFLAGS) -o $${output} ./cmd/$(BINARY_NAME); \ done diff --git a/go.mod b/go.mod index ff709e5..47c57b7 100644 --- a/go.mod +++ b/go.mod @@ -3,38 +3,38 @@ module github.com/GoCodeAlone/workflow-plugin-authz go 1.26.0 require ( - github.com/GoCodeAlone/modular v1.12.3 - github.com/GoCodeAlone/workflow v0.3.56 + github.com/GoCodeAlone/modular v1.13.0 + github.com/GoCodeAlone/workflow v0.19.0 github.com/casbin/casbin/v2 v2.135.0 + google.golang.org/protobuf v1.36.11 gorm.io/driver/mysql v1.5.7 gorm.io/driver/postgres v1.5.11 gorm.io/gorm v1.25.12 - modernc.org/sqlite v1.45.0 + modernc.org/sqlite v1.47.0 ) require ( cel.dev/expr v0.25.1 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.18.2 // indirect + cloud.google.com/go/auth v0.19.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.3 // indirect cloud.google.com/go/monitoring v1.24.3 // indirect - cloud.google.com/go/storage v1.60.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0 // indirect + cloud.google.com/go/storage v1.61.3 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 // indirect github.com/BurntSushi/toml v1.6.0 // indirect - github.com/DataDog/datadog-go/v5 v5.4.0 // indirect - github.com/GoCodeAlone/go-plugin v0.0.0-20260220090904-b4c35f0e4271 // indirect - github.com/GoCodeAlone/modular/modules/auth v1.14.0 // indirect - github.com/GoCodeAlone/modular/modules/cache v1.14.0 // indirect - github.com/GoCodeAlone/modular/modules/eventbus/v2 v2.7.0 // indirect - github.com/GoCodeAlone/modular/modules/jsonschema v1.14.0 // indirect - github.com/GoCodeAlone/modular/modules/reverseproxy/v2 v2.7.0 // indirect - github.com/GoCodeAlone/modular/modules/scheduler v1.14.0 // indirect - github.com/GoCodeAlone/yaegi v0.17.1 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 // indirect + github.com/DataDog/datadog-go/v5 v5.8.3 // indirect + github.com/GoCodeAlone/go-plugin v1.7.0 // indirect + github.com/GoCodeAlone/modular/modules/auth v1.15.0 // indirect + github.com/GoCodeAlone/modular/modules/cache v1.15.0 // indirect + github.com/GoCodeAlone/modular/modules/eventbus/v2 v2.8.0 // indirect + github.com/GoCodeAlone/modular/modules/jsonschema v1.15.0 // indirect + github.com/GoCodeAlone/modular/modules/reverseproxy/v2 v2.8.0 // indirect + github.com/GoCodeAlone/yaegi v0.17.2 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect github.com/IBM/sarama v1.47.0 // indirect @@ -43,28 +43,28 @@ require ( github.com/Workiva/go-datastructures v1.1.7 // indirect github.com/andybalholm/brotli v1.2.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect - github.com/aws/aws-sdk-go-v2 v1.41.4 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.6 // indirect + github.com/aws/aws-sdk-go-v2 v1.41.5 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect github.com/aws/aws-sdk-go-v2/config v1.32.12 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.19.12 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 // indirect github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.33.8 // indirect - github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.41.11 // indirect - github.com/aws/aws-sdk-go-v2/service/codebuild v1.68.10 // indirect - github.com/aws/aws-sdk-go-v2/service/ec2 v1.289.1 // indirect - github.com/aws/aws-sdk-go-v2/service/ecs v1.72.0 // indirect - github.com/aws/aws-sdk-go-v2/service/eks v1.80.0 // indirect + github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.41.13 // indirect + github.com/aws/aws-sdk-go-v2/service/codebuild v1.68.12 // indirect + github.com/aws/aws-sdk-go-v2/service/ec2 v1.296.0 // indirect + github.com/aws/aws-sdk-go-v2/service/ecs v1.76.0 // indirect + github.com/aws/aws-sdk-go-v2/service/eks v1.81.2 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.11 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.19 // indirect - github.com/aws/aws-sdk-go-v2/service/kinesis v1.38.0 // indirect - github.com/aws/aws-sdk-go-v2/service/route53 v1.62.2 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.96.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 // indirect + github.com/aws/aws-sdk-go-v2/service/kinesis v1.43.4 // indirect + github.com/aws/aws-sdk-go-v2/service/route53 v1.62.5 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.97.2 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 // indirect @@ -78,13 +78,14 @@ require ( github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cloudevents/sdk-go/v2 v2.16.2 // indirect - github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect + github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect + github.com/danieljoos/wincred v1.2.3 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/deckarep/golang-set/v2 v2.8.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/digitalocean/godo v1.175.0 // indirect + github.com/digitalocean/godo v1.178.0 // indirect github.com/distribution/reference v0.6.0 // indirect github.com/docker/docker v28.5.2+incompatible // indirect github.com/docker/go-connections v0.6.0 // indirect @@ -92,26 +93,28 @@ require ( github.com/dustin/go-humanize v1.0.1 // indirect github.com/eapache/go-resiliency v1.7.0 // indirect github.com/eapache/queue v1.1.0 // indirect - github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect - github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect - github.com/fatih/color v1.18.0 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect + github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect + github.com/expr-lang/expr v1.17.8 // indirect + github.com/fatih/color v1.19.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/flowchartsman/retry v1.2.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.9.0 // indirect - github.com/go-jose/go-jose/v4 v4.1.3 // indirect + github.com/go-jose/go-jose/v4 v4.1.4 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-sql-driver/mysql v1.7.1 // indirect github.com/gobwas/glob v0.2.3 // indirect + github.com/godbus/dbus/v5 v5.2.2 // indirect github.com/golang-jwt/jwt/v5 v5.3.1 // indirect github.com/golobby/cast v1.3.3 // indirect github.com/google/btree v1.1.3 // indirect - github.com/google/go-querystring v1.1.0 // indirect + github.com/google/go-querystring v1.2.0 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.12 // indirect - github.com/googleapis/gax-go/v2 v2.17.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect + github.com/googleapis/gax-go/v2 v2.19.0 // indirect github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect @@ -131,13 +134,13 @@ require ( github.com/hashicorp/hcl v1.0.1-vault-7 // indirect github.com/hashicorp/logutils v1.0.0 // indirect github.com/hashicorp/memberlist v0.5.4 // indirect - github.com/hashicorp/vault/api v1.22.0 // indirect + github.com/hashicorp/vault/api v1.23.0 // indirect github.com/hashicorp/yamux v0.1.2 // indirect github.com/itchyny/gojq v0.12.18 // indirect github.com/itchyny/timefmt-go v0.1.7 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.7.5 // indirect + github.com/jackc/pgx/v5 v5.9.1 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jcmturner/aescts/v2 v2.0.0 // indirect github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect @@ -147,7 +150,7 @@ require ( github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 // indirect - github.com/klauspost/compress v1.18.4 // indirect + github.com/klauspost/compress v1.18.5 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect @@ -160,76 +163,75 @@ require ( github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect github.com/mschoch/smat v0.2.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/nats-io/nats.go v1.49.0 // indirect + github.com/nats-io/nats.go v1.50.0 // indirect github.com/nats-io/nkeys v0.4.15 // indirect github.com/nats-io/nuid v1.0.1 // indirect github.com/ncruces/go-strftime v1.0.0 // indirect 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/pierrec/lz4/v4 v4.1.25 // indirect + github.com/pierrec/lz4/v4 v4.1.26 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.66.1 // indirect - github.com/prometheus/procfs v0.16.1 // indirect + github.com/prometheus/common v0.67.5 // indirect + github.com/prometheus/procfs v0.20.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 // indirect github.com/redis/go-redis/v9 v9.18.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/reugn/go-quartz v0.15.2 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect - github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 // indirect + github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect github.com/tidwall/btree v1.8.1 // indirect github.com/tidwall/match v1.2.0 // indirect github.com/tidwall/redcon v1.6.2 // indirect - github.com/tochemey/goakt/v4 v4.0.0 // indirect - github.com/tochemey/olric v0.3.8 // indirect + github.com/tochemey/goakt/v4 v4.1.1 // indirect + github.com/tochemey/olric v0.3.9 // indirect github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.2.0 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect + github.com/zalando/go-keyring v0.2.8 // indirect github.com/zeebo/xxh3 v1.1.0 // indirect go.etcd.io/bbolt v1.4.3 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.66.0 // indirect - go.opentelemetry.io/otel v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 // indirect - go.opentelemetry.io/otel/metric v1.42.0 // indirect - go.opentelemetry.io/otel/sdk v1.41.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.41.0 // indirect - go.opentelemetry.io/otel/trace v1.42.0 // indirect - go.opentelemetry.io/proto/otlp v1.9.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.43.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 // indirect + go.opentelemetry.io/otel v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk v1.43.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect + go.opentelemetry.io/otel/trace v1.43.0 // indirect + go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.1 // indirect - go.yaml.in/yaml/v2 v2.4.3 // indirect - golang.org/x/crypto v0.48.0 // indirect - golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa // indirect - golang.org/x/mod v0.33.0 // indirect - golang.org/x/net v0.51.0 // indirect - golang.org/x/oauth2 v0.35.0 // indirect + go.yaml.in/yaml/v2 v2.4.4 // indirect + golang.org/x/crypto v0.50.0 // indirect + golang.org/x/mod v0.34.0 // indirect + golang.org/x/net v0.53.0 // indirect + golang.org/x/oauth2 v0.36.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.41.0 // indirect - golang.org/x/text v0.34.0 // indirect - golang.org/x/time v0.14.0 // indirect - golang.org/x/tools v0.42.0 // indirect - google.golang.org/api v0.269.0 // indirect - google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect - google.golang.org/grpc v1.79.3 // indirect - google.golang.org/protobuf v1.36.11 // indirect + golang.org/x/sys v0.43.0 // indirect + golang.org/x/text v0.36.0 // indirect + golang.org/x/time v0.15.0 // indirect + golang.org/x/tools v0.43.0 // indirect + google.golang.org/api v0.272.0 // indirect + google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d // indirect + google.golang.org/grpc v1.80.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - modernc.org/libc v1.67.6 // indirect + modernc.org/libc v1.70.0 // indirect modernc.org/mathutil v1.7.1 // indirect modernc.org/memory v1.11.0 // indirect ) diff --git a/go.sum b/go.sum index 9e6183f..f2fac85 100644 --- a/go.sum +++ b/go.sum @@ -3,28 +3,28 @@ cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.18.2 h1:+Nbt5Ev0xEqxlNjd6c+yYUeosQ5TtEUaNcN/3FozlaM= -cloud.google.com/go/auth v0.18.2/go.mod h1:xD+oY7gcahcu7G2SG2DsBerfFxgPAJz17zz2joOFF3M= +cloud.google.com/go/auth v0.19.0 h1:DGYwtbcsGsT1ywuxsIoWi1u/vlks0moIblQHgSDgQkQ= +cloud.google.com/go/auth v0.19.0/go.mod h1:2Aph7BT2KnaSFOM0JDPyiYgNh6PL9vGMiP8CUIXZ+IY= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= -cloud.google.com/go/logging v1.13.1 h1:O7LvmO0kGLaHY/gq8cV7T0dyp6zJhYAOtZPX4TF3QtY= -cloud.google.com/go/logging v1.13.1/go.mod h1:XAQkfkMBxQRjQek96WLPNze7vsOmay9H5PqfsNYDqvw= +cloud.google.com/go/logging v1.13.2 h1:qqlHCBvieJT9Cdq4QqYx1KPadCQ2noD4FK02eNqHAjA= +cloud.google.com/go/logging v1.13.2/go.mod h1:zaybliM3yun1J8mU2dVQ1/qDzjbOqEijZCn6hSBtKak= cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8= cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.60.0 h1:oBfZrSOCimggVNz9Y/bXY35uUcts7OViubeddTTVzQ8= -cloud.google.com/go/storage v1.60.0/go.mod h1:q+5196hXfejkctrnx+VYU8RKQr/L3c0cBIlrjmiAKE0= +cloud.google.com/go/storage v1.61.3 h1:VS//ZfBuPGDvakfD9xyPW1RGF1Vy3BWUoVZXgW1KMOg= +cloud.google.com/go/storage v1.61.3/go.mod h1:JtqK8BBB7TWv0HVGHubtUdzYYrakOQIsMLffZ2Z/HWk= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0 h1:JXg2dwJUmPB9JmtVmdEB16APJ7jurfbY5jnfXpJoRMc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0/go.mod h1:YD5h/ldMsG0XiIw7PdyNhLxaM317eFh5yNLccNfGdyw= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 h1:fou+2+WFTib47nS+nz/ozhEBnvU96bKHy6LjRsY4E28= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0/go.mod h1:t76Ruy8AHvUAC8GfMWJMa0ElSbuIcO03NLpynfbgsPA= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 h1:Hk5QBxZQC1jb2Fwj6mpzme37xbCDdNTxU7O9eb5+LB4= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1/go.mod h1:IYus9qsFobWIc2YVwe/WPjcnyCkPKtnHAqUYeebc8z0= github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 h1:9iefClla7iYpfYWdzPCRDozdmndjTm8DXdpCzPajMgA= @@ -40,30 +40,28 @@ github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0/go.mod h1:HKpQ github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/datadog-go/v5 v5.4.0 h1:Ea3eXUVwrVV28F/fo3Dr3aa+TL/Z7Xi6SUPKW8L99aI= -github.com/DataDog/datadog-go/v5 v5.4.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= -github.com/GoCodeAlone/go-plugin v0.0.0-20260220090904-b4c35f0e4271 h1:/oxxpYJ41BuK+/5Gp9c+0PHybyNFWeBHyCzkSVLCoMk= -github.com/GoCodeAlone/go-plugin v0.0.0-20260220090904-b4c35f0e4271/go.mod h1:HbGQRZUIa+jbDfjsaZIMJYvrz+LnxL0mJpggfynSTMk= -github.com/GoCodeAlone/modular v1.12.3 h1:WcNqc1ZG+Lv/xzF8wTDavGIOeAvlV4wEd5HO2mVTUwE= -github.com/GoCodeAlone/modular v1.12.3/go.mod h1:nDdyW/eJu4gDFNueb6vWwLvti3bPHSZJHkWGiwEmi2I= -github.com/GoCodeAlone/modular/modules/auth v1.14.0 h1:Y+p4/HIcxkajlcNhcPlqpwAt1SCHjB4AaDMEys50E3I= -github.com/GoCodeAlone/modular/modules/auth v1.14.0/go.mod h1:fkwPn2svDsCHBI19gtUHxo064SL+EudjB+o7VjL9ug8= -github.com/GoCodeAlone/modular/modules/cache v1.14.0 h1:ykQRwXJGXaRtAsnW9Tgs0LvXExonkKr8P7XIHxPaYdY= -github.com/GoCodeAlone/modular/modules/cache v1.14.0/go.mod h1:tcIjHJHZ5fVU8sstILrXeVQgjpZcUkErnNjRaxkBSR8= -github.com/GoCodeAlone/modular/modules/eventbus/v2 v2.7.0 h1:clGAyaOfyDc9iY63ONfZiHReVccVhK/yH19QEb14SSI= -github.com/GoCodeAlone/modular/modules/eventbus/v2 v2.7.0/go.mod h1:0AnfWGVmrqyv91rduc6mrPqW6WQchDAa2WtM0Qmw/WA= -github.com/GoCodeAlone/modular/modules/jsonschema v1.14.0 h1:dCiPIO+NvJPizfCeUQqGXHD1WitOVYpKuL3fxMEjRlw= -github.com/GoCodeAlone/modular/modules/jsonschema v1.14.0/go.mod h1:5Hm+R9G41wwb0hKefx9+9PMqffjU1tA7roW3t3sTaLE= -github.com/GoCodeAlone/modular/modules/reverseproxy/v2 v2.7.0 h1:TtVD+tE8ABN98n50MFVyMAvMsBM4JE86KRgCRDzPDC4= -github.com/GoCodeAlone/modular/modules/reverseproxy/v2 v2.7.0/go.mod h1:N7d8aSV4eqr90qjlIOs/8EmW7avt9gwX06Uh+zKDr4s= -github.com/GoCodeAlone/modular/modules/scheduler v1.14.0 h1:JSrzo4FB7uGASExv+fCLRd6pXWULV1mJYvzmM9PzUeM= -github.com/GoCodeAlone/modular/modules/scheduler v1.14.0/go.mod h1:emkR2AnilabLJZv1rOTDO9eGpRBmZs487H00Lnp9jIc= -github.com/GoCodeAlone/workflow v0.3.56 h1:jsJmVwCRLz7XOTLQNoyE7POBDW3SmqbG/18VnAzbaEc= -github.com/GoCodeAlone/workflow v0.3.56/go.mod h1:uATRqpqPubm+g2jJtYoaMTMmjlUaXnLsSdZk5of+jW0= -github.com/GoCodeAlone/yaegi v0.17.1 h1:aPAwU29L9cGceRAff02c5pjQcT5KapDB4fWFZK9tElE= -github.com/GoCodeAlone/yaegi v0.17.1/go.mod h1:z5Pr6Wse6QJcQvpgxTxzMAevFarH0N37TG88Y9dprx0= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 h1:sBEjpZlNHzK1voKq9695PJSX2o5NEXl7/OL3coiIY0c= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= +github.com/DataDog/datadog-go/v5 v5.8.3 h1:s58CUJ9s8lezjhTNJO/SxkPBv2qZjS3ktpRSqGF5n0s= +github.com/DataDog/datadog-go/v5 v5.8.3/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= +github.com/GoCodeAlone/go-plugin v1.7.0 h1:EwnhqPlXiNmp85S+MXnKKvm3YlfA6O4NzBb4+GSlEVY= +github.com/GoCodeAlone/go-plugin v1.7.0/go.mod h1:HbGQRZUIa+jbDfjsaZIMJYvrz+LnxL0mJpggfynSTMk= +github.com/GoCodeAlone/modular v1.13.0 h1:UfsegfAmPWcPYQOqYZFsw/LNySBmMDcthiOQe5bscqE= +github.com/GoCodeAlone/modular v1.13.0/go.mod h1:b06Pvgcc8HsGxvl30iO39zGH2jIWz467QEj2+OQL2Do= +github.com/GoCodeAlone/modular/modules/auth v1.15.0 h1:pBSkPSf4k4GLSbUQFLuPa+nFbfoJXGzSz9q89VoapZk= +github.com/GoCodeAlone/modular/modules/auth v1.15.0/go.mod h1:vmIm/LQrcURS2p02YwaELb+CZoHPtT0XB0v1i+sj9i4= +github.com/GoCodeAlone/modular/modules/cache v1.15.0 h1:6Y2EJ5S7mb/TjyG/uN6dto5VUYJNDFYULUamRsqAKvo= +github.com/GoCodeAlone/modular/modules/cache v1.15.0/go.mod h1:PRun74dRZKfqlBM+f6QrvI9oa4joUU3j1hisiLyQ+oM= +github.com/GoCodeAlone/modular/modules/eventbus/v2 v2.8.0 h1:buYs0TGNbAZgtTq1Qb+dfmTv3+ZOBIN0HbvVBLyNqxE= +github.com/GoCodeAlone/modular/modules/eventbus/v2 v2.8.0/go.mod h1:329flAKmwrPq2JEwu9iltWv6A83H/Di82Xze+kvdKDw= +github.com/GoCodeAlone/modular/modules/jsonschema v1.15.0 h1:xb1mI4NZkzvNKQ2F6nkyXQvK/kEvvfs1z7FoGf3/LRA= +github.com/GoCodeAlone/modular/modules/jsonschema v1.15.0/go.mod h1:hhGouwAVsonmJ4Lain4jINZ9nZCoc9l9eF3BHbmR8eE= +github.com/GoCodeAlone/modular/modules/reverseproxy/v2 v2.8.0 h1:cvdLHbM/vzvygQTcAWSJsy+dAPzzwWyjzKMmTBFcFIo= +github.com/GoCodeAlone/modular/modules/reverseproxy/v2 v2.8.0/go.mod h1:/9ipMG4qM2CHQ14BfXKdVlYRJelef6M8MFI5TbZv67M= +github.com/GoCodeAlone/workflow v0.19.0 h1:OFjLqHnyi19nkyAhpuMNVjrDEO4ST8GVCVsZsRFCWgY= +github.com/GoCodeAlone/workflow v0.19.0/go.mod h1:ypkCqXTwnIPqNjS8h38KZfwzdVsgwgkS1d6Dq0lXyQQ= +github.com/GoCodeAlone/yaegi v0.17.2 h1:WK6Y6e0t1a6U7r+S2dN3CGWW1PizYD3zO0zneToZPxM= +github.com/GoCodeAlone/yaegi v0.17.2/go.mod h1:z5Pr6Wse6QJcQvpgxTxzMAevFarH0N37TG88Y9dprx0= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 h1:rIkQfkCOVKc1OiRCNcSDD8ml5RJlZbH/Xsq7lbpynwc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0/go.mod h1:RD2SsorTmYhF6HkTmDw7KmPYQk8OBYwTkuasChwv7R4= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 h1:UnDZ/zFfG1JhH/DqxIZYU/1CUAlTUScoXD/LcM2Ykk8= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0/go.mod h1:IA1C1U7jO/ENqm/vhi7V9YYpBsp+IMyqNrEN94N7tVc= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0 h1:7t/qx5Ost0s0wbA/VDrByOooURhp+ikYwv20i9Y07TQ= @@ -88,56 +86,56 @@ github.com/alicebob/miniredis/v2 v2.36.1 h1:Dvc5oAnNOr7BIfPn7tF269U8DvRW1dBG2D5n github.com/alicebob/miniredis/v2 v2.36.1/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= -github.com/antithesishq/antithesis-sdk-go v0.6.0 h1:v/YViLhFYkZOEEof4AXjD5AgGnGM84YHF4RqEwp6I2g= -github.com/antithesishq/antithesis-sdk-go v0.6.0/go.mod h1:IUpT2DPAKh6i/YhSbt6Gl3v2yvUZjmKncl7U91fup7E= +github.com/antithesishq/antithesis-sdk-go v0.7.0 h1:uWDG8BqLD1lI2ps38WDz2vXflrTX2+vLX0SvZtztJtE= +github.com/antithesishq/antithesis-sdk-go v0.7.0/go.mod h1:FQyySiasQQM8735Ddel3MRojmy4dA1IqCeyJ5jmPMbI= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k= -github.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.6 h1:N4lRUXZpZ1KVEUn6hxtco/1d2lgYhNn1fHkkl8WhlyQ= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.6/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= +github.com/aws/aws-sdk-go-v2 v1.41.5 h1:dj5kopbwUsVUVFgO4Fi5BIT3t4WyqIDjGKCangnV/yY= +github.com/aws/aws-sdk-go-v2 v1.41.5/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= github.com/aws/aws-sdk-go-v2/config v1.32.12 h1:O3csC7HUGn2895eNrLytOJQdoL2xyJy0iYXhoZ1OmP0= github.com/aws/aws-sdk-go-v2/config v1.32.12/go.mod h1:96zTvoOFR4FURjI+/5wY1vc1ABceROO4lWgWJuxgy0g= github.com/aws/aws-sdk-go-v2/credentials v1.19.12 h1:oqtA6v+y5fZg//tcTWahyN9PEn5eDU/Wpvc2+kJ4aY8= github.com/aws/aws-sdk-go-v2/credentials v1.19.12/go.mod h1:U3R1RtSHx6NB0DvEQFGyf/0sbrpJrluENHdPy1j/3TE= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 h1:zOgq3uezl5nznfoK3ODuqbhVg1JzAGDUhXOsU0IDCAo= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20/go.mod h1:z/MVwUARehy6GAg/yQ1GO2IMl0k++cu1ohP9zo887wE= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 h1:CNXO7mvgThFGqOFgbNAP2nol2qAWBOGfqR/7tQlvLmc= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20/go.mod h1:oydPDJKcfMhgfcgBUZaG+toBbwy8yPWubJXBVERtI4o= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDkWUbDEjGLb+raoBMFsTodcoYKw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 h1:Rgg6wvjjtX8bNHcvi9OnXWwcE0a2vGpbwmtICOsvcf4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21/go.mod h1:A/kJFst/nm//cyqonihbdpQZwiUhhzpqTsdbhDdRF9c= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 h1:PEgGVtPoB6NTpPrBgqSE5hE/o47Ij9qk/SEZFbUOe9A= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21/go.mod h1:p+hz+PRAYlY3zcpJhPwXlLC4C+kqn70WIHwnzAfs6ps= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.20 h1:qi3e/dmpdONhj1RyIZdi6DKKpDXS5Lb8ftr3p7cyHJc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.20/go.mod h1:V1K+TeJVD5JOk3D9e5tsX2KUdL7BlB+FV6cBhdobN8c= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 h1:SwGMTMLIlvDNyhMteQ6r8IJSBPlRdXX5d4idhIGbkXA= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21/go.mod h1:UUxgWxofmOdAMuqEsSppbDtGKLfR04HGsD0HXzvhI1k= github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.33.8 h1:I0AMtyv5tqQ/VNDDalbbujALCWl64TP3F61bBw4U8Qs= github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.33.8/go.mod h1:qnrKR+Jzg9NbZqy+YusE7frSZUaYQ7EPJvki4+SwS3U= -github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.41.11 h1:sHMyvjsgVzzYNGdy5OdlYYQsNeEk1N+aui9R8JhP9HE= -github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.41.11/go.mod h1:Aa0zlfmZPQJnR3M1Kn7pGXKJ9qMR5zpNHBmXcjTh8Kc= -github.com/aws/aws-sdk-go-v2/service/codebuild v1.68.10 h1:f8Umf89E6+QciH5Fk4J23EFgcukyX/FkVu7urYUcW/k= -github.com/aws/aws-sdk-go-v2/service/codebuild v1.68.10/go.mod h1:AqtqfJs5i0n0/SBo3/FD9rs3vnubrigU5B8iz+5YVHU= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.289.1 h1:wcrNo0Fn5z1CvdyiZ9ep+JWrCFg8ImRFSf1mcxJnx6w= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.289.1/go.mod h1:Uy+C+Sc58jozdoL1McQr8bDsEvNFx+/nBY+vpO1HVUY= -github.com/aws/aws-sdk-go-v2/service/ecs v1.72.0 h1:hggRKpv26DpYMOik3wWo1Ty5MkANoXhNobjfWpC3G4M= -github.com/aws/aws-sdk-go-v2/service/ecs v1.72.0/go.mod h1:pMlGFDpHoLTJOIZHGdJOAWmi+xeIlQXuFTuQxs1epYE= -github.com/aws/aws-sdk-go-v2/service/eks v1.80.0 h1:moQGV8cPbVTN7r2Xte1Mybku35QDePSJEd3onYVmBtY= -github.com/aws/aws-sdk-go-v2/service/eks v1.80.0/go.mod h1:Qg678m+87sCuJhcsZojenz8mblYG+Tq86V4m3hjVz0s= -github.com/aws/aws-sdk-go-v2/service/iam v1.53.3 h1:boKZv8dNdHznhAA68hb/dqFz5pxoWmRAOJr9LtscVCI= -github.com/aws/aws-sdk-go-v2/service/iam v1.53.3/go.mod h1:E0QHh3aEwxYb7xshjvxYDELiOda7KBYJ77e/TvGhpcM= +github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.41.13 h1:juPaAcploym78WhVwleVHNLPmgURO6gkObC442Hal1s= +github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.41.13/go.mod h1:HjgDVqI6lGR0azGz1GKmZTzGHkXuzhKzRUfG/p5Ug8s= +github.com/aws/aws-sdk-go-v2/service/codebuild v1.68.12 h1:lQTVEv/YAk8Rw1Yf4XZS/jNNxF9klCN10WcSR3xlMtU= +github.com/aws/aws-sdk-go-v2/service/codebuild v1.68.12/go.mod h1:yoa0R6Xku788EmJYkFiARzJBxt4A3hgFjQPRmMAttr0= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.296.0 h1:98Miqj16un1WLNyM1RjVDhXYumhqZrQfAeG8i4jPG6o= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.296.0/go.mod h1:T6ndRfdhnXLIY5oKBHjYZDVj706los2zGdpThppquvA= +github.com/aws/aws-sdk-go-v2/service/ecs v1.76.0 h1:a5G/TgJNrpuCjZBTf8/PTN0C2B0do/ylaYVynxPSbUQ= +github.com/aws/aws-sdk-go-v2/service/ecs v1.76.0/go.mod h1:QkWmubOYmjj3cHn7A4CoUU7BKJhVeo39Gp6NH7IyhZw= +github.com/aws/aws-sdk-go-v2/service/eks v1.81.2 h1:6c/Jkyx1gYLiZGl6VPjApViaoPiYo7TDWXCMk/ZBq6c= +github.com/aws/aws-sdk-go-v2/service/eks v1.81.2/go.mod h1:xdUh6tdF9A8hc+PE84kmHbF/zsVPNiKnc6oLgulq1Eo= +github.com/aws/aws-sdk-go-v2/service/iam v1.53.7 h1:n9YLiWtX3+6pTLZWvRJmtq5JIB9NA/KFelyCg5fOlTU= +github.com/aws/aws-sdk-go-v2/service/iam v1.53.7/go.mod h1:sP46Vo6MeJcM4s0ZXcG2PFmfiSyixhIuC/74W52yKuk= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.11 h1:BYf7XNsJMzl4mObARUBUib+j2tf0U//JAAtTnYqvqCw= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.11/go.mod h1:aEUS4WrNk/+FxkBZZa7tVgp4pGH+kFGW40Y8rCPqt5g= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 h1:qtJZ70afD3ISKWnoX3xB0J2otEqu3LqicRcDBqsj0hQ= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12/go.mod h1:v2pNpJbRNl4vEUWEh5ytQok0zACAKfdmKS51Hotc3pQ= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.19 h1:JnQeStZvPHFHeyky/7LbMlyQjUa+jIBj36OlWm0pzIk= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.19/go.mod h1:HGyasyHvYdFQeJhvDHfH7HXkHh57htcJGKDZ+7z+I24= -github.com/aws/aws-sdk-go-v2/service/kinesis v1.38.0 h1:8acX21qNMUs/QTHB3iNpixJViYsu7sSWSmZVzdriRcw= -github.com/aws/aws-sdk-go-v2/service/kinesis v1.38.0/go.mod h1:No5RhgJ+mKYZKCSrJQOdDtyz+8dAfNaeYwMnTJBJV/Q= -github.com/aws/aws-sdk-go-v2/service/route53 v1.62.2 h1:zoD/SoiVQi8l8tuQn//VexrXS2yorg/+717JNA4Ble8= -github.com/aws/aws-sdk-go-v2/service/route53 v1.62.2/go.mod h1:Ll1DCasPTBFtHK5t/U5WIwGIyRuY3xY+x8/LmqIlqpM= -github.com/aws/aws-sdk-go-v2/service/s3 v1.96.4 h1:4ExZyubQ6LQQVuF2Qp9OsfEvsTdAWh5Gfwf6PgIdLdk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.96.4/go.mod h1:NF3JcMGOiARAss1ld3WGORCw71+4ExDD2cbbdKS5PpA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 h1:siU1A6xjUZ2N8zjTHSXFhB9L/2OY8Dqs0xXiLjF30jA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20/go.mod h1:4TLZCmVJDM3FOu5P5TJP0zOlu9zWgDWU7aUxWbr+rcw= +github.com/aws/aws-sdk-go-v2/service/kinesis v1.43.4 h1:3m9iJtMtLq75jKRAfw0kapoHUlbzi0CRVigysBN/FHA= +github.com/aws/aws-sdk-go-v2/service/kinesis v1.43.4/go.mod h1:O2L6vGm4xacEuN2otHFMgn7yXXlgzFKzxrba0fy/yk8= +github.com/aws/aws-sdk-go-v2/service/route53 v1.62.5 h1:Z+/OLsb85Kpq7TVLCspskqePaf68Tdv6GfmJP4kH6i0= +github.com/aws/aws-sdk-go-v2/service/route53 v1.62.5/go.mod h1:TmxGowuBYwjmHFOsEDxaZdsQE62JJzOmtiWafTi/czg= +github.com/aws/aws-sdk-go-v2/service/s3 v1.97.2 h1:MRNiP6nqa20aEl8fQ6PJpEq11b2d40b16sm4WD7QgMU= +github.com/aws/aws-sdk-go-v2/service/s3 v1.97.2/go.mod h1:FrNA56srbsr3WShiaelyWYEo70x80mXnVZ17ZZfbeqg= github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 h1:0GFOLzEbOyZABS3PhYfBIx2rNBACYcKty+XGkTgw1ow= github.com/aws/aws-sdk-go-v2/service/signin v1.0.8/go.mod h1:LXypKvk85AROkKhOG6/YEcHFPoX+prKTowKnVdcaIxE= github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 h1:kiIDLZ005EcKomYYITtfsjn7dtOwHDOFy7IbPXKek2o= @@ -178,8 +176,8 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/cloudevents/sdk-go/v2 v2.16.2 h1:ZYDFrYke4FD+jM8TZTJJO6JhKHzOQl2oqpFK1D+NnQM= github.com/cloudevents/sdk-go/v2 v2.16.2/go.mod h1:laOcGImm4nVJEU+PHnUrKL56CKmRL65RlQF0kRmW/kg= -github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w= -github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= +github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= +github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= @@ -201,6 +199,8 @@ github.com/cucumber/godog v0.15.1 h1:rb/6oHDdvVZKS66hrhpjFQFHjthFSrQBCOI1LwshNTI github.com/cucumber/godog v0.15.1/go.mod h1:qju+SQDewOljHuq9NSM66s0xEhogx0q30flfxL4WUk8= github.com/cucumber/messages/go/v21 v21.0.1 h1:wzA0LxwjlWQYZd32VTlAVDTkW6inOFmSM+RuOwHZiMI= github.com/cucumber/messages/go/v21 v21.0.1/go.mod h1:zheH/2HS9JLVFukdrsPWoPdmUtmYQAQPLk7w5vWsk5s= +github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ= +github.com/danieljoos/wincred v1.2.3/go.mod h1:6qqX0WNrS4RzPZ1tnroDzq9kY3fu1KwE7MRLQK4X0bs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -209,8 +209,8 @@ github.com/deckarep/golang-set/v2 v2.8.0 h1:swm0rlPCmdWn9mESxKOjWk8hXSqoxOp+Zlfu github.com/deckarep/golang-set/v2 v2.8.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/digitalocean/godo v1.175.0 h1:tpfwJFkBzpePxvvFazOn69TXctdxuFlOs7DMVXsI7oU= -github.com/digitalocean/godo v1.175.0/go.mod h1:xQsWpVCCbkDrWisHA72hPzPlnC+4W5w/McZY5ij9uvU= +github.com/digitalocean/godo v1.178.0 h1:+B4xGOaoFwwwpM7TKhoyGHdmFg5eF9zDB1YfOLvNJ2E= +github.com/digitalocean/godo v1.178.0/go.mod h1:xQsWpVCCbkDrWisHA72hPzPlnC+4W5w/McZY5ij9uvU= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= @@ -233,15 +233,17 @@ github.com/emicklei/go-restful/v3 v3.13.0 h1:C4Bl2xDndpU6nJ4bc1jXd+uTmYPVUwkD6bF github.com/emicklei/go-restful/v3 v3.13.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= github.com/envoyproxy/go-control-plane v0.14.0/go.mod h1:NcS5X47pLl/hfqxU70yPwL9ZMkUlwlKxtAohpi2wBEU= -github.com/envoyproxy/go-control-plane/envoy v1.36.0 h1:yg/JjO5E7ubRyKX3m07GF3reDNEnfOboJ0QySbH736g= -github.com/envoyproxy/go-control-plane/envoy v1.36.0/go.mod h1:ty89S1YCCVruQAm9OtKeEkQLTb+Lkz0k8v9W0Oxsv98= +github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ= +github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= -github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= -github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= +github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds= +github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= +github.com/expr-lang/expr v1.17.8 h1:W1loDTT+0PQf5YteHSTpju2qfUfNoBt4yw9+wOEU9VM= +github.com/expr-lang/expr v1.17.8/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= -github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= +github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowchartsman/retry v1.2.0 h1:qDhlw6RNufXz6RGr+IiYimFpMMkt77SUSHY5tgFaUCU= @@ -254,8 +256,8 @@ github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sa github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/go-chi/chi/v5 v5.2.2 h1:CMwsvRVTbXVytCk1Wd72Zy1LAsAh9GxMmSNWLHCG618= github.com/go-chi/chi/v5 v5.2.2/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= -github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs= -github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= +github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= @@ -307,8 +309,10 @@ github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPE github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gofrs/uuid v4.3.1+incompatible h1:0/KbAdpx3UXAx1kEOWHJeOkpbgRFGHVgv+CFIY7dBJI= -github.com/gofrs/uuid v4.3.1+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ= +github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c= +github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= +github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -338,13 +342,13 @@ github.com/google/gnostic-models v0.7.1/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7O github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= -github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/go-querystring v1.2.0 h1:yhqkPbu2/OH+V9BfpCVPZkNmUXhb2gBxJArfhIxNtP0= +github.com/google/go-querystring v1.2.0/go.mod h1:8IFJqpSRITyJ8QhQ13bmbeMBDfmeEJZD5A0egEOmkqU= github.com/google/go-tpm v0.9.8 h1:slArAR9Ft+1ybZu0lBwpSmpwhRXaa85hWtMinMyRAWo= github.com/google/go-tpm v0.9.8/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -356,18 +360,18 @@ github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.12 h1:Fg+zsqzYEs1ZnvmcztTYxhgCBsx3eEhEwQ1W/lHq/sQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.12/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc= -github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= +github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= +github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= +github.com/googleapis/gax-go/v2 v2.19.0 h1:fYQaUOiGwll0cGj7jmHT/0nPlcrZDFPrZRhTsoCr8hE= +github.com/googleapis/gax-go/v2 v2.19.0/go.mod h1:w2ROXVdfGEVFXzmlciUU4EdjHgWvB5h2n6x/8XSTTJA= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo= github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= -github.com/hashicorp/consul/api v1.33.4 h1:AJkZp6qzgAYcMIU0+CjJ0Rb7+byfh0dazFK/gzlOcJk= -github.com/hashicorp/consul/api v1.33.4/go.mod h1:BkH3WEUzsnWvJJaHoDqKqoe2Q2EIixx7Gjj6MTwYnOA= +github.com/hashicorp/consul/api v1.33.7 h1:apLZVzX7O7BLgHyh4pvczcsBzPmYSVXGKZQbOaA1ae0= +github.com/hashicorp/consul/api v1.33.7/go.mod h1:SjR3cjwCUSLLDfVw5dFg76rnnKjOySxr8W8lC5s01C8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -379,8 +383,8 @@ github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVH github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-memdb v1.3.4 h1:XSL3NR682X/cVk2IeV0d70N4DZ9ljI885xAEU8IoK3c= -github.com/hashicorp/go-memdb v1.3.4/go.mod h1:uBTr1oQbtuMgd1SSGoR8YV27eT3sBHbYiNm53bMpgSg= +github.com/hashicorp/go-memdb v1.3.5 h1:b3taDMxCBCBVgyRrS1AZVHO14ubMYZB++QpNhBg+Nyo= +github.com/hashicorp/go-memdb v1.3.5/go.mod h1:8IVKKBkVe+fxFgdFOYxzQQNjz+sWCyHCdIC/+5+Vy1Y= github.com/hashicorp/go-metrics v0.5.4 h1:8mmPiIJkTPPEbAiV97IxdAGNdRdaWwVap1BU6elejKY= github.com/hashicorp/go-metrics v0.5.4/go.mod h1:CG5yz4NZ/AI/aQt9Ucm/vdBnbh7fvmv4lxZ350i+QQI= github.com/hashicorp/go-msgpack/v2 v2.1.5 h1:Ue879bPnutj/hXfmUk6s/jtIK90XxgiUIcXRl656T44= @@ -415,8 +419,8 @@ github.com/hashicorp/memberlist v0.5.4 h1:40YY+3qq2tAUhZIMEK8kqusKZBBjdwJ3NUjvYk github.com/hashicorp/memberlist v0.5.4/go.mod h1:OgN6xiIo6RlHUWk+ALjP9e32xWCoQrsOCmHrWCm2MWA= github.com/hashicorp/serf v0.10.2 h1:m5IORhuNSjaxeljg5DeQVDlQyVkhRIjJDimbkCa8aAc= github.com/hashicorp/serf v0.10.2/go.mod h1:T1CmSGfSeGfnfNy/w0odXQUR1rfECGd2Qdsp84DjOiY= -github.com/hashicorp/vault/api v1.22.0 h1:+HYFquE35/B74fHoIeXlZIP2YADVboaPjaSicHEZiH0= -github.com/hashicorp/vault/api v1.22.0/go.mod h1:IUZA2cDvr4Ok3+NtK2Oq/r+lJeXkeCrHRmqdyWfpmGM= +github.com/hashicorp/vault/api v1.23.0 h1:gXgluBsSECfRWTSW9niY2jwg2e9mMJc4WoHNv4g3h6A= +github.com/hashicorp/vault/api v1.23.0/go.mod h1:zransKiB9ftp+kgY8ydjnvCU7Wk8i9L0DYWpXeMj9ko= github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8= github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= github.com/itchyny/gojq v0.12.18 h1:gFGHyt/MLbG9n6dqnvlliiya2TaMMh6FFaR2b1H6Drc= @@ -427,8 +431,8 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.7.5 h1:JHGfMnQY+IEtGM63d+NGMjoRpysB2JBwDr5fsngwmJs= -github.com/jackc/pgx/v5 v5.7.5/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M= +github.com/jackc/pgx/v5 v5.9.1 h1:uwrxJXBnx76nyISkhr33kQLlUqjv7et7b9FjCen/tdc= +github.com/jackc/pgx/v5 v5.9.1/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= @@ -460,8 +464,8 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kapetan-io/tackle v0.13.0 h1:kcQTbgZN+4T89ktqlpW2TBATjiBmfjIyuZUukvRrYZU= github.com/kapetan-io/tackle v0.13.0/go.mod h1:5ZGq3U/Qgpq0ccxyx2+Zovg2ceM9yl6DOVL2R90of4g= -github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= +github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -477,8 +481,8 @@ 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/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 h1:PTw+yKnXcOFCR6+8hHTyWBeQ/P4Nb7dd4/0ohEcWQuM= -github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= +github.com/lufia/plan9stats v0.0.0-20260324052639-156f7da3f749 h1:Qj3hTcdWH8uMZDI41HNuTuJN525C7NBrbtH5kSO6fPk= +github.com/lufia/plan9stats v0.0.0-20260324052639-156f7da3f749/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -492,8 +496,8 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.72 h1:vhmr+TF2A3tuoGNkLDFK9zi36F2LS+hKTRW0Uf8kbzI= github.com/miekg/dns v1.1.72/go.mod h1:+EuEPhdHOsfk6Wk5TT2CzssZdqkmFhf8r+aVyDEToIs= -github.com/minio/highwayhash v1.0.4-0.20251030100505-070ab1a87a76 h1:KGuD/pM2JpL9FAYvBrnBBeENKZNh6eNtjqytV6TYjnk= -github.com/minio/highwayhash v1.0.4-0.20251030100505-070ab1a87a76/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= +github.com/minio/highwayhash v1.0.4 h1:asJizugGgchQod2ja9NJlGOWq4s7KsAWr5XUc9Clgl4= +github.com/minio/highwayhash v1.0.4/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= @@ -504,8 +508,8 @@ github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3N github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/go-archive v0.2.0 h1:zg5QDUM2mi0JIM9fdQZWC7U8+2ZfixfTYoHL7rWUcP8= github.com/moby/go-archive v0.2.0/go.mod h1:mNeivT14o8xU+5q1YnNrkQVpK+dnNe/K6fHqnTg4qPU= -github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= -github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= +github.com/moby/patternmatcher v0.6.1 h1:qlhtafmr6kgMIJjKJMDmMWq7WLkKIo23hsrpR3x084U= +github.com/moby/patternmatcher v0.6.1/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= @@ -532,12 +536,12 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt/v2 v2.8.0 h1:K7uzyz50+yGZDO5o772eRE7atlcSEENpL7P+b74JV1g= -github.com/nats-io/jwt/v2 v2.8.0/go.mod h1:me11pOkwObtcBNR8AiMrUbtVOUGkqYjMQZ6jnSdVUIA= -github.com/nats-io/nats-server/v2 v2.12.4 h1:ZnT10v2LU2Xcoiy8ek9X6Se4YG8EuMfIfvAEuFVx1Ts= -github.com/nats-io/nats-server/v2 v2.12.4/go.mod h1:5MCp/pqm5SEfsvVZ31ll1088ZTwEUdvRX1Hmh/mTTDg= -github.com/nats-io/nats.go v1.49.0 h1:yh/WvY59gXqYpgl33ZI+XoVPKyut/IcEaqtsiuTJpoE= -github.com/nats-io/nats.go v1.49.0/go.mod h1:fDCn3mN5cY8HooHwE2ukiLb4p4G4ImmzvXyJt+tGwdw= +github.com/nats-io/jwt/v2 v2.8.1 h1:V0xpGuD/N8Mi+fQNDynXohVvp7ZztevW5io8CUWlPmU= +github.com/nats-io/jwt/v2 v2.8.1/go.mod h1:nWnOEEiVMiKHQpnAy4eXlizVEtSfzacZ1Q43LIRavZg= +github.com/nats-io/nats-server/v2 v2.12.6 h1:Egbx9Vl7Ch8wTtpXPGqbehkZ+IncKqShUxvrt1+Enc8= +github.com/nats-io/nats-server/v2 v2.12.6/go.mod h1:4HPlrvtmSO3yd7KcElDNMx9kv5EBJBnJJzQPptXlheo= +github.com/nats-io/nats.go v1.50.0 h1:5zAeQrTvyrKrWLJ0fu02W3br8ym57qf7csDzgLOpcds= +github.com/nats-io/nats.go v1.50.0/go.mod h1:26HypzazeOkyO3/mqd1zZd53STJN0EjCYF9Uy2ZOBno= github.com/nats-io/nkeys v0.4.15 h1:JACV5jRVO9V856KOapQ7x+EY8Jo3qw1vJt/9Jpwzkk4= github.com/nats-io/nkeys v0.4.15/go.mod h1:CpMchTXC9fxA5zrMo4KpySxNjiDVvr8ANOSZdiNfUrs= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= @@ -553,8 +557,8 @@ github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgr github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/pierrec/lz4/v4 v4.1.25 h1:kocOqRffaIbU5djlIBr7Wh+cx82C0vtFb0fOurZHqD0= -github.com/pierrec/lz4/v4 v4.1.25/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= +github.com/pierrec/lz4/v4 v4.1.26 h1:GrpZw1gZttORinvzBdXPUXATeqlJjqUG/D87TKMnhjY= +github.com/pierrec/lz4/v4 v4.1.26/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= 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/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -585,15 +589,15 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs= -github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= +github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= +github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= -github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= +github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= +github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 h1:bsUq1dX0N8AOIL7EB/X911+m4EHsnWEHeJ0c+3TTBrg= github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/redis/go-redis/v9 v9.18.0 h1:pMkxYPkEbMPwRdenAzUNyFNrDgHx9U+DrBabWNfSRQs= @@ -609,8 +613,8 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 h1:PKK9DyHxif4LZo+uQSgXNqs0jj5+xZwwfKHgph2lxBw= -github.com/santhosh-tekuri/jsonschema/v6 v6.0.1/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shirou/gopsutil/v4 v4.26.2 h1:X8i6sicvUFih4BmYIGT1m2wwgw2VG9YgrDTi7cIRGUI= @@ -641,12 +645,12 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/testcontainers/testcontainers-go v0.40.0 h1:pSdJYLOVgLE8YdUY2FHQ1Fxu+aMnb6JfVz1mxk7OeMU= -github.com/testcontainers/testcontainers-go v0.40.0/go.mod h1:FSXV5KQtX2HAMlm7U3APNyLkkap35zNLxukw9oBi/MY= -github.com/testcontainers/testcontainers-go/modules/consul v0.40.0 h1:dILouyNaXHjCGKiFvtAFgXJYJ4fGH+WmwQulfj/k6bI= -github.com/testcontainers/testcontainers-go/modules/consul v0.40.0/go.mod h1:bQNH35oDTt9ImPI2m+Y2Nf+cthcOGa/z/5c5vrgXc5E= -github.com/testcontainers/testcontainers-go/modules/etcd v0.40.0 h1:9uZrotowD6Z9qgpd8w46UXi1x5bkhOcpveK5rvWy5u0= -github.com/testcontainers/testcontainers-go/modules/etcd v0.40.0/go.mod h1:z5saei5a/cpuXYz3MJqJ91RMBYOqw7OXDueN8XKoALA= +github.com/testcontainers/testcontainers-go v0.41.0 h1:mfpsD0D36YgkxGj2LrIyxuwQ9i2wCKAD+ESsYM1wais= +github.com/testcontainers/testcontainers-go v0.41.0/go.mod h1:pdFrEIfaPl24zmBjerWTTYaY0M6UHsqA1YSvsoU40MI= +github.com/testcontainers/testcontainers-go/modules/consul v0.41.0 h1:ssCWgKf4dst0Ys2J69kohXuXjINJXph0QgFf6mlwCbU= +github.com/testcontainers/testcontainers-go/modules/consul v0.41.0/go.mod h1:PwMdtDOg4IIImUWFLX2ZDMulqR70JCrfkZdIVM/lMN8= +github.com/testcontainers/testcontainers-go/modules/etcd v0.41.0 h1:HDEpWRH7JTCSUeJkcwkbRCUClZ8qyT6Z4RgfjR3JMr4= +github.com/testcontainers/testcontainers-go/modules/etcd v0.41.0/go.mod h1:PpbzL8aLFNc8VFd6yAqleklm60cvN+s8BiQh8VsNDfg= github.com/tidwall/btree v1.1.0/go.mod h1:TzIRzen6yHbibdSfK6t8QimqbUnoxUSrZfeW7Uob0q4= github.com/tidwall/btree v1.8.1 h1:27ehoXvm5AG/g+1VxLS1SD3vRhp/H7LuEfwNvddEdmA= github.com/tidwall/btree v1.8.1/go.mod h1:jBbTdUWhSZClZWoDg54VnvV7/54modSOzDN7VXftj1A= @@ -660,10 +664,10 @@ github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYI github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI= github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw= github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ= -github.com/tochemey/goakt/v4 v4.0.0 h1:+gYpo+54iWvlLUzppi/11fcVN6+r5Cr3F0nh3ggTrnA= -github.com/tochemey/goakt/v4 v4.0.0/go.mod h1:0lyUm16yq2rc7b3NxPSmkk+wUD4FFF0/YlTDIefaVKs= -github.com/tochemey/olric v0.3.8 h1:t9LMoyAcoeCfn8n9NRY6fCIJlfok06mzoagDHgICM48= -github.com/tochemey/olric v0.3.8/go.mod h1:bWN6wnNHaVFqz1KGWbvORsC6sfSLtncFEM19dUJHMdQ= +github.com/tochemey/goakt/v4 v4.1.1 h1:MO3HmcsDxTANSEZ9Js+dpwb/YD4qELBzV+0gbO9WrFQ= +github.com/tochemey/goakt/v4 v4.1.1/go.mod h1:fdUODkdd7FRkM4jumOd9jVBoCjB1L4YnAAF6WTYHMo0= +github.com/tochemey/olric v0.3.9 h1:MU3VVQ3TZwdRzyxai0myxNMZj0lMK/RCjhaYh2Xe6aQ= +github.com/tochemey/olric v0.3.9/go.mod h1:r5OVAIw1zaZJ5WKvKj1c4XnLwFaYpH8EJpm4dAD8Bp0= github.com/travisjeffery/go-dynaport v1.0.0 h1:m/qqf5AHgB96CMMSworIPyo1i7NZueRsnwdzdCJ8Ajw= github.com/travisjeffery/go-dynaport v1.0.0/go.mod h1:0LHuDS4QAx+mAc4ri3WkQdavgVoBIZ7cE9ob17KIAJk= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= @@ -691,44 +695,46 @@ github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/zalando/go-keyring v0.2.8 h1:6sD/Ucpl7jNq10rM2pgqTs0sZ9V3qMrqfIIy5YPccHs= +github.com/zalando/go-keyring v0.2.8/go.mod h1:tsMo+VpRq5NGyKfxoBVjCuMrG47yj8cmakZDO5QGii0= github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs= github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s= go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo= go.etcd.io/bbolt v1.4.3/go.mod h1:tKQlpPaYCVFctUIgFKFnAlvbmB3tpy1vkTnDWohtc0E= -go.etcd.io/etcd/api/v3 v3.6.8 h1:gqb1VN92TAI6G2FiBvWcqKtHiIjr4SU2GdXxTwyexbM= -go.etcd.io/etcd/api/v3 v3.6.8/go.mod h1:qyQj1HZPUV3B5cbAL8scG62+fyz5dSxxu0w8pn28N6Q= -go.etcd.io/etcd/client/pkg/v3 v3.6.8 h1:Qs/5C0LNFiqXxYf2GU8MVjYUEXJ6sZaYOz0zEqQgy50= -go.etcd.io/etcd/client/pkg/v3 v3.6.8/go.mod h1:GsiTRUZE2318PggZkAo6sWb6l8JLVrnckTNfbG8PWtw= -go.etcd.io/etcd/client/v3 v3.6.8 h1:B3G76t1UykqAOrbio7s/EPatixQDkQBevN8/mwiplrY= -go.etcd.io/etcd/client/v3 v3.6.8/go.mod h1:MVG4BpSIuumPi+ELF7wYtySETmoTWBHVcDoHdVupwt8= +go.etcd.io/etcd/api/v3 v3.6.9 h1:UA7iKfEW1AzgihcBSGXci2kDGQiokSq41F9HMCI/RTI= +go.etcd.io/etcd/api/v3 v3.6.9/go.mod h1:csEk/qTfxKL36NqJdU15Tgtl65A8dyEY2BYo7PRsIwk= +go.etcd.io/etcd/client/pkg/v3 v3.6.9 h1:T8nuk8Lz64C+Hzb0coBFLMSlVSQZBpAtFk46swdM1DA= +go.etcd.io/etcd/client/pkg/v3 v3.6.9/go.mod h1:WEy3PpwbbEBVRdh1NVJYsuUe/8eyI21PNJRazeD8z/Y= +go.etcd.io/etcd/client/v3 v3.6.9 h1:3X555hQXmhRr27O37wls53g68CpUiPOiHXrZfz2Al+o= +go.etcd.io/etcd/client/v3 v3.6.9/go.mod h1:KO7H1HLYh1qaljuVZJQwBFk1lRce6pJzt+C81GEnrlM= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/detectors/gcp v1.39.0 h1:kWRNZMsfBHZ+uHjiH4y7Etn2FK26LAGkNFw7RHv1DhE= -go.opentelemetry.io/contrib/detectors/gcp v1.39.0/go.mod h1:t/OGqzHBa5v6RHZwrDBJ2OirWc+4q/w2fTbLZwAKjTk= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.66.0 h1:PnV4kVnw0zOmwwFkAzCN5O07fw1YOIQor120zrh0AVo= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.66.0/go.mod h1:ofAwF4uinaf8SXdVzzbL4OsxJ3VfeEg3f/F6CeF49/Y= -go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= -go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 h1:wVZXIWjQSeSmMoxF74LzAnpVQOAFDo3pPji9Y4SOFKc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0/go.mod h1:khvBS2IggMFNwZK/6lEeHg/W57h/IX6J4URh57fuI40= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0 h1:5gn2urDL/FBnK8OkCfD1j3/ER79rUuTYmCvlXBKeYL8= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0/go.mod h1:0fBG6ZJxhqByfFZDwSwpZGzJU671HkwpWaNe2t4VUPI= -go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= -go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= -go.opentelemetry.io/otel/sdk v1.41.0 h1:YPIEXKmiAwkGl3Gu1huk1aYWwtpRLeskpV+wPisxBp8= -go.opentelemetry.io/otel/sdk v1.41.0/go.mod h1:ahFdU0G5y8IxglBf0QBJXgSe7agzjE4GiTJ6HT9ud90= -go.opentelemetry.io/otel/sdk/metric v1.41.0 h1:siZQIYBAUd1rlIWQT2uCxWJxcCO7q3TriaMlf08rXw8= -go.opentelemetry.io/otel/sdk/metric v1.41.0/go.mod h1:HNBuSvT7ROaGtGI50ArdRLUnvRTRGniSUZbxiWxSO8Y= -go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= -go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= -go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= -go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= +go.opentelemetry.io/contrib/detectors/gcp v1.43.0 h1:62yY3dT7/ShwOxzA0RsKRgshBmfElKI4d/Myu2OxDFU= +go.opentelemetry.io/contrib/detectors/gcp v1.43.0/go.mod h1:RyaZMFY7yi1kAs45S6mbFGz8O8rqB0dTY14uzvG4LCs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 h1:3iZJKlCZufyRzPzlQhUIWVmfltrXuGyfjREgGP3UUjc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0/go.mod h1:/G+nUPfhq2e+qiXMGxMwumDrP5jtzU+mWN7/sjT2rak= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= +go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -739,8 +745,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= -go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= +go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= +go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -749,15 +755,15 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= -golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= -golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa h1:Zt3DZoOFFYkKhDT3v7Lm9FDMEV06GpzjG2jrqW+QTE0= -golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa/go.mod h1:K79w1Vqn7PoiZn+TkNpx3BUWUQksGO3JcVX6qIjytmA= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= +golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= +golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= -golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= +golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= +golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -773,11 +779,11 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo= -golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ= -golang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= +golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -815,48 +821,48 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= -golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= 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.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= -golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= +golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= +golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= -golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= -golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= -golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= -golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= +golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= +golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/api v0.269.0 h1:qDrTOxKUQ/P0MveH6a7vZ+DNHxJQjtGm/uvdbdGXCQg= -google.golang.org/api v0.269.0/go.mod h1:N8Wpcu23Tlccl0zSHEkcAZQKDLdquxK+l9r2LkwAauE= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/api v0.272.0 h1:eLUQZGnAS3OHn31URRf9sAmRk3w2JjMx37d2k8AjJmA= +google.golang.org/api v0.272.0/go.mod h1:wKjowi5LNJc5qarNvDCvNQBn3rVK8nSy6jg2SwRwzIA= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 h1:VQZ/yAbAtjkHgH80teYd2em3xtIkkHd7ZhqfH2N9CsM= -google.golang.org/genproto v0.0.0-20260128011058-8636f8732409/go.mod h1:rxKD3IEILWEu3P44seeNOAwZN4SaoKaQ/2eTg4mM6EM= -google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 h1:tu/dtnW1o3wfaxCOjSLn5IRX4YDcJrtlpzYkhHhGaC4= -google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171/go.mod h1:M5krXqk4GhBKvB596udGL3UyjL4I1+cTbK0orROM9ng= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 h1:ggcbiqK8WWh6l1dnltU4BgWGIGo+EVYxCaAPih/zQXQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 h1:XzmzkmB14QhVhgnawEVsOn6OFsnpyxNPRY9QV01dNB0= +google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:L43LFes82YgSonw6iTXTxXUX1OlULt4AQtkik4ULL/I= +google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d h1:/aDRtSZJjyLQzm75d+a1wOJaqyKBMvIAfeQmoa3ORiI= +google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:etfGUgejTiadZAUaEP14NP97xi1RGeawqkjDARA/UOs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d h1:wT2n40TBqFY6wiwazVK9/iTWbsQrgk5ZfCSVFLO9LQA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= +google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -892,32 +898,32 @@ gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= -k8s.io/api v0.35.2 h1:tW7mWc2RpxW7HS4CoRXhtYHSzme1PN1UjGHJ1bdrtdw= -k8s.io/api v0.35.2/go.mod h1:7AJfqGoAZcwSFhOjcGM7WV05QxMMgUaChNfLTXDRE60= -k8s.io/apimachinery v0.35.2 h1:NqsM/mmZA7sHW02JZ9RTtk3wInRgbVxL8MPfzSANAK8= -k8s.io/apimachinery v0.35.2/go.mod h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns= -k8s.io/client-go v0.35.2 h1:YUfPefdGJA4aljDdayAXkc98DnPkIetMl4PrKX97W9o= -k8s.io/client-go v0.35.2/go.mod h1:4QqEwh4oQpeK8AaefZ0jwTFJw/9kIjdQi0jpKeYvz7g= -k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= -k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20260127142750-a19766b6e2d4 h1:HhDfevmPS+OalTjQRKbTHppRIz01AWi8s45TMXStgYY= -k8s.io/kube-openapi v0.0.0-20260127142750-a19766b6e2d4/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ= -k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 h1:AZYQSJemyQB5eRxqcPky+/7EdBj0xi3g0ZcxxJ7vbWU= -k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= +k8s.io/api v0.35.3 h1:pA2fiBc6+N9PDf7SAiluKGEBuScsTzd2uYBkA5RzNWQ= +k8s.io/api v0.35.3/go.mod h1:9Y9tkBcFwKNq2sxwZTQh1Njh9qHl81D0As56tu42GA4= +k8s.io/apimachinery v0.35.3 h1:MeaUwQCV3tjKP4bcwWGgZ/cp/vpsRnQzqO6J6tJyoF8= +k8s.io/apimachinery v0.35.3/go.mod h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns= +k8s.io/client-go v0.35.3 h1:s1lZbpN4uI6IxeTM2cpdtrwHcSOBML1ODNTCCfsP1pg= +k8s.io/client-go v0.35.3/go.mod h1:RzoXkc0mzpWIDvBrRnD+VlfXP+lRzqQjCmKtiwZ8Q9c= +k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc= +k8s.io/klog/v2 v2.140.0/go.mod h1:o+/RWfJ6PwpnFn7OyAG3QnO47BFsymfEfrz6XyYSSp0= +k8s.io/kube-openapi v0.0.0-20260319004828-5883c5ee87b9 h1:Sztf7ESG9tAXRW/ACJZjrj5jhdOUqS2KFRQT+CTvu78= +k8s.io/kube-openapi v0.0.0-20260319004828-5883c5ee87b9/go.mod h1:uGBT7iTA6c6MvqUvSXIaYZo9ukscABYi2btjhvgKGZ0= +k8s.io/utils v0.0.0-20260319190234-28399d86e0b5 h1:kBawHLSnx/mYHmRnNUf9d4CpjREbeZuxoSGOX/J+aYM= +k8s.io/utils v0.0.0-20260319190234-28399d86e0b5/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= modernc.org/cc/v4 v4.27.1 h1:9W30zRlYrefrDV2JE2O8VDtJ1yPGownxciz5rrbQZis= modernc.org/cc/v4 v4.27.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= -modernc.org/ccgo/v4 v4.30.1 h1:4r4U1J6Fhj98NKfSjnPUN7Ze2c6MnAdL0hWw6+LrJpc= -modernc.org/ccgo/v4 v4.30.1/go.mod h1:bIOeI1JL54Utlxn+LwrFyjCx2n2RDiYEaJVSrgdrRfM= -modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA= -modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= +modernc.org/ccgo/v4 v4.32.0 h1:hjG66bI/kqIPX1b2yT6fr/jt+QedtP2fqojG2VrFuVw= +modernc.org/ccgo/v4 v4.32.0/go.mod h1:6F08EBCx5uQc38kMGl+0Nm0oWczoo1c7cgpzEry7Uc0= +modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM= +modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU= modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= -modernc.org/gc/v3 v3.1.1 h1:k8T3gkXWY9sEiytKhcgyiZ2L0DTyCQ/nvX+LoCljoRE= -modernc.org/gc/v3 v3.1.1/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= +modernc.org/gc/v3 v3.1.2 h1:ZtDCnhonXSZexk/AYsegNRV1lJGgaNZJuKjJSWKyEqo= +modernc.org/gc/v3 v3.1.2/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= -modernc.org/libc v1.67.6 h1:eVOQvpModVLKOdT+LvBPjdQqfrZq+pC39BygcT+E7OI= -modernc.org/libc v1.67.6/go.mod h1:JAhxUVlolfYDErnwiqaLvUqc8nfb2r6S6slAgZOnaiE= +modernc.org/libc v1.70.0 h1:U58NawXqXbgpZ/dcdS9kMshu08aiA6b7gusEusqzNkw= +modernc.org/libc v1.70.0/go.mod h1:OVmxFGP1CI/Z4L3E0Q3Mf1PDE0BucwMkcXjjLntvHJo= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= @@ -926,8 +932,8 @@ modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= -modernc.org/sqlite v1.45.0 h1:r51cSGzKpbptxnby+EIIz5fop4VuE4qFoVEjNvWoObs= -modernc.org/sqlite v1.45.0/go.mod h1:CzbrU2lSB1DKUusvwGz7rqEKIq+NUd8GWuBBZDs9/nA= +modernc.org/sqlite v1.47.0 h1:R1XyaNpoW4Et9yly+I2EeX7pBza/w+pmYee/0HJDyKk= +modernc.org/sqlite v1.47.0/go.mod h1:hWjRO6Tj/5Ik8ieqxQybiEOUXy0NJFNp2tpvVpKlvig= modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= diff --git a/internal/contracts/authz.pb.go b/internal/contracts/authz.pb.go new file mode 100644 index 0000000..2903d5c --- /dev/null +++ b/internal/contracts/authz.pb.go @@ -0,0 +1,2152 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v7.34.1 +// source: internal/contracts/authz.proto + +package contracts + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + structpb "google.golang.org/protobuf/types/known/structpb" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type StringList struct { + state protoimpl.MessageState `protogen:"open.v1"` + Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StringList) Reset() { + *x = StringList{} + mi := &file_internal_contracts_authz_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StringList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StringList) ProtoMessage() {} + +func (x *StringList) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StringList.ProtoReflect.Descriptor instead. +func (*StringList) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{0} +} + +func (x *StringList) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +type AdapterConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Driver string `protobuf:"bytes,3,opt,name=driver,proto3" json:"driver,omitempty"` + Dsn string `protobuf:"bytes,4,opt,name=dsn,proto3" json:"dsn,omitempty"` + TableName string `protobuf:"bytes,5,opt,name=table_name,json=tableName,proto3" json:"table_name,omitempty"` + Tenant string `protobuf:"bytes,6,opt,name=tenant,proto3" json:"tenant,omitempty"` + FilterField string `protobuf:"bytes,7,opt,name=filter_field,json=filterField,proto3" json:"filter_field,omitempty"` + FilterValue string `protobuf:"bytes,8,opt,name=filter_value,json=filterValue,proto3" json:"filter_value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AdapterConfig) Reset() { + *x = AdapterConfig{} + mi := &file_internal_contracts_authz_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AdapterConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdapterConfig) ProtoMessage() {} + +func (x *AdapterConfig) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AdapterConfig.ProtoReflect.Descriptor instead. +func (*AdapterConfig) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{1} +} + +func (x *AdapterConfig) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *AdapterConfig) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *AdapterConfig) GetDriver() string { + if x != nil { + return x.Driver + } + return "" +} + +func (x *AdapterConfig) GetDsn() string { + if x != nil { + return x.Dsn + } + return "" +} + +func (x *AdapterConfig) GetTableName() string { + if x != nil { + return x.TableName + } + return "" +} + +func (x *AdapterConfig) GetTenant() string { + if x != nil { + return x.Tenant + } + return "" +} + +func (x *AdapterConfig) GetFilterField() string { + if x != nil { + return x.FilterField + } + return "" +} + +func (x *AdapterConfig) GetFilterValue() string { + if x != nil { + return x.FilterValue + } + return "" +} + +type WatcherConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Interval string `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WatcherConfig) Reset() { + *x = WatcherConfig{} + mi := &file_internal_contracts_authz_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WatcherConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WatcherConfig) ProtoMessage() {} + +func (x *WatcherConfig) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WatcherConfig.ProtoReflect.Descriptor instead. +func (*WatcherConfig) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{2} +} + +func (x *WatcherConfig) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *WatcherConfig) GetInterval() string { + if x != nil { + return x.Interval + } + return "" +} + +type CasbinModuleConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + Model string `protobuf:"bytes,1,opt,name=model,proto3" json:"model,omitempty"` + Policies []*StringList `protobuf:"bytes,2,rep,name=policies,proto3" json:"policies,omitempty"` + RoleAssignments []*StringList `protobuf:"bytes,3,rep,name=role_assignments,json=roleAssignments,proto3" json:"role_assignments,omitempty"` + Adapter *AdapterConfig `protobuf:"bytes,4,opt,name=adapter,proto3" json:"adapter,omitempty"` + Watcher *WatcherConfig `protobuf:"bytes,5,opt,name=watcher,proto3" json:"watcher,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CasbinModuleConfig) Reset() { + *x = CasbinModuleConfig{} + mi := &file_internal_contracts_authz_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CasbinModuleConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CasbinModuleConfig) ProtoMessage() {} + +func (x *CasbinModuleConfig) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CasbinModuleConfig.ProtoReflect.Descriptor instead. +func (*CasbinModuleConfig) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{3} +} + +func (x *CasbinModuleConfig) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +func (x *CasbinModuleConfig) GetPolicies() []*StringList { + if x != nil { + return x.Policies + } + return nil +} + +func (x *CasbinModuleConfig) GetRoleAssignments() []*StringList { + if x != nil { + return x.RoleAssignments + } + return nil +} + +func (x *CasbinModuleConfig) GetAdapter() *AdapterConfig { + if x != nil { + return x.Adapter + } + return nil +} + +func (x *CasbinModuleConfig) GetWatcher() *WatcherConfig { + if x != nil { + return x.Watcher + } + return nil +} + +type PermitModuleConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + ApiKey string `protobuf:"bytes,1,opt,name=api_key,json=apiKey,proto3" json:"api_key,omitempty"` + PdpUrl string `protobuf:"bytes,2,opt,name=pdp_url,json=pdpUrl,proto3" json:"pdp_url,omitempty"` + ApiUrl string `protobuf:"bytes,3,opt,name=api_url,json=apiUrl,proto3" json:"api_url,omitempty"` + Project string `protobuf:"bytes,4,opt,name=project,proto3" json:"project,omitempty"` + Environment string `protobuf:"bytes,5,opt,name=environment,proto3" json:"environment,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PermitModuleConfig) Reset() { + *x = PermitModuleConfig{} + mi := &file_internal_contracts_authz_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PermitModuleConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PermitModuleConfig) ProtoMessage() {} + +func (x *PermitModuleConfig) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PermitModuleConfig.ProtoReflect.Descriptor instead. +func (*PermitModuleConfig) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{4} +} + +func (x *PermitModuleConfig) GetApiKey() string { + if x != nil { + return x.ApiKey + } + return "" +} + +func (x *PermitModuleConfig) GetPdpUrl() string { + if x != nil { + return x.PdpUrl + } + return "" +} + +func (x *PermitModuleConfig) GetApiUrl() string { + if x != nil { + return x.ApiUrl + } + return "" +} + +func (x *PermitModuleConfig) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *PermitModuleConfig) GetEnvironment() string { + if x != nil { + return x.Environment + } + return "" +} + +type ExtraField struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExtraField) Reset() { + *x = ExtraField{} + mi := &file_internal_contracts_authz_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExtraField) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExtraField) ProtoMessage() {} + +func (x *ExtraField) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExtraField.ProtoReflect.Descriptor instead. +func (*ExtraField) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{5} +} + +func (x *ExtraField) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *ExtraField) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +type AuthzCheckConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + SubjectKey string `protobuf:"bytes,2,opt,name=subject_key,json=subjectKey,proto3" json:"subject_key,omitempty"` + Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` + Action string `protobuf:"bytes,4,opt,name=action,proto3" json:"action,omitempty"` + Audit bool `protobuf:"varint,5,opt,name=audit,proto3" json:"audit,omitempty"` + ExtraFields []*ExtraField `protobuf:"bytes,6,rep,name=extra_fields,json=extraFields,proto3" json:"extra_fields,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AuthzCheckConfig) Reset() { + *x = AuthzCheckConfig{} + mi := &file_internal_contracts_authz_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AuthzCheckConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthzCheckConfig) ProtoMessage() {} + +func (x *AuthzCheckConfig) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthzCheckConfig.ProtoReflect.Descriptor instead. +func (*AuthzCheckConfig) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{6} +} + +func (x *AuthzCheckConfig) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *AuthzCheckConfig) GetSubjectKey() string { + if x != nil { + return x.SubjectKey + } + return "" +} + +func (x *AuthzCheckConfig) GetObject() string { + if x != nil { + return x.Object + } + return "" +} + +func (x *AuthzCheckConfig) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +func (x *AuthzCheckConfig) GetAudit() bool { + if x != nil { + return x.Audit + } + return false +} + +func (x *AuthzCheckConfig) GetExtraFields() []*ExtraField { + if x != nil { + return x.ExtraFields + } + return nil +} + +type AuthzCheckInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + SubjectKey string `protobuf:"bytes,2,opt,name=subject_key,json=subjectKey,proto3" json:"subject_key,omitempty"` + Subject string `protobuf:"bytes,3,opt,name=subject,proto3" json:"subject,omitempty"` + Object string `protobuf:"bytes,4,opt,name=object,proto3" json:"object,omitempty"` + Action string `protobuf:"bytes,5,opt,name=action,proto3" json:"action,omitempty"` + ExtraFields []*ExtraField `protobuf:"bytes,6,rep,name=extra_fields,json=extraFields,proto3" json:"extra_fields,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AuthzCheckInput) Reset() { + *x = AuthzCheckInput{} + mi := &file_internal_contracts_authz_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AuthzCheckInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthzCheckInput) ProtoMessage() {} + +func (x *AuthzCheckInput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthzCheckInput.ProtoReflect.Descriptor instead. +func (*AuthzCheckInput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{7} +} + +func (x *AuthzCheckInput) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *AuthzCheckInput) GetSubjectKey() string { + if x != nil { + return x.SubjectKey + } + return "" +} + +func (x *AuthzCheckInput) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *AuthzCheckInput) GetObject() string { + if x != nil { + return x.Object + } + return "" +} + +func (x *AuthzCheckInput) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +func (x *AuthzCheckInput) GetExtraFields() []*ExtraField { + if x != nil { + return x.ExtraFields + } + return nil +} + +type AuthzCheckOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Subject string `protobuf:"bytes,1,opt,name=subject,proto3" json:"subject,omitempty"` + Object string `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"` + Action string `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` + Allowed bool `protobuf:"varint,4,opt,name=allowed,proto3" json:"allowed,omitempty"` + ResponseStatus int32 `protobuf:"varint,5,opt,name=response_status,json=responseStatus,proto3" json:"response_status,omitempty"` + ResponseBody string `protobuf:"bytes,6,opt,name=response_body,json=responseBody,proto3" json:"response_body,omitempty"` + ResponseHeaders *structpb.Struct `protobuf:"bytes,7,opt,name=response_headers,json=responseHeaders,proto3" json:"response_headers,omitempty"` + Error string `protobuf:"bytes,100,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AuthzCheckOutput) Reset() { + *x = AuthzCheckOutput{} + mi := &file_internal_contracts_authz_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AuthzCheckOutput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthzCheckOutput) ProtoMessage() {} + +func (x *AuthzCheckOutput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthzCheckOutput.ProtoReflect.Descriptor instead. +func (*AuthzCheckOutput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{8} +} + +func (x *AuthzCheckOutput) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *AuthzCheckOutput) GetObject() string { + if x != nil { + return x.Object + } + return "" +} + +func (x *AuthzCheckOutput) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +func (x *AuthzCheckOutput) GetAllowed() bool { + if x != nil { + return x.Allowed + } + return false +} + +func (x *AuthzCheckOutput) GetResponseStatus() int32 { + if x != nil { + return x.ResponseStatus + } + return 0 +} + +func (x *AuthzCheckOutput) GetResponseBody() string { + if x != nil { + return x.ResponseBody + } + return "" +} + +func (x *AuthzCheckOutput) GetResponseHeaders() *structpb.Struct { + if x != nil { + return x.ResponseHeaders + } + return nil +} + +func (x *AuthzCheckOutput) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type PolicyRuleConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Rule []string `protobuf:"bytes,2,rep,name=rule,proto3" json:"rule,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PolicyRuleConfig) Reset() { + *x = PolicyRuleConfig{} + mi := &file_internal_contracts_authz_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PolicyRuleConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyRuleConfig) ProtoMessage() {} + +func (x *PolicyRuleConfig) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyRuleConfig.ProtoReflect.Descriptor instead. +func (*PolicyRuleConfig) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{9} +} + +func (x *PolicyRuleConfig) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *PolicyRuleConfig) GetRule() []string { + if x != nil { + return x.Rule + } + return nil +} + +type PolicyRuleInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Rule []string `protobuf:"bytes,2,rep,name=rule,proto3" json:"rule,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PolicyRuleInput) Reset() { + *x = PolicyRuleInput{} + mi := &file_internal_contracts_authz_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PolicyRuleInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyRuleInput) ProtoMessage() {} + +func (x *PolicyRuleInput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyRuleInput.ProtoReflect.Descriptor instead. +func (*PolicyRuleInput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{10} +} + +func (x *PolicyRuleInput) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *PolicyRuleInput) GetRule() []string { + if x != nil { + return x.Rule + } + return nil +} + +type PolicyRuleOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Changed bool `protobuf:"varint,1,opt,name=changed,proto3" json:"changed,omitempty"` + Rule []string `protobuf:"bytes,2,rep,name=rule,proto3" json:"rule,omitempty"` + Error string `protobuf:"bytes,100,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PolicyRuleOutput) Reset() { + *x = PolicyRuleOutput{} + mi := &file_internal_contracts_authz_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PolicyRuleOutput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyRuleOutput) ProtoMessage() {} + +func (x *PolicyRuleOutput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyRuleOutput.ProtoReflect.Descriptor instead. +func (*PolicyRuleOutput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{11} +} + +func (x *PolicyRuleOutput) GetChanged() bool { + if x != nil { + return x.Changed + } + return false +} + +func (x *PolicyRuleOutput) GetRule() []string { + if x != nil { + return x.Rule + } + return nil +} + +func (x *PolicyRuleOutput) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type RoleAssignConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Action string `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + Assignments []*StringList `protobuf:"bytes,3,rep,name=assignments,proto3" json:"assignments,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RoleAssignConfig) Reset() { + *x = RoleAssignConfig{} + mi := &file_internal_contracts_authz_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RoleAssignConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleAssignConfig) ProtoMessage() {} + +func (x *RoleAssignConfig) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoleAssignConfig.ProtoReflect.Descriptor instead. +func (*RoleAssignConfig) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{12} +} + +func (x *RoleAssignConfig) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *RoleAssignConfig) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +func (x *RoleAssignConfig) GetAssignments() []*StringList { + if x != nil { + return x.Assignments + } + return nil +} + +type RoleAssignInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Action string `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + Assignments []*StringList `protobuf:"bytes,3,rep,name=assignments,proto3" json:"assignments,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RoleAssignInput) Reset() { + *x = RoleAssignInput{} + mi := &file_internal_contracts_authz_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RoleAssignInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleAssignInput) ProtoMessage() {} + +func (x *RoleAssignInput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoleAssignInput.ProtoReflect.Descriptor instead. +func (*RoleAssignInput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{13} +} + +func (x *RoleAssignInput) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *RoleAssignInput) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +func (x *RoleAssignInput) GetAssignments() []*StringList { + if x != nil { + return x.Assignments + } + return nil +} + +type RoleAssignOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Action string `protobuf:"bytes,1,opt,name=action,proto3" json:"action,omitempty"` + Assignments []*StringList `protobuf:"bytes,2,rep,name=assignments,proto3" json:"assignments,omitempty"` + Error string `protobuf:"bytes,100,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RoleAssignOutput) Reset() { + *x = RoleAssignOutput{} + mi := &file_internal_contracts_authz_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RoleAssignOutput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleAssignOutput) ProtoMessage() {} + +func (x *RoleAssignOutput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoleAssignOutput.ProtoReflect.Descriptor instead. +func (*RoleAssignOutput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{14} +} + +func (x *RoleAssignOutput) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +func (x *RoleAssignOutput) GetAssignments() []*StringList { + if x != nil { + return x.Assignments + } + return nil +} + +func (x *RoleAssignOutput) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type CapabilitiesConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CapabilitiesConfig) Reset() { + *x = CapabilitiesConfig{} + mi := &file_internal_contracts_authz_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CapabilitiesConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CapabilitiesConfig) ProtoMessage() {} + +func (x *CapabilitiesConfig) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CapabilitiesConfig.ProtoReflect.Descriptor instead. +func (*CapabilitiesConfig) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{15} +} + +func (x *CapabilitiesConfig) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *CapabilitiesConfig) GetProvider() string { + if x != nil { + return x.Provider + } + return "" +} + +type CapabilitiesInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CapabilitiesInput) Reset() { + *x = CapabilitiesInput{} + mi := &file_internal_contracts_authz_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CapabilitiesInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CapabilitiesInput) ProtoMessage() {} + +func (x *CapabilitiesInput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CapabilitiesInput.ProtoReflect.Descriptor instead. +func (*CapabilitiesInput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{16} +} + +func (x *CapabilitiesInput) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *CapabilitiesInput) GetProvider() string { + if x != nil { + return x.Provider + } + return "" +} + +type CapabilitiesOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` + Capabilities []string `protobuf:"bytes,3,rep,name=capabilities,proto3" json:"capabilities,omitempty"` + Error string `protobuf:"bytes,100,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CapabilitiesOutput) Reset() { + *x = CapabilitiesOutput{} + mi := &file_internal_contracts_authz_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CapabilitiesOutput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CapabilitiesOutput) ProtoMessage() {} + +func (x *CapabilitiesOutput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CapabilitiesOutput.ProtoReflect.Descriptor instead. +func (*CapabilitiesOutput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{17} +} + +func (x *CapabilitiesOutput) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *CapabilitiesOutput) GetProvider() string { + if x != nil { + return x.Provider + } + return "" +} + +func (x *CapabilitiesOutput) GetCapabilities() []string { + if x != nil { + return x.Capabilities + } + return nil +} + +func (x *CapabilitiesOutput) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type SubjectObjectActionConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` + Action string `protobuf:"bytes,4,opt,name=action,proto3" json:"action,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubjectObjectActionConfig) Reset() { + *x = SubjectObjectActionConfig{} + mi := &file_internal_contracts_authz_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubjectObjectActionConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubjectObjectActionConfig) ProtoMessage() {} + +func (x *SubjectObjectActionConfig) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubjectObjectActionConfig.ProtoReflect.Descriptor instead. +func (*SubjectObjectActionConfig) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{18} +} + +func (x *SubjectObjectActionConfig) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *SubjectObjectActionConfig) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *SubjectObjectActionConfig) GetObject() string { + if x != nil { + return x.Object + } + return "" +} + +func (x *SubjectObjectActionConfig) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +type SubjectObjectActionInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` + Action string `protobuf:"bytes,4,opt,name=action,proto3" json:"action,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubjectObjectActionInput) Reset() { + *x = SubjectObjectActionInput{} + mi := &file_internal_contracts_authz_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubjectObjectActionInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubjectObjectActionInput) ProtoMessage() {} + +func (x *SubjectObjectActionInput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubjectObjectActionInput.ProtoReflect.Descriptor instead. +func (*SubjectObjectActionInput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{19} +} + +func (x *SubjectObjectActionInput) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *SubjectObjectActionInput) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *SubjectObjectActionInput) GetObject() string { + if x != nil { + return x.Object + } + return "" +} + +func (x *SubjectObjectActionInput) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +type SubjectObjectActionOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Allowed bool `protobuf:"varint,1,opt,name=allowed,proto3" json:"allowed,omitempty"` + Changed bool `protobuf:"varint,2,opt,name=changed,proto3" json:"changed,omitempty"` + Subject string `protobuf:"bytes,3,opt,name=subject,proto3" json:"subject,omitempty"` + Object string `protobuf:"bytes,4,opt,name=object,proto3" json:"object,omitempty"` + Action string `protobuf:"bytes,5,opt,name=action,proto3" json:"action,omitempty"` + Error string `protobuf:"bytes,100,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubjectObjectActionOutput) Reset() { + *x = SubjectObjectActionOutput{} + mi := &file_internal_contracts_authz_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubjectObjectActionOutput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubjectObjectActionOutput) ProtoMessage() {} + +func (x *SubjectObjectActionOutput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubjectObjectActionOutput.ProtoReflect.Descriptor instead. +func (*SubjectObjectActionOutput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{20} +} + +func (x *SubjectObjectActionOutput) GetAllowed() bool { + if x != nil { + return x.Allowed + } + return false +} + +func (x *SubjectObjectActionOutput) GetChanged() bool { + if x != nil { + return x.Changed + } + return false +} + +func (x *SubjectObjectActionOutput) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *SubjectObjectActionOutput) GetObject() string { + if x != nil { + return x.Object + } + return "" +} + +func (x *SubjectObjectActionOutput) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +func (x *SubjectObjectActionOutput) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type ListConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Filter string `protobuf:"bytes,2,opt,name=filter,proto3" json:"filter,omitempty"` + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListConfig) Reset() { + *x = ListConfig{} + mi := &file_internal_contracts_authz_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListConfig) ProtoMessage() {} + +func (x *ListConfig) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListConfig.ProtoReflect.Descriptor instead. +func (*ListConfig) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{21} +} + +func (x *ListConfig) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *ListConfig) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +func (x *ListConfig) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +type ListInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Filter string `protobuf:"bytes,2,opt,name=filter,proto3" json:"filter,omitempty"` + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListInput) Reset() { + *x = ListInput{} + mi := &file_internal_contracts_authz_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListInput) ProtoMessage() {} + +func (x *ListInput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListInput.ProtoReflect.Descriptor instead. +func (*ListInput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{22} +} + +func (x *ListInput) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *ListInput) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +func (x *ListInput) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +type GenericStepOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Output *structpb.Struct `protobuf:"bytes,1,opt,name=output,proto3" json:"output,omitempty"` + Error string `protobuf:"bytes,100,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GenericStepOutput) Reset() { + *x = GenericStepOutput{} + mi := &file_internal_contracts_authz_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GenericStepOutput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericStepOutput) ProtoMessage() {} + +func (x *GenericStepOutput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericStepOutput.ProtoReflect.Descriptor instead. +func (*GenericStepOutput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{23} +} + +func (x *GenericStepOutput) GetOutput() *structpb.Struct { + if x != nil { + return x.Output + } + return nil +} + +func (x *GenericStepOutput) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type RelationConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + Relation string `protobuf:"bytes,3,opt,name=relation,proto3" json:"relation,omitempty"` + Object string `protobuf:"bytes,4,opt,name=object,proto3" json:"object,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RelationConfig) Reset() { + *x = RelationConfig{} + mi := &file_internal_contracts_authz_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RelationConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RelationConfig) ProtoMessage() {} + +func (x *RelationConfig) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RelationConfig.ProtoReflect.Descriptor instead. +func (*RelationConfig) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{24} +} + +func (x *RelationConfig) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *RelationConfig) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *RelationConfig) GetRelation() string { + if x != nil { + return x.Relation + } + return "" +} + +func (x *RelationConfig) GetObject() string { + if x != nil { + return x.Object + } + return "" +} + +type RelationInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + Relation string `protobuf:"bytes,3,opt,name=relation,proto3" json:"relation,omitempty"` + Object string `protobuf:"bytes,4,opt,name=object,proto3" json:"object,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RelationInput) Reset() { + *x = RelationInput{} + mi := &file_internal_contracts_authz_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RelationInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RelationInput) ProtoMessage() {} + +func (x *RelationInput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RelationInput.ProtoReflect.Descriptor instead. +func (*RelationInput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{25} +} + +func (x *RelationInput) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *RelationInput) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *RelationInput) GetRelation() string { + if x != nil { + return x.Relation + } + return "" +} + +func (x *RelationInput) GetObject() string { + if x != nil { + return x.Object + } + return "" +} + +type RelationOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Changed bool `protobuf:"varint,1,opt,name=changed,proto3" json:"changed,omitempty"` + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + Relation string `protobuf:"bytes,3,opt,name=relation,proto3" json:"relation,omitempty"` + Object string `protobuf:"bytes,4,opt,name=object,proto3" json:"object,omitempty"` + Error string `protobuf:"bytes,100,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RelationOutput) Reset() { + *x = RelationOutput{} + mi := &file_internal_contracts_authz_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RelationOutput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RelationOutput) ProtoMessage() {} + +func (x *RelationOutput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RelationOutput.ProtoReflect.Descriptor instead. +func (*RelationOutput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{26} +} + +func (x *RelationOutput) GetChanged() bool { + if x != nil { + return x.Changed + } + return false +} + +func (x *RelationOutput) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *RelationOutput) GetRelation() string { + if x != nil { + return x.Relation + } + return "" +} + +func (x *RelationOutput) GetObject() string { + if x != nil { + return x.Object + } + return "" +} + +func (x *RelationOutput) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type PermitStepConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Values *structpb.Struct `protobuf:"bytes,2,opt,name=values,proto3" json:"values,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PermitStepConfig) Reset() { + *x = PermitStepConfig{} + mi := &file_internal_contracts_authz_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PermitStepConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PermitStepConfig) ProtoMessage() {} + +func (x *PermitStepConfig) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PermitStepConfig.ProtoReflect.Descriptor instead. +func (*PermitStepConfig) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{27} +} + +func (x *PermitStepConfig) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *PermitStepConfig) GetValues() *structpb.Struct { + if x != nil { + return x.Values + } + return nil +} + +type PermitStepInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Values *structpb.Struct `protobuf:"bytes,2,opt,name=values,proto3" json:"values,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PermitStepInput) Reset() { + *x = PermitStepInput{} + mi := &file_internal_contracts_authz_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PermitStepInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PermitStepInput) ProtoMessage() {} + +func (x *PermitStepInput) ProtoReflect() protoreflect.Message { + mi := &file_internal_contracts_authz_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PermitStepInput.ProtoReflect.Descriptor instead. +func (*PermitStepInput) Descriptor() ([]byte, []int) { + return file_internal_contracts_authz_proto_rawDescGZIP(), []int{28} +} + +func (x *PermitStepInput) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *PermitStepInput) GetValues() *structpb.Struct { + if x != nil { + return x.Values + } + return nil +} + +var File_internal_contracts_authz_proto protoreflect.FileDescriptor + +const file_internal_contracts_authz_proto_rawDesc = "" + + "\n" + + "\x1einternal/contracts/authz.proto\x12\x19workflow.plugins.authz.v1\x1a\x1cgoogle/protobuf/struct.proto\"$\n" + + "\n" + + "StringList\x12\x16\n" + + "\x06values\x18\x01 \x03(\tR\x06values\"\xde\x01\n" + + "\rAdapterConfig\x12\x12\n" + + "\x04type\x18\x01 \x01(\tR\x04type\x12\x12\n" + + "\x04path\x18\x02 \x01(\tR\x04path\x12\x16\n" + + "\x06driver\x18\x03 \x01(\tR\x06driver\x12\x10\n" + + "\x03dsn\x18\x04 \x01(\tR\x03dsn\x12\x1d\n" + + "\n" + + "table_name\x18\x05 \x01(\tR\ttableName\x12\x16\n" + + "\x06tenant\x18\x06 \x01(\tR\x06tenant\x12!\n" + + "\ffilter_field\x18\a \x01(\tR\vfilterField\x12!\n" + + "\ffilter_value\x18\b \x01(\tR\vfilterValue\"?\n" + + "\rWatcherConfig\x12\x12\n" + + "\x04type\x18\x01 \x01(\tR\x04type\x12\x1a\n" + + "\binterval\x18\x02 \x01(\tR\binterval\"\xc7\x02\n" + + "\x12CasbinModuleConfig\x12\x14\n" + + "\x05model\x18\x01 \x01(\tR\x05model\x12A\n" + + "\bpolicies\x18\x02 \x03(\v2%.workflow.plugins.authz.v1.StringListR\bpolicies\x12P\n" + + "\x10role_assignments\x18\x03 \x03(\v2%.workflow.plugins.authz.v1.StringListR\x0froleAssignments\x12B\n" + + "\aadapter\x18\x04 \x01(\v2(.workflow.plugins.authz.v1.AdapterConfigR\aadapter\x12B\n" + + "\awatcher\x18\x05 \x01(\v2(.workflow.plugins.authz.v1.WatcherConfigR\awatcher\"\x9b\x01\n" + + "\x12PermitModuleConfig\x12\x17\n" + + "\aapi_key\x18\x01 \x01(\tR\x06apiKey\x12\x17\n" + + "\apdp_url\x18\x02 \x01(\tR\x06pdpUrl\x12\x17\n" + + "\aapi_url\x18\x03 \x01(\tR\x06apiUrl\x12\x18\n" + + "\aproject\x18\x04 \x01(\tR\aproject\x12 \n" + + "\venvironment\x18\x05 \x01(\tR\venvironment\"4\n" + + "\n" + + "ExtraField\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"\xdb\x01\n" + + "\x10AuthzCheckConfig\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x1f\n" + + "\vsubject_key\x18\x02 \x01(\tR\n" + + "subjectKey\x12\x16\n" + + "\x06object\x18\x03 \x01(\tR\x06object\x12\x16\n" + + "\x06action\x18\x04 \x01(\tR\x06action\x12\x14\n" + + "\x05audit\x18\x05 \x01(\bR\x05audit\x12H\n" + + "\fextra_fields\x18\x06 \x03(\v2%.workflow.plugins.authz.v1.ExtraFieldR\vextraFields\"\xde\x01\n" + + "\x0fAuthzCheckInput\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x1f\n" + + "\vsubject_key\x18\x02 \x01(\tR\n" + + "subjectKey\x12\x18\n" + + "\asubject\x18\x03 \x01(\tR\asubject\x12\x16\n" + + "\x06object\x18\x04 \x01(\tR\x06object\x12\x16\n" + + "\x06action\x18\x05 \x01(\tR\x06action\x12H\n" + + "\fextra_fields\x18\x06 \x03(\v2%.workflow.plugins.authz.v1.ExtraFieldR\vextraFields\"\x9e\x02\n" + + "\x10AuthzCheckOutput\x12\x18\n" + + "\asubject\x18\x01 \x01(\tR\asubject\x12\x16\n" + + "\x06object\x18\x02 \x01(\tR\x06object\x12\x16\n" + + "\x06action\x18\x03 \x01(\tR\x06action\x12\x18\n" + + "\aallowed\x18\x04 \x01(\bR\aallowed\x12'\n" + + "\x0fresponse_status\x18\x05 \x01(\x05R\x0eresponseStatus\x12#\n" + + "\rresponse_body\x18\x06 \x01(\tR\fresponseBody\x12B\n" + + "\x10response_headers\x18\a \x01(\v2\x17.google.protobuf.StructR\x0fresponseHeaders\x12\x14\n" + + "\x05error\x18d \x01(\tR\x05error\">\n" + + "\x10PolicyRuleConfig\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x12\n" + + "\x04rule\x18\x02 \x03(\tR\x04rule\"=\n" + + "\x0fPolicyRuleInput\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x12\n" + + "\x04rule\x18\x02 \x03(\tR\x04rule\"V\n" + + "\x10PolicyRuleOutput\x12\x18\n" + + "\achanged\x18\x01 \x01(\bR\achanged\x12\x12\n" + + "\x04rule\x18\x02 \x03(\tR\x04rule\x12\x14\n" + + "\x05error\x18d \x01(\tR\x05error\"\x8b\x01\n" + + "\x10RoleAssignConfig\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x16\n" + + "\x06action\x18\x02 \x01(\tR\x06action\x12G\n" + + "\vassignments\x18\x03 \x03(\v2%.workflow.plugins.authz.v1.StringListR\vassignments\"\x8a\x01\n" + + "\x0fRoleAssignInput\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x16\n" + + "\x06action\x18\x02 \x01(\tR\x06action\x12G\n" + + "\vassignments\x18\x03 \x03(\v2%.workflow.plugins.authz.v1.StringListR\vassignments\"\x89\x01\n" + + "\x10RoleAssignOutput\x12\x16\n" + + "\x06action\x18\x01 \x01(\tR\x06action\x12G\n" + + "\vassignments\x18\x02 \x03(\v2%.workflow.plugins.authz.v1.StringListR\vassignments\x12\x14\n" + + "\x05error\x18d \x01(\tR\x05error\"H\n" + + "\x12CapabilitiesConfig\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x1a\n" + + "\bprovider\x18\x02 \x01(\tR\bprovider\"G\n" + + "\x11CapabilitiesInput\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x1a\n" + + "\bprovider\x18\x02 \x01(\tR\bprovider\"\x82\x01\n" + + "\x12CapabilitiesOutput\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x1a\n" + + "\bprovider\x18\x02 \x01(\tR\bprovider\x12\"\n" + + "\fcapabilities\x18\x03 \x03(\tR\fcapabilities\x12\x14\n" + + "\x05error\x18d \x01(\tR\x05error\"}\n" + + "\x19SubjectObjectActionConfig\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x18\n" + + "\asubject\x18\x02 \x01(\tR\asubject\x12\x16\n" + + "\x06object\x18\x03 \x01(\tR\x06object\x12\x16\n" + + "\x06action\x18\x04 \x01(\tR\x06action\"|\n" + + "\x18SubjectObjectActionInput\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x18\n" + + "\asubject\x18\x02 \x01(\tR\asubject\x12\x16\n" + + "\x06object\x18\x03 \x01(\tR\x06object\x12\x16\n" + + "\x06action\x18\x04 \x01(\tR\x06action\"\xaf\x01\n" + + "\x19SubjectObjectActionOutput\x12\x18\n" + + "\aallowed\x18\x01 \x01(\bR\aallowed\x12\x18\n" + + "\achanged\x18\x02 \x01(\bR\achanged\x12\x18\n" + + "\asubject\x18\x03 \x01(\tR\asubject\x12\x16\n" + + "\x06object\x18\x04 \x01(\tR\x06object\x12\x16\n" + + "\x06action\x18\x05 \x01(\tR\x06action\x12\x14\n" + + "\x05error\x18d \x01(\tR\x05error\"R\n" + + "\n" + + "ListConfig\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x16\n" + + "\x06filter\x18\x02 \x01(\tR\x06filter\x12\x14\n" + + "\x05value\x18\x03 \x01(\tR\x05value\"Q\n" + + "\tListInput\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x16\n" + + "\x06filter\x18\x02 \x01(\tR\x06filter\x12\x14\n" + + "\x05value\x18\x03 \x01(\tR\x05value\"Z\n" + + "\x11GenericStepOutput\x12/\n" + + "\x06output\x18\x01 \x01(\v2\x17.google.protobuf.StructR\x06output\x12\x14\n" + + "\x05error\x18d \x01(\tR\x05error\"v\n" + + "\x0eRelationConfig\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x18\n" + + "\asubject\x18\x02 \x01(\tR\asubject\x12\x1a\n" + + "\brelation\x18\x03 \x01(\tR\brelation\x12\x16\n" + + "\x06object\x18\x04 \x01(\tR\x06object\"u\n" + + "\rRelationInput\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12\x18\n" + + "\asubject\x18\x02 \x01(\tR\asubject\x12\x1a\n" + + "\brelation\x18\x03 \x01(\tR\brelation\x12\x16\n" + + "\x06object\x18\x04 \x01(\tR\x06object\"\x8e\x01\n" + + "\x0eRelationOutput\x12\x18\n" + + "\achanged\x18\x01 \x01(\bR\achanged\x12\x18\n" + + "\asubject\x18\x02 \x01(\tR\asubject\x12\x1a\n" + + "\brelation\x18\x03 \x01(\tR\brelation\x12\x16\n" + + "\x06object\x18\x04 \x01(\tR\x06object\x12\x14\n" + + "\x05error\x18d \x01(\tR\x05error\"[\n" + + "\x10PermitStepConfig\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12/\n" + + "\x06values\x18\x02 \x01(\v2\x17.google.protobuf.StructR\x06values\"Z\n" + + "\x0fPermitStepInput\x12\x16\n" + + "\x06module\x18\x01 \x01(\tR\x06module\x12/\n" + + "\x06values\x18\x02 \x01(\v2\x17.google.protobuf.StructR\x06valuesBAZ?github.com/GoCodeAlone/workflow-plugin-authz/internal/contractsb\x06proto3" + +var ( + file_internal_contracts_authz_proto_rawDescOnce sync.Once + file_internal_contracts_authz_proto_rawDescData []byte +) + +func file_internal_contracts_authz_proto_rawDescGZIP() []byte { + file_internal_contracts_authz_proto_rawDescOnce.Do(func() { + file_internal_contracts_authz_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_internal_contracts_authz_proto_rawDesc), len(file_internal_contracts_authz_proto_rawDesc))) + }) + return file_internal_contracts_authz_proto_rawDescData +} + +var file_internal_contracts_authz_proto_msgTypes = make([]protoimpl.MessageInfo, 29) +var file_internal_contracts_authz_proto_goTypes = []any{ + (*StringList)(nil), // 0: workflow.plugins.authz.v1.StringList + (*AdapterConfig)(nil), // 1: workflow.plugins.authz.v1.AdapterConfig + (*WatcherConfig)(nil), // 2: workflow.plugins.authz.v1.WatcherConfig + (*CasbinModuleConfig)(nil), // 3: workflow.plugins.authz.v1.CasbinModuleConfig + (*PermitModuleConfig)(nil), // 4: workflow.plugins.authz.v1.PermitModuleConfig + (*ExtraField)(nil), // 5: workflow.plugins.authz.v1.ExtraField + (*AuthzCheckConfig)(nil), // 6: workflow.plugins.authz.v1.AuthzCheckConfig + (*AuthzCheckInput)(nil), // 7: workflow.plugins.authz.v1.AuthzCheckInput + (*AuthzCheckOutput)(nil), // 8: workflow.plugins.authz.v1.AuthzCheckOutput + (*PolicyRuleConfig)(nil), // 9: workflow.plugins.authz.v1.PolicyRuleConfig + (*PolicyRuleInput)(nil), // 10: workflow.plugins.authz.v1.PolicyRuleInput + (*PolicyRuleOutput)(nil), // 11: workflow.plugins.authz.v1.PolicyRuleOutput + (*RoleAssignConfig)(nil), // 12: workflow.plugins.authz.v1.RoleAssignConfig + (*RoleAssignInput)(nil), // 13: workflow.plugins.authz.v1.RoleAssignInput + (*RoleAssignOutput)(nil), // 14: workflow.plugins.authz.v1.RoleAssignOutput + (*CapabilitiesConfig)(nil), // 15: workflow.plugins.authz.v1.CapabilitiesConfig + (*CapabilitiesInput)(nil), // 16: workflow.plugins.authz.v1.CapabilitiesInput + (*CapabilitiesOutput)(nil), // 17: workflow.plugins.authz.v1.CapabilitiesOutput + (*SubjectObjectActionConfig)(nil), // 18: workflow.plugins.authz.v1.SubjectObjectActionConfig + (*SubjectObjectActionInput)(nil), // 19: workflow.plugins.authz.v1.SubjectObjectActionInput + (*SubjectObjectActionOutput)(nil), // 20: workflow.plugins.authz.v1.SubjectObjectActionOutput + (*ListConfig)(nil), // 21: workflow.plugins.authz.v1.ListConfig + (*ListInput)(nil), // 22: workflow.plugins.authz.v1.ListInput + (*GenericStepOutput)(nil), // 23: workflow.plugins.authz.v1.GenericStepOutput + (*RelationConfig)(nil), // 24: workflow.plugins.authz.v1.RelationConfig + (*RelationInput)(nil), // 25: workflow.plugins.authz.v1.RelationInput + (*RelationOutput)(nil), // 26: workflow.plugins.authz.v1.RelationOutput + (*PermitStepConfig)(nil), // 27: workflow.plugins.authz.v1.PermitStepConfig + (*PermitStepInput)(nil), // 28: workflow.plugins.authz.v1.PermitStepInput + (*structpb.Struct)(nil), // 29: google.protobuf.Struct +} +var file_internal_contracts_authz_proto_depIdxs = []int32{ + 0, // 0: workflow.plugins.authz.v1.CasbinModuleConfig.policies:type_name -> workflow.plugins.authz.v1.StringList + 0, // 1: workflow.plugins.authz.v1.CasbinModuleConfig.role_assignments:type_name -> workflow.plugins.authz.v1.StringList + 1, // 2: workflow.plugins.authz.v1.CasbinModuleConfig.adapter:type_name -> workflow.plugins.authz.v1.AdapterConfig + 2, // 3: workflow.plugins.authz.v1.CasbinModuleConfig.watcher:type_name -> workflow.plugins.authz.v1.WatcherConfig + 5, // 4: workflow.plugins.authz.v1.AuthzCheckConfig.extra_fields:type_name -> workflow.plugins.authz.v1.ExtraField + 5, // 5: workflow.plugins.authz.v1.AuthzCheckInput.extra_fields:type_name -> workflow.plugins.authz.v1.ExtraField + 29, // 6: workflow.plugins.authz.v1.AuthzCheckOutput.response_headers:type_name -> google.protobuf.Struct + 0, // 7: workflow.plugins.authz.v1.RoleAssignConfig.assignments:type_name -> workflow.plugins.authz.v1.StringList + 0, // 8: workflow.plugins.authz.v1.RoleAssignInput.assignments:type_name -> workflow.plugins.authz.v1.StringList + 0, // 9: workflow.plugins.authz.v1.RoleAssignOutput.assignments:type_name -> workflow.plugins.authz.v1.StringList + 29, // 10: workflow.plugins.authz.v1.GenericStepOutput.output:type_name -> google.protobuf.Struct + 29, // 11: workflow.plugins.authz.v1.PermitStepConfig.values:type_name -> google.protobuf.Struct + 29, // 12: workflow.plugins.authz.v1.PermitStepInput.values:type_name -> google.protobuf.Struct + 13, // [13:13] is the sub-list for method output_type + 13, // [13:13] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name +} + +func init() { file_internal_contracts_authz_proto_init() } +func file_internal_contracts_authz_proto_init() { + if File_internal_contracts_authz_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_internal_contracts_authz_proto_rawDesc), len(file_internal_contracts_authz_proto_rawDesc)), + NumEnums: 0, + NumMessages: 29, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_internal_contracts_authz_proto_goTypes, + DependencyIndexes: file_internal_contracts_authz_proto_depIdxs, + MessageInfos: file_internal_contracts_authz_proto_msgTypes, + }.Build() + File_internal_contracts_authz_proto = out.File + file_internal_contracts_authz_proto_goTypes = nil + file_internal_contracts_authz_proto_depIdxs = nil +} diff --git a/internal/contracts/authz.proto b/internal/contracts/authz.proto new file mode 100644 index 0000000..ac3076d --- /dev/null +++ b/internal/contracts/authz.proto @@ -0,0 +1,200 @@ +syntax = "proto3"; + +package workflow.plugins.authz.v1; + +import "google/protobuf/struct.proto"; + +option go_package = "github.com/GoCodeAlone/workflow-plugin-authz/internal/contracts"; + +message StringList { + repeated string values = 1; +} + +message AdapterConfig { + string type = 1; + string path = 2; + string driver = 3; + string dsn = 4; + string table_name = 5; + string tenant = 6; + string filter_field = 7; + string filter_value = 8; +} + +message WatcherConfig { + string type = 1; + string interval = 2; +} + +message CasbinModuleConfig { + string model = 1; + repeated StringList policies = 2; + repeated StringList role_assignments = 3; + AdapterConfig adapter = 4; + WatcherConfig watcher = 5; +} + +message PermitModuleConfig { + string api_key = 1; + string pdp_url = 2; + string api_url = 3; + string project = 4; + string environment = 5; +} + +message ExtraField { + string key = 1; + string value = 2; +} + +message AuthzCheckConfig { + string module = 1; + string subject_key = 2; + string object = 3; + string action = 4; + bool audit = 5; + repeated ExtraField extra_fields = 6; +} + +message AuthzCheckInput { + string module = 1; + string subject_key = 2; + string subject = 3; + string object = 4; + string action = 5; + repeated ExtraField extra_fields = 6; +} + +message AuthzCheckOutput { + string subject = 1; + string object = 2; + string action = 3; + bool allowed = 4; + int32 response_status = 5; + string response_body = 6; + google.protobuf.Struct response_headers = 7; + string error = 100; +} + +message PolicyRuleConfig { + string module = 1; + repeated string rule = 2; +} + +message PolicyRuleInput { + string module = 1; + repeated string rule = 2; +} + +message PolicyRuleOutput { + bool changed = 1; + repeated string rule = 2; + string error = 100; +} + +message RoleAssignConfig { + string module = 1; + string action = 2; + repeated StringList assignments = 3; +} + +message RoleAssignInput { + string module = 1; + string action = 2; + repeated StringList assignments = 3; +} + +message RoleAssignOutput { + string action = 1; + repeated StringList assignments = 2; + string error = 100; +} + +message CapabilitiesConfig { + string module = 1; + string provider = 2; +} + +message CapabilitiesInput { + string module = 1; + string provider = 2; +} + +message CapabilitiesOutput { + string module = 1; + string provider = 2; + repeated string capabilities = 3; + string error = 100; +} + +message SubjectObjectActionConfig { + string module = 1; + string subject = 2; + string object = 3; + string action = 4; +} + +message SubjectObjectActionInput { + string module = 1; + string subject = 2; + string object = 3; + string action = 4; +} + +message SubjectObjectActionOutput { + bool allowed = 1; + bool changed = 2; + string subject = 3; + string object = 4; + string action = 5; + string error = 100; +} + +message ListConfig { + string module = 1; + string filter = 2; + string value = 3; +} + +message ListInput { + string module = 1; + string filter = 2; + string value = 3; +} + +message GenericStepOutput { + google.protobuf.Struct output = 1; + string error = 100; +} + +message RelationConfig { + string module = 1; + string subject = 2; + string relation = 3; + string object = 4; +} + +message RelationInput { + string module = 1; + string subject = 2; + string relation = 3; + string object = 4; +} + +message RelationOutput { + bool changed = 1; + string subject = 2; + string relation = 3; + string object = 4; + string error = 100; +} + +message PermitStepConfig { + string module = 1; + google.protobuf.Struct values = 2; +} + +message PermitStepInput { + string module = 1; + google.protobuf.Struct values = 2; +} diff --git a/internal/plugin.go b/internal/plugin.go index 0f4b0bb..135ee56 100644 --- a/internal/plugin.go +++ b/internal/plugin.go @@ -5,7 +5,13 @@ package internal import ( "fmt" + "github.com/GoCodeAlone/workflow-plugin-authz/internal/contracts" + pb "github.com/GoCodeAlone/workflow/plugin/external/proto" sdk "github.com/GoCodeAlone/workflow/plugin/external/sdk" + "google.golang.org/protobuf/reflect/protodesc" + "google.golang.org/protobuf/types/descriptorpb" + "google.golang.org/protobuf/types/known/anypb" + "google.golang.org/protobuf/types/known/structpb" ) // Version is set at build time via -ldflags @@ -15,6 +21,26 @@ var Version = "dev" // authzPlugin implements sdk.PluginProvider, sdk.ModuleProvider, and sdk.StepProvider. type authzPlugin struct{} +var moduleTypes = []string{"authz.casbin", "permit.provider"} + +var casbinStepTypes = []string{ + "step.authz_check_casbin", + "step.authz_add_policy", + "step.authz_remove_policy", + "step.authz_role_assign", + "step.authz_capabilities", + "step.authz_acl_grant", + "step.authz_acl_revoke", + "step.authz_acl_check", + "step.authz_acl_list", + "step.authz_abac_check", + "step.authz_abac_add_policy", + "step.authz_rebac_add_relation", + "step.authz_rebac_remove_relation", + "step.authz_rebac_check", + "step.authz_rebac_list_relations", +} + // NewAuthzPlugin returns a new authzPlugin instance. func NewAuthzPlugin() sdk.PluginProvider { return &authzPlugin{} @@ -32,7 +58,12 @@ func (p *authzPlugin) Manifest() sdk.PluginManifest { // ModuleTypes returns the module type names this plugin provides. func (p *authzPlugin) ModuleTypes() []string { - return []string{"authz.casbin", "permit.provider"} + return append([]string(nil), moduleTypes...) +} + +// TypedModuleTypes returns the module type names this plugin provides as strict protobuf contracts. +func (p *authzPlugin) TypedModuleTypes() []string { + return append([]string(nil), moduleTypes...) } // CreateModule creates a module instance of the given type and registers it @@ -57,29 +88,38 @@ func (p *authzPlugin) CreateModule(typeName, name string, config map[string]any) } } +// CreateTypedModule creates a protobuf-backed module instance. +func (p *authzPlugin) CreateTypedModule(typeName, name string, config *anypb.Any) (sdk.ModuleInstance, error) { + switch typeName { + case "authz.casbin": + factory := sdk.NewTypedModuleFactory(typeName, &contracts.CasbinModuleConfig{}, func(name string, cfg *contracts.CasbinModuleConfig) (sdk.ModuleInstance, error) { + m, err := newCasbinModule(name, casbinModuleConfigToMap(cfg)) + if err != nil { + return nil, err + } + RegisterModule(m) + return m, nil + }) + return factory.CreateTypedModule(typeName, name, config) + case "permit.provider": + factory := sdk.NewTypedModuleFactory(typeName, &contracts.PermitModuleConfig{}, func(name string, cfg *contracts.PermitModuleConfig) (sdk.ModuleInstance, error) { + return newPermitModule(name, permitModuleConfigToMap(cfg)) + }) + return factory.CreateTypedModule(typeName, name, config) + default: + return nil, fmt.Errorf("authz plugin: unknown module type %q", typeName) + } +} + // StepTypes returns the step type names this plugin provides. func (p *authzPlugin) StepTypes() []string { - casbinSteps := []string{ - "step.authz_check_casbin", - "step.authz_add_policy", - "step.authz_remove_policy", - "step.authz_role_assign", - "step.authz_capabilities", - // ACL steps - "step.authz_acl_grant", - "step.authz_acl_revoke", - "step.authz_acl_check", - "step.authz_acl_list", - // ABAC steps - "step.authz_abac_check", - "step.authz_abac_add_policy", - // ReBAC steps - "step.authz_rebac_add_relation", - "step.authz_rebac_remove_relation", - "step.authz_rebac_check", - "step.authz_rebac_list_relations", - } - return append(casbinSteps, permitStepTypes()...) + stepTypes := append([]string(nil), casbinStepTypes...) + return append(stepTypes, permitStepTypes()...) +} + +// TypedStepTypes returns the step type names this plugin provides as strict protobuf contracts. +func (p *authzPlugin) TypedStepTypes() []string { + return p.StepTypes() } // CreateStep creates a step instance of the given type. @@ -126,3 +166,105 @@ func (p *authzPlugin) CreateStep(typeName, name string, config map[string]any) ( return nil, fmt.Errorf("authz plugin: unknown step type %q", typeName) } } + +// CreateTypedStep creates a protobuf-backed step instance. +func (p *authzPlugin) CreateTypedStep(typeName, name string, config *anypb.Any) (sdk.StepInstance, error) { + switch typeName { + case "step.authz_check_casbin": + return sdk.NewTypedStepFactory(typeName, &contracts.AuthzCheckConfig{}, &contracts.AuthzCheckInput{}, typedAuthzCheck(globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_add_policy": + return sdk.NewTypedStepFactory(typeName, &contracts.PolicyRuleConfig{}, &contracts.PolicyRuleInput{}, typedAuthzAddPolicy(globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_remove_policy": + return sdk.NewTypedStepFactory(typeName, &contracts.PolicyRuleConfig{}, &contracts.PolicyRuleInput{}, typedAuthzRemovePolicy(globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_role_assign": + return sdk.NewTypedStepFactory(typeName, &contracts.RoleAssignConfig{}, &contracts.RoleAssignInput{}, typedAuthzRoleAssign(globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_capabilities": + return sdk.NewTypedStepFactory(typeName, &contracts.CapabilitiesConfig{}, &contracts.CapabilitiesInput{}, typedAuthzCapabilities(globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_acl_grant": + return sdk.NewTypedStepFactory(typeName, &contracts.SubjectObjectActionConfig{}, &contracts.SubjectObjectActionInput{}, typedSubjectObjectAction(wrapStepConstructor(newAuthzACLGrantStep), globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_acl_revoke": + return sdk.NewTypedStepFactory(typeName, &contracts.SubjectObjectActionConfig{}, &contracts.SubjectObjectActionInput{}, typedSubjectObjectAction(wrapStepConstructor(newAuthzACLRevokeStep), globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_acl_check": + return sdk.NewTypedStepFactory(typeName, &contracts.SubjectObjectActionConfig{}, &contracts.SubjectObjectActionInput{}, typedSubjectObjectAction(wrapStepConstructor(newAuthzACLCheckStep), globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_acl_list": + return sdk.NewTypedStepFactory(typeName, &contracts.ListConfig{}, &contracts.ListInput{}, typedList(wrapStepConstructor(newAuthzACLListStep), globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_abac_check": + return sdk.NewTypedStepFactory(typeName, &contracts.SubjectObjectActionConfig{}, &contracts.SubjectObjectActionInput{}, typedSubjectObjectAction(wrapStepConstructor(newAuthzABACCheckStep), globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_abac_add_policy": + return sdk.NewTypedStepFactory(typeName, &contracts.PolicyRuleConfig{}, &contracts.PolicyRuleInput{}, typedAuthzABACAddPolicy(globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_rebac_add_relation": + return sdk.NewTypedStepFactory(typeName, &contracts.RelationConfig{}, &contracts.RelationInput{}, typedRelation(wrapStepConstructor(newAuthzReBACAddRelationStep), globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_rebac_remove_relation": + return sdk.NewTypedStepFactory(typeName, &contracts.RelationConfig{}, &contracts.RelationInput{}, typedRelation(wrapStepConstructor(newAuthzReBACRemoveRelationStep), globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_rebac_check": + return sdk.NewTypedStepFactory(typeName, &contracts.SubjectObjectActionConfig{}, &contracts.SubjectObjectActionInput{}, typedSubjectObjectAction(wrapStepConstructor(newAuthzReBACCheckStep), globalRegistry)).CreateTypedStep(typeName, name, config) + case "step.authz_rebac_list_relations": + return sdk.NewTypedStepFactory(typeName, &contracts.ListConfig{}, &contracts.ListInput{}, typedList(wrapStepConstructor(newAuthzReBACListRelationsStep), globalRegistry)).CreateTypedStep(typeName, name, config) + default: + if isPermitStepType(typeName) { + return sdk.NewTypedStepFactory(typeName, &contracts.PermitStepConfig{}, &contracts.PermitStepInput{}, typedPermitStep(typeName)).CreateTypedStep(typeName, name, config) + } + return nil, fmt.Errorf("authz plugin: unknown step type %q", typeName) + } +} + +// ContractRegistry returns the protobuf descriptors and strict contract declarations. +func (p *authzPlugin) ContractRegistry() *pb.ContractRegistry { + contractsList := []*pb.ContractDescriptor{ + moduleContract("authz.casbin", "CasbinModuleConfig"), + moduleContract("permit.provider", "PermitModuleConfig"), + stepContract("step.authz_check_casbin", "AuthzCheckConfig", "AuthzCheckInput", "AuthzCheckOutput"), + stepContract("step.authz_add_policy", "PolicyRuleConfig", "PolicyRuleInput", "PolicyRuleOutput"), + stepContract("step.authz_remove_policy", "PolicyRuleConfig", "PolicyRuleInput", "PolicyRuleOutput"), + stepContract("step.authz_role_assign", "RoleAssignConfig", "RoleAssignInput", "RoleAssignOutput"), + stepContract("step.authz_capabilities", "CapabilitiesConfig", "CapabilitiesInput", "CapabilitiesOutput"), + stepContract("step.authz_acl_grant", "SubjectObjectActionConfig", "SubjectObjectActionInput", "SubjectObjectActionOutput"), + stepContract("step.authz_acl_revoke", "SubjectObjectActionConfig", "SubjectObjectActionInput", "SubjectObjectActionOutput"), + stepContract("step.authz_acl_check", "SubjectObjectActionConfig", "SubjectObjectActionInput", "SubjectObjectActionOutput"), + stepContract("step.authz_acl_list", "ListConfig", "ListInput", "GenericStepOutput"), + stepContract("step.authz_abac_check", "SubjectObjectActionConfig", "SubjectObjectActionInput", "SubjectObjectActionOutput"), + stepContract("step.authz_abac_add_policy", "PolicyRuleConfig", "PolicyRuleInput", "PolicyRuleOutput"), + stepContract("step.authz_rebac_add_relation", "RelationConfig", "RelationInput", "RelationOutput"), + stepContract("step.authz_rebac_remove_relation", "RelationConfig", "RelationInput", "RelationOutput"), + stepContract("step.authz_rebac_check", "SubjectObjectActionConfig", "SubjectObjectActionInput", "SubjectObjectActionOutput"), + stepContract("step.authz_rebac_list_relations", "ListConfig", "ListInput", "GenericStepOutput"), + } + for _, stepType := range permitStepTypes() { + contractsList = append(contractsList, stepContract(stepType, "PermitStepConfig", "PermitStepInput", "GenericStepOutput")) + } + return &pb.ContractRegistry{ + FileDescriptorSet: &descriptorpb.FileDescriptorSet{File: []*descriptorpb.FileDescriptorProto{ + protodesc.ToFileDescriptorProto(structpb.File_google_protobuf_struct_proto), + protodesc.ToFileDescriptorProto(contracts.File_internal_contracts_authz_proto), + }}, + Contracts: contractsList, + } +} + +func moduleContract(moduleType, configMessage string) *pb.ContractDescriptor { + const pkg = "workflow.plugins.authz.v1." + return &pb.ContractDescriptor{ + Kind: pb.ContractKind_CONTRACT_KIND_MODULE, + ModuleType: moduleType, + ConfigMessage: pkg + configMessage, + Mode: pb.ContractMode_CONTRACT_MODE_STRICT_PROTO, + } +} + +func stepContract(stepType, configMessage, inputMessage, outputMessage string) *pb.ContractDescriptor { + const pkg = "workflow.plugins.authz.v1." + return &pb.ContractDescriptor{ + Kind: pb.ContractKind_CONTRACT_KIND_STEP, + StepType: stepType, + ConfigMessage: pkg + configMessage, + InputMessage: pkg + inputMessage, + OutputMessage: pkg + outputMessage, + Mode: pb.ContractMode_CONTRACT_MODE_STRICT_PROTO, + } +} + +func wrapStepConstructor[T sdk.StepInstance](ctor func(string, map[string]any) (T, error)) func(string, map[string]any) (sdk.StepInstance, error) { + return func(name string, config map[string]any) (sdk.StepInstance, error) { + return ctor(name, config) + } +} diff --git a/internal/plugin_contracts_test.go b/internal/plugin_contracts_test.go new file mode 100644 index 0000000..bc78357 --- /dev/null +++ b/internal/plugin_contracts_test.go @@ -0,0 +1,246 @@ +package internal + +import ( + "context" + "encoding/json" + "os" + "path/filepath" + "runtime" + "testing" + + "github.com/GoCodeAlone/workflow-plugin-authz/internal/contracts" + pb "github.com/GoCodeAlone/workflow/plugin/external/proto" + sdk "github.com/GoCodeAlone/workflow/plugin/external/sdk" + "google.golang.org/protobuf/reflect/protodesc" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/types/known/anypb" +) + +func TestPluginImplementsStrictContractProviders(t *testing.T) { + provider := NewAuthzPlugin() + if _, ok := provider.(sdk.TypedModuleProvider); !ok { + t.Fatal("expected TypedModuleProvider") + } + if _, ok := provider.(sdk.TypedStepProvider); !ok { + t.Fatal("expected TypedStepProvider") + } + if _, ok := provider.(sdk.ContractProvider); !ok { + t.Fatal("expected ContractProvider") + } +} + +func TestContractRegistryDeclaresStrictContracts(t *testing.T) { + provider := NewAuthzPlugin().(sdk.ContractProvider) + registry := provider.ContractRegistry() + if registry == nil { + t.Fatal("expected contract registry") + } + if registry.FileDescriptorSet == nil || len(registry.FileDescriptorSet.File) == 0 { + t.Fatal("expected file descriptor set") + } + files, err := protodesc.NewFiles(registry.FileDescriptorSet) + if err != nil { + t.Fatalf("descriptor set: %v", err) + } + + manifestContracts := loadManifestContracts(t) + contractsByKey := make(map[string]*pb.ContractDescriptor, len(registry.Contracts)) + for _, contract := range registry.Contracts { + if contract.Mode != pb.ContractMode_CONTRACT_MODE_STRICT_PROTO { + t.Fatalf("%s mode = %s, want strict proto", contractKey(contract), contract.Mode) + } + key := contractKey(contract) + if _, exists := contractsByKey[key]; exists { + t.Fatalf("duplicate runtime contract %q", key) + } + contractsByKey[key] = contract + for _, name := range []string{contract.ConfigMessage, contract.InputMessage, contract.OutputMessage} { + if name == "" { + continue + } + if _, err := files.FindDescriptorByName(protoreflect.FullName(name)); err != nil { + t.Fatalf("%s references unknown message %s: %v", key, name, err) + } + } + want, ok := manifestContracts[key] + if !ok { + t.Fatalf("%s missing from plugin.contracts.json", key) + } + if want.ConfigMessage != contract.ConfigMessage || want.InputMessage != contract.InputMessage || want.OutputMessage != contract.OutputMessage { + t.Fatalf("%s manifest contract = %#v, runtime = %#v", key, want, contract) + } + } + if len(contractsByKey) != len(manifestContracts) { + t.Fatalf("runtime contract count = %d, manifest = %d", len(contractsByKey), len(manifestContracts)) + } +} + +func TestTypeListsAreDefensiveCopies(t *testing.T) { + provider := NewAuthzPlugin() + moduleProvider := provider.(sdk.ModuleProvider) + typedModuleProvider := provider.(sdk.TypedModuleProvider) + stepProvider := provider.(sdk.StepProvider) + typedStepProvider := provider.(sdk.TypedStepProvider) + + moduleTypes := moduleProvider.ModuleTypes() + moduleTypes[0] = "mutated" + if got := moduleProvider.ModuleTypes()[0]; got == "mutated" { + t.Fatal("ModuleTypes exposed mutable package-level slice") + } + + typedModuleTypes := typedModuleProvider.TypedModuleTypes() + typedModuleTypes[0] = "mutated" + if got := typedModuleProvider.TypedModuleTypes()[0]; got == "mutated" { + t.Fatal("TypedModuleTypes exposed mutable package-level slice") + } + + stepTypes := stepProvider.StepTypes() + stepTypes[0] = "mutated" + if got := stepProvider.StepTypes()[0]; got == "mutated" { + t.Fatal("StepTypes exposed mutable package-level slice") + } + + typedStepTypes := typedStepProvider.TypedStepTypes() + typedStepTypes[0] = "mutated" + if got := typedStepProvider.TypedStepTypes()[0]; got == "mutated" { + t.Fatal("TypedStepTypes exposed mutable package-level slice") + } +} + +func TestTypedProvidersValidateConfig(t *testing.T) { + provider := NewAuthzPlugin().(interface { + sdk.TypedModuleProvider + sdk.TypedStepProvider + }) + + moduleConfig, err := anypb.New(&contracts.CasbinModuleConfig{Model: testModel}) + if err != nil { + t.Fatalf("pack module config: %v", err) + } + if _, err := provider.CreateTypedModule("authz.casbin", "authz", moduleConfig); err != nil { + t.Fatalf("CreateTypedModule: %v", err) + } + + stepConfig, err := anypb.New(&contracts.AuthzCheckConfig{Object: "/docs", Action: "read"}) + if err != nil { + t.Fatalf("pack step config: %v", err) + } + if _, err := provider.CreateTypedModule("authz.casbin", "authz", stepConfig); err == nil { + t.Fatal("CreateTypedModule accepted wrong typed config") + } + if _, err := provider.CreateTypedStep("step.authz_check_casbin", "check", stepConfig); err != nil { + t.Fatalf("CreateTypedStep: %v", err) + } + if _, err := provider.CreateTypedStep("step.authz_check_casbin", "check", moduleConfig); err == nil { + t.Fatal("CreateTypedStep accepted wrong typed config") + } +} + +func TestTypedAddPolicyInputOverridesStaticConfigAndStaysInModuleBoundary(t *testing.T) { + mod := buildModule(t, nil, nil) + reg := &testRegistry{mod: mod} + + result, err := typedAuthzAddPolicy(reg)(context.Background(), sdk.TypedStepRequest[*contracts.PolicyRuleConfig, *contracts.PolicyRuleInput]{ + Config: &contracts.PolicyRuleConfig{ + Module: "authz", + Rule: []string{"static-role", "/static", "read"}, + }, + Input: &contracts.PolicyRuleInput{ + Rule: []string{"runtime-role", "/runtime", "write"}, + }, + }) + if err != nil { + t.Fatalf("typedAuthzAddPolicy: %v", err) + } + if result == nil || result.Output == nil { + t.Fatal("expected typed output") + } + if !result.Output.GetChanged() { + t.Fatal("expected policy to be added") + } + + allowed, err := mod.Enforce("runtime-role", "/runtime", "write") + if err != nil { + t.Fatalf("runtime Enforce: %v", err) + } + if !allowed { + t.Fatal("expected runtime input policy to be added") + } + allowed, err = mod.Enforce("static-role", "/static", "read") + if err != nil { + t.Fatalf("static Enforce: %v", err) + } + if allowed { + t.Fatal("static config policy should not be added when typed input supplies a rule") + } +} + +type manifestContract struct { + Mode string `json:"mode"` + ConfigMessage string `json:"config"` + InputMessage string `json:"input"` + OutputMessage string `json:"output"` +} + +func loadManifestContracts(t *testing.T) map[string]manifestContract { + t.Helper() + _, file, _, ok := runtime.Caller(0) + if !ok { + t.Fatal("runtime.Caller failed") + } + data, err := os.ReadFile(filepath.Join(filepath.Dir(file), "..", "plugin.contracts.json")) + if err != nil { + t.Fatalf("read plugin.contracts.json: %v", err) + } + var manifest struct { + Version string `json:"version"` + Contracts []struct { + Kind string `json:"kind"` + Type string `json:"type"` + ServiceName string `json:"serviceName"` + Method string `json:"method"` + manifestContract + } `json:"contracts"` + } + if err := json.Unmarshal(data, &manifest); err != nil { + t.Fatalf("parse plugin.contracts.json: %v", err) + } + if manifest.Version != "v1" { + t.Fatalf("plugin.contracts.json version = %q, want v1", manifest.Version) + } + out := make(map[string]manifestContract, len(manifest.Contracts)) + for _, contract := range manifest.Contracts { + if contract.Mode != "strict" { + t.Fatalf("%s mode = %q, want strict", contract.Type, contract.Mode) + } + var key string + switch contract.Kind { + case "module": + key = "module:" + contract.Type + case "step": + key = "step:" + contract.Type + case "service_method": + key = "service:" + contract.ServiceName + "/" + contract.Method + default: + t.Fatalf("unexpected contract kind %q in plugin.contracts.json", contract.Kind) + } + if _, exists := out[key]; exists { + t.Fatalf("duplicate contract %q in plugin.contracts.json", key) + } + out[key] = contract.manifestContract + } + return out +} + +func contractKey(contract *pb.ContractDescriptor) string { + switch contract.Kind { + case pb.ContractKind_CONTRACT_KIND_MODULE: + return "module:" + contract.ModuleType + case pb.ContractKind_CONTRACT_KIND_STEP: + return "step:" + contract.StepType + case pb.ContractKind_CONTRACT_KIND_SERVICE: + return "service:" + contract.ServiceName + "/" + contract.Method + default: + return contract.Kind.String() + } +} diff --git a/internal/step_permit_registry.go b/internal/step_permit_registry.go index db8cda2..572643b 100644 --- a/internal/step_permit_registry.go +++ b/internal/step_permit_registry.go @@ -2,6 +2,7 @@ package internal import ( "fmt" + "sort" sdk "github.com/GoCodeAlone/workflow/plugin/external/sdk" ) @@ -133,12 +134,18 @@ func createPermitStep(typeName, name string, config map[string]any) (sdk.StepIns return ctor(name, config) } +func isPermitStepType(typeName string) bool { + _, ok := permitStepConstructors[typeName] + return ok +} + // permitStepTypes returns all registered permit step type names. func permitStepTypes() []string { types := make([]string, 0, len(permitStepConstructors)) for k := range permitStepConstructors { types = append(types, k) } + sort.Strings(types) return types } diff --git a/internal/typed.go b/internal/typed.go new file mode 100644 index 0000000..19df67f --- /dev/null +++ b/internal/typed.go @@ -0,0 +1,621 @@ +package internal + +import ( + "context" + "fmt" + + "github.com/GoCodeAlone/workflow-plugin-authz/internal/contracts" + sdk "github.com/GoCodeAlone/workflow/plugin/external/sdk" + "google.golang.org/protobuf/types/known/structpb" +) + +func casbinModuleConfigToMap(cfg *contracts.CasbinModuleConfig) map[string]any { + if cfg == nil { + return nil + } + out := compactMap(map[string]any{ + "model": cfg.GetModel(), + }) + if policies := stringListsToAny(cfg.GetPolicies()); len(policies) > 0 { + out["policies"] = policies + } + if assignments := stringListsToAny(cfg.GetRoleAssignments()); len(assignments) > 0 { + out["roleAssignments"] = assignments + } + if adapter := cfg.GetAdapter(); adapter != nil { + out["adapter"] = compactMap(map[string]any{ + "type": adapter.GetType(), + "path": adapter.GetPath(), + "driver": adapter.GetDriver(), + "dsn": adapter.GetDsn(), + "table_name": adapter.GetTableName(), + "tenant": adapter.GetTenant(), + "filter_field": adapter.GetFilterField(), + "filter_value": adapter.GetFilterValue(), + }) + } + if watcher := cfg.GetWatcher(); watcher != nil { + out["watcher"] = compactMap(map[string]any{ + "type": watcher.GetType(), + "interval": watcher.GetInterval(), + }) + } + return out +} + +func permitModuleConfigToMap(cfg *contracts.PermitModuleConfig) map[string]any { + if cfg == nil { + return nil + } + return compactMap(map[string]any{ + "apiKey": cfg.GetApiKey(), + "pdpUrl": cfg.GetPdpUrl(), + "apiUrl": cfg.GetApiUrl(), + "project": cfg.GetProject(), + "environment": cfg.GetEnvironment(), + }) +} + +func typedAuthzCheck(registry moduleRegistry) sdk.TypedStepHandler[*contracts.AuthzCheckConfig, *contracts.AuthzCheckInput, *contracts.AuthzCheckOutput] { + return func(ctx context.Context, req sdk.TypedStepRequest[*contracts.AuthzCheckConfig, *contracts.AuthzCheckInput]) (*sdk.TypedStepResult[*contracts.AuthzCheckOutput], error) { + cfg := authzCheckConfigToMap(req.Config) + cfg = mergeStringFields(cfg, authzCheckInputToMap(req.Input)) + step, err := newAuthzCheckStep("typed", cfg) + if err != nil { + return nil, err + } + step.registry = registry + current := copyMap(req.Current) + if subject := req.Input.GetSubject(); subject != "" { + subjectKey := step.subjectKey + current[subjectKey] = subject + } + result, err := step.Execute(ctx, req.TriggerData, req.StepOutputs, current, req.Metadata, nil) + if err != nil { + return nil, err + } + return &sdk.TypedStepResult[*contracts.AuthzCheckOutput]{Output: authzCheckOutputFromMap(result.Output), StopPipeline: result.StopPipeline}, nil + } +} + +func typedAuthzAddPolicy(registry moduleRegistry) sdk.TypedStepHandler[*contracts.PolicyRuleConfig, *contracts.PolicyRuleInput, *contracts.PolicyRuleOutput] { + return typedPolicyRule(registry, wrapStepConstructor(newAuthzAddPolicyStep), "authz_policy_added") +} + +func typedAuthzRemovePolicy(registry moduleRegistry) sdk.TypedStepHandler[*contracts.PolicyRuleConfig, *contracts.PolicyRuleInput, *contracts.PolicyRuleOutput] { + return typedPolicyRule(registry, wrapStepConstructor(newAuthzRemovePolicyStep), "authz_policy_removed") +} + +func typedAuthzABACAddPolicy(registry moduleRegistry) sdk.TypedStepHandler[*contracts.PolicyRuleConfig, *contracts.PolicyRuleInput, *contracts.PolicyRuleOutput] { + return typedPolicyRule(registry, wrapStepConstructor(newAuthzABACAddPolicyStep), "policy_added") +} + +func typedPolicyRule(registry moduleRegistry, create func(string, map[string]any) (sdk.StepInstance, error), changedKey string) sdk.TypedStepHandler[*contracts.PolicyRuleConfig, *contracts.PolicyRuleInput, *contracts.PolicyRuleOutput] { + return func(ctx context.Context, req sdk.TypedStepRequest[*contracts.PolicyRuleConfig, *contracts.PolicyRuleInput]) (*sdk.TypedStepResult[*contracts.PolicyRuleOutput], error) { + cfg := mergeStringFields(policyRuleConfigToMap(req.Config), policyRuleInputToMap(req.Input)) + step, err := create("typed", cfg) + if err != nil { + return nil, err + } + switch s := step.(type) { + case *authzAddPolicyStep: + s.registry = registry + case *authzRemovePolicyStep: + s.registry = registry + case *authzABACAddPolicyStep: + s.registry = registry + } + result, err := step.Execute(ctx, req.TriggerData, req.StepOutputs, req.Current, req.Metadata, nil) + if err != nil { + return nil, err + } + return &sdk.TypedStepResult[*contracts.PolicyRuleOutput]{Output: policyRuleOutputFromMap(result.Output, changedKey)}, nil + } +} + +func typedAuthzRoleAssign(registry moduleRegistry) sdk.TypedStepHandler[*contracts.RoleAssignConfig, *contracts.RoleAssignInput, *contracts.RoleAssignOutput] { + return func(ctx context.Context, req sdk.TypedStepRequest[*contracts.RoleAssignConfig, *contracts.RoleAssignInput]) (*sdk.TypedStepResult[*contracts.RoleAssignOutput], error) { + cfg := mergeStringFields(roleAssignConfigToMap(req.Config), roleAssignInputToMap(req.Input)) + step, err := newAuthzRoleAssignStep("typed", cfg) + if err != nil { + return nil, err + } + step.registry = registry + result, err := step.Execute(ctx, req.TriggerData, req.StepOutputs, req.Current, req.Metadata, nil) + if err != nil { + return nil, err + } + return &sdk.TypedStepResult[*contracts.RoleAssignOutput]{Output: roleAssignOutputFromMap(result.Output)}, nil + } +} + +func typedAuthzCapabilities(registry moduleRegistry) sdk.TypedStepHandler[*contracts.CapabilitiesConfig, *contracts.CapabilitiesInput, *contracts.CapabilitiesOutput] { + return func(ctx context.Context, req sdk.TypedStepRequest[*contracts.CapabilitiesConfig, *contracts.CapabilitiesInput]) (*sdk.TypedStepResult[*contracts.CapabilitiesOutput], error) { + cfg := mergeStringFields(capabilitiesConfigToMap(req.Config), capabilitiesInputToMap(req.Input)) + step, err := newAuthzCapabilitiesStep("typed", cfg) + if err != nil { + return nil, err + } + step.registry = registry + result, err := step.Execute(ctx, req.TriggerData, req.StepOutputs, req.Current, req.Metadata, nil) + if err != nil { + return nil, err + } + return &sdk.TypedStepResult[*contracts.CapabilitiesOutput]{Output: capabilitiesOutputFromMap(result.Output)}, nil + } +} + +func typedSubjectObjectAction(create func(string, map[string]any) (sdk.StepInstance, error), registry moduleRegistry) sdk.TypedStepHandler[*contracts.SubjectObjectActionConfig, *contracts.SubjectObjectActionInput, *contracts.SubjectObjectActionOutput] { + return func(ctx context.Context, req sdk.TypedStepRequest[*contracts.SubjectObjectActionConfig, *contracts.SubjectObjectActionInput]) (*sdk.TypedStepResult[*contracts.SubjectObjectActionOutput], error) { + cfg := mergeStringFields(subjectObjectActionConfigToMap(req.Config), subjectObjectActionInputToMap(req.Input)) + step, err := create("typed", cfg) + if err != nil { + return nil, err + } + setStepRegistry(step, registry) + result, err := step.Execute(ctx, req.TriggerData, req.StepOutputs, req.Current, req.Metadata, nil) + if err != nil { + return nil, err + } + return &sdk.TypedStepResult[*contracts.SubjectObjectActionOutput]{Output: subjectObjectActionOutputFromMap(result.Output)}, nil + } +} + +func typedList(create func(string, map[string]any) (sdk.StepInstance, error), registry moduleRegistry) sdk.TypedStepHandler[*contracts.ListConfig, *contracts.ListInput, *contracts.GenericStepOutput] { + return func(ctx context.Context, req sdk.TypedStepRequest[*contracts.ListConfig, *contracts.ListInput]) (*sdk.TypedStepResult[*contracts.GenericStepOutput], error) { + cfg := mergeStringFields(listConfigToMap(req.Config), listInputToMap(req.Input)) + step, err := create("typed", cfg) + if err != nil { + return nil, err + } + setStepRegistry(step, registry) + result, err := step.Execute(ctx, req.TriggerData, req.StepOutputs, req.Current, req.Metadata, nil) + if err != nil { + return nil, err + } + return &sdk.TypedStepResult[*contracts.GenericStepOutput]{Output: genericOutputFromMap(result.Output), StopPipeline: result.StopPipeline}, nil + } +} + +func typedRelation(create func(string, map[string]any) (sdk.StepInstance, error), registry moduleRegistry) sdk.TypedStepHandler[*contracts.RelationConfig, *contracts.RelationInput, *contracts.RelationOutput] { + return func(ctx context.Context, req sdk.TypedStepRequest[*contracts.RelationConfig, *contracts.RelationInput]) (*sdk.TypedStepResult[*contracts.RelationOutput], error) { + cfg := mergeStringFields(relationConfigToMap(req.Config), relationInputToMap(req.Input)) + step, err := create("typed", cfg) + if err != nil { + return nil, err + } + setStepRegistry(step, registry) + result, err := step.Execute(ctx, req.TriggerData, req.StepOutputs, req.Current, req.Metadata, nil) + if err != nil { + return nil, err + } + return &sdk.TypedStepResult[*contracts.RelationOutput]{Output: relationOutputFromMap(result.Output)}, nil + } +} + +func typedPermitStep(typeName string) sdk.TypedStepHandler[*contracts.PermitStepConfig, *contracts.PermitStepInput, *contracts.GenericStepOutput] { + return func(ctx context.Context, req sdk.TypedStepRequest[*contracts.PermitStepConfig, *contracts.PermitStepInput]) (*sdk.TypedStepResult[*contracts.GenericStepOutput], error) { + cfg := permitStepConfigToMap(req.Config) + cfg = mergeStringFields(cfg, permitStepInputToMap(req.Input)) + step, err := createPermitStep(typeName, "typed", cfg) + if err != nil { + return nil, err + } + result, err := step.Execute(ctx, req.TriggerData, req.StepOutputs, req.Current, req.Metadata, cfg) + if err != nil { + return nil, err + } + return &sdk.TypedStepResult[*contracts.GenericStepOutput]{Output: genericOutputFromMap(result.Output), StopPipeline: result.StopPipeline}, nil + } +} + +func setStepRegistry(step sdk.StepInstance, registry moduleRegistry) { + switch s := step.(type) { + case *authzACLGrantStep: + s.registry = registry + case *authzACLRevokeStep: + s.registry = registry + case *authzACLCheckStep: + s.registry = registry + case *authzACLListStep: + s.registry = registry + case *authzABACCheckStep: + s.registry = registry + case *authzReBACAddRelationStep: + s.registry = registry + case *authzReBACRemoveRelationStep: + s.registry = registry + case *authzReBACCheckStep: + s.registry = registry + case *authzReBACListRelationsStep: + s.registry = registry + } +} + +func authzCheckConfigToMap(cfg *contracts.AuthzCheckConfig) map[string]any { + if cfg == nil { + return nil + } + out := compactMap(map[string]any{ + "module": cfg.GetModule(), + "subject_key": cfg.GetSubjectKey(), + "object": cfg.GetObject(), + "action": cfg.GetAction(), + }) + if cfg.GetAudit() { + out["audit"] = true + } + if fields := extraFieldsToAny(cfg.GetExtraFields()); len(fields) > 0 { + out["extra_fields"] = fields + } + return out +} + +func authzCheckInputToMap(input *contracts.AuthzCheckInput) map[string]any { + if input == nil { + return nil + } + out := compactMap(map[string]any{ + "module": input.GetModule(), + "subject_key": input.GetSubjectKey(), + "object": input.GetObject(), + "action": input.GetAction(), + }) + if fields := extraFieldsToAny(input.GetExtraFields()); len(fields) > 0 { + out["extra_fields"] = fields + } + return out +} + +func policyRuleConfigToMap(cfg *contracts.PolicyRuleConfig) map[string]any { + if cfg == nil { + return nil + } + out := compactMap(map[string]any{"module": cfg.GetModule()}) + if len(cfg.GetRule()) > 0 { + out["rule"] = stringsToAny(cfg.GetRule()) + } + return out +} + +func policyRuleInputToMap(input *contracts.PolicyRuleInput) map[string]any { + if input == nil { + return nil + } + out := compactMap(map[string]any{"module": input.GetModule()}) + if len(input.GetRule()) > 0 { + out["rule"] = stringsToAny(input.GetRule()) + } + return out +} + +func roleAssignConfigToMap(cfg *contracts.RoleAssignConfig) map[string]any { + if cfg == nil { + return nil + } + out := compactMap(map[string]any{"module": cfg.GetModule(), "action": cfg.GetAction()}) + if assignments := stringListsToAny(cfg.GetAssignments()); len(assignments) > 0 { + out["assignments"] = assignments + } + return out +} + +func roleAssignInputToMap(input *contracts.RoleAssignInput) map[string]any { + if input == nil { + return nil + } + out := compactMap(map[string]any{"module": input.GetModule(), "action": input.GetAction()}) + if assignments := stringListsToAny(input.GetAssignments()); len(assignments) > 0 { + out["assignments"] = assignments + } + return out +} + +func capabilitiesConfigToMap(cfg *contracts.CapabilitiesConfig) map[string]any { + if cfg == nil { + return nil + } + return compactMap(map[string]any{"module": cfg.GetModule(), "provider": cfg.GetProvider()}) +} + +func capabilitiesInputToMap(input *contracts.CapabilitiesInput) map[string]any { + if input == nil { + return nil + } + return compactMap(map[string]any{"module": input.GetModule(), "provider": input.GetProvider()}) +} + +func subjectObjectActionConfigToMap(cfg *contracts.SubjectObjectActionConfig) map[string]any { + if cfg == nil { + return nil + } + return compactMap(map[string]any{"module": cfg.GetModule(), "subject": cfg.GetSubject(), "object": cfg.GetObject(), "action": cfg.GetAction()}) +} + +func subjectObjectActionInputToMap(input *contracts.SubjectObjectActionInput) map[string]any { + if input == nil { + return nil + } + return compactMap(map[string]any{"module": input.GetModule(), "subject": input.GetSubject(), "object": input.GetObject(), "action": input.GetAction()}) +} + +func listConfigToMap(cfg *contracts.ListConfig) map[string]any { + if cfg == nil { + return nil + } + return compactMap(map[string]any{"module": cfg.GetModule(), "filter": cfg.GetFilter(), "value": cfg.GetValue()}) +} + +func listInputToMap(input *contracts.ListInput) map[string]any { + if input == nil { + return nil + } + return compactMap(map[string]any{"module": input.GetModule(), "filter": input.GetFilter(), "value": input.GetValue()}) +} + +func relationConfigToMap(cfg *contracts.RelationConfig) map[string]any { + if cfg == nil { + return nil + } + return compactMap(map[string]any{"module": cfg.GetModule(), "subject": cfg.GetSubject(), "relation": cfg.GetRelation(), "object": cfg.GetObject()}) +} + +func relationInputToMap(input *contracts.RelationInput) map[string]any { + if input == nil { + return nil + } + return compactMap(map[string]any{"module": input.GetModule(), "subject": input.GetSubject(), "relation": input.GetRelation(), "object": input.GetObject()}) +} + +func permitStepConfigToMap(cfg *contracts.PermitStepConfig) map[string]any { + if cfg == nil { + return nil + } + out := structToMapProto(cfg.GetValues()) + if cfg.GetModule() != "" { + out["module"] = cfg.GetModule() + } + return out +} + +func permitStepInputToMap(input *contracts.PermitStepInput) map[string]any { + if input == nil { + return nil + } + out := structToMapProto(input.GetValues()) + if input.GetModule() != "" { + out["module"] = input.GetModule() + } + return out +} + +func authzCheckOutputFromMap(values map[string]any) *contracts.AuthzCheckOutput { + return &contracts.AuthzCheckOutput{ + Subject: stringValue(values["authz_subject"]), + Object: stringValue(values["authz_object"]), + Action: stringValue(values["authz_action"]), + Allowed: boolValue(values["authz_allowed"]), + ResponseStatus: int32(intValue(values["response_status"])), + ResponseBody: stringValue(values["response_body"]), + ResponseHeaders: structFromAnyMap(anyMapValue(values["response_headers"])), + } +} + +func policyRuleOutputFromMap(values map[string]any, changedKey string) *contracts.PolicyRuleOutput { + return &contracts.PolicyRuleOutput{ + Changed: boolValue(values[changedKey]), + Rule: stringSliceValue(firstNonNil(values["authz_rule"], values["rule"])), + } +} + +func roleAssignOutputFromMap(values map[string]any) *contracts.RoleAssignOutput { + return &contracts.RoleAssignOutput{ + Action: stringValue(values["authz_role_action"]), + Assignments: stringListsFromAny(values["authz_role_assignments"]), + } +} + +func capabilitiesOutputFromMap(values map[string]any) *contracts.CapabilitiesOutput { + return &contracts.CapabilitiesOutput{ + Module: stringValue(values["module"]), + Provider: stringValue(values["provider"]), + Capabilities: stringSliceValue(values["capabilities"]), + } +} + +func subjectObjectActionOutputFromMap(values map[string]any) *contracts.SubjectObjectActionOutput { + return &contracts.SubjectObjectActionOutput{ + Allowed: boolValue(values["allowed"]), + Changed: boolValue(firstNonNil( + values["granted"], + values["revoked"], + values["policy_added"], + values["added"], + values["removed"], + )), + Subject: stringValue(values["subject"]), + Object: stringValue(values["object"]), + Action: stringValue(values["action"]), + } +} + +func relationOutputFromMap(values map[string]any) *contracts.RelationOutput { + return &contracts.RelationOutput{ + Changed: boolValue(firstNonNil(values["added"], values["removed"])), + Subject: stringValue(values["subject"]), + Relation: stringValue(values["relation"]), + Object: stringValue(values["object"]), + } +} + +func genericOutputFromMap(values map[string]any) *contracts.GenericStepOutput { + return &contracts.GenericStepOutput{Output: structFromAnyMap(values)} +} + +func mergeStringFields(base, override map[string]any) map[string]any { + out := copyMap(base) + for k, v := range override { + switch typed := v.(type) { + case string: + if typed != "" { + out[k] = typed + } + case []any: + if len(typed) > 0 { + out[k] = typed + } + case map[string]any: + if len(typed) > 0 { + out[k] = typed + } + default: + if v != nil { + out[k] = v + } + } + } + return out +} + +func compactMap(values map[string]any) map[string]any { + out := make(map[string]any, len(values)) + for k, v := range values { + switch typed := v.(type) { + case string: + if typed != "" { + out[k] = typed + } + case nil: + default: + out[k] = v + } + } + return out +} + +func copyMap(values map[string]any) map[string]any { + out := make(map[string]any, len(values)) + for k, v := range values { + out[k] = v + } + return out +} + +func stringsToAny(values []string) []any { + out := make([]any, len(values)) + for i, v := range values { + out[i] = v + } + return out +} + +func stringListsToAny(values []*contracts.StringList) []any { + out := make([]any, 0, len(values)) + for _, row := range values { + out = append(out, stringsToAny(row.GetValues())) + } + return out +} + +func stringListsFromAny(value any) []*contracts.StringList { + rows, ok := value.([][]string) + if ok { + out := make([]*contracts.StringList, 0, len(rows)) + for _, row := range rows { + out = append(out, &contracts.StringList{Values: append([]string(nil), row...)}) + } + return out + } + return nil +} + +func extraFieldsToAny(values []*contracts.ExtraField) []any { + out := make([]any, 0, len(values)) + for _, field := range values { + if field.GetKey() == "" && field.GetValue() == "" { + continue + } + out = append(out, compactMap(map[string]any{"key": field.GetKey(), "value": field.GetValue()})) + } + return out +} + +func structToMapProto(value *structpb.Struct) map[string]any { + if value == nil { + return nil + } + return value.AsMap() +} + +func structFromAnyMap(value any) *structpb.Struct { + values, ok := value.(map[string]any) + if !ok || len(values) == 0 { + return nil + } + out, err := structpb.NewStruct(values) + if err != nil { + return nil + } + return out +} + +func anyMapValue(value any) map[string]any { + values, ok := value.(map[string]any) + if !ok { + return nil + } + return values +} + +func firstNonNil(values ...any) any { + for _, value := range values { + if value != nil { + return value + } + } + return nil +} + +func stringValue(value any) string { + if s, ok := value.(string); ok { + return s + } + return "" +} + +func boolValue(value any) bool { + if b, ok := value.(bool); ok { + return b + } + return false +} + +func intValue(value any) int { + switch v := value.(type) { + case int: + return v + case int32: + return int(v) + case int64: + return int(v) + case float64: + return int(v) + default: + return 0 + } +} + +func stringSliceValue(value any) []string { + switch values := value.(type) { + case []string: + return append([]string(nil), values...) + case []any: + out := make([]string, 0, len(values)) + for _, value := range values { + out = append(out, fmt.Sprint(value)) + } + return out + default: + return nil + } +} diff --git a/plugin.contracts.json b/plugin.contracts.json new file mode 100644 index 0000000..b10bd93 --- /dev/null +++ b/plugin.contracts.json @@ -0,0 +1,226 @@ +{ + "version": "v1", + "contracts": [ + { + "kind": "module", + "type": "authz.casbin", + "mode": "strict", + "config": "workflow.plugins.authz.v1.CasbinModuleConfig" + }, + { + "kind": "module", + "type": "permit.provider", + "mode": "strict", + "config": "workflow.plugins.authz.v1.PermitModuleConfig" + }, + { + "kind": "step", + "type": "step.authz_check_casbin", + "mode": "strict", + "config": "workflow.plugins.authz.v1.AuthzCheckConfig", + "input": "workflow.plugins.authz.v1.AuthzCheckInput", + "output": "workflow.plugins.authz.v1.AuthzCheckOutput" + }, + { + "kind": "step", + "type": "step.authz_add_policy", + "mode": "strict", + "config": "workflow.plugins.authz.v1.PolicyRuleConfig", + "input": "workflow.plugins.authz.v1.PolicyRuleInput", + "output": "workflow.plugins.authz.v1.PolicyRuleOutput" + }, + { + "kind": "step", + "type": "step.authz_remove_policy", + "mode": "strict", + "config": "workflow.plugins.authz.v1.PolicyRuleConfig", + "input": "workflow.plugins.authz.v1.PolicyRuleInput", + "output": "workflow.plugins.authz.v1.PolicyRuleOutput" + }, + { + "kind": "step", + "type": "step.authz_role_assign", + "mode": "strict", + "config": "workflow.plugins.authz.v1.RoleAssignConfig", + "input": "workflow.plugins.authz.v1.RoleAssignInput", + "output": "workflow.plugins.authz.v1.RoleAssignOutput" + }, + { + "kind": "step", + "type": "step.authz_capabilities", + "mode": "strict", + "config": "workflow.plugins.authz.v1.CapabilitiesConfig", + "input": "workflow.plugins.authz.v1.CapabilitiesInput", + "output": "workflow.plugins.authz.v1.CapabilitiesOutput" + }, + { + "kind": "step", + "type": "step.authz_acl_grant", + "mode": "strict", + "config": "workflow.plugins.authz.v1.SubjectObjectActionConfig", + "input": "workflow.plugins.authz.v1.SubjectObjectActionInput", + "output": "workflow.plugins.authz.v1.SubjectObjectActionOutput" + }, + { + "kind": "step", + "type": "step.authz_acl_revoke", + "mode": "strict", + "config": "workflow.plugins.authz.v1.SubjectObjectActionConfig", + "input": "workflow.plugins.authz.v1.SubjectObjectActionInput", + "output": "workflow.plugins.authz.v1.SubjectObjectActionOutput" + }, + { + "kind": "step", + "type": "step.authz_acl_check", + "mode": "strict", + "config": "workflow.plugins.authz.v1.SubjectObjectActionConfig", + "input": "workflow.plugins.authz.v1.SubjectObjectActionInput", + "output": "workflow.plugins.authz.v1.SubjectObjectActionOutput" + }, + { + "kind": "step", + "type": "step.authz_acl_list", + "mode": "strict", + "config": "workflow.plugins.authz.v1.ListConfig", + "input": "workflow.plugins.authz.v1.ListInput", + "output": "workflow.plugins.authz.v1.GenericStepOutput" + }, + { + "kind": "step", + "type": "step.authz_abac_check", + "mode": "strict", + "config": "workflow.plugins.authz.v1.SubjectObjectActionConfig", + "input": "workflow.plugins.authz.v1.SubjectObjectActionInput", + "output": "workflow.plugins.authz.v1.SubjectObjectActionOutput" + }, + { + "kind": "step", + "type": "step.authz_abac_add_policy", + "mode": "strict", + "config": "workflow.plugins.authz.v1.PolicyRuleConfig", + "input": "workflow.plugins.authz.v1.PolicyRuleInput", + "output": "workflow.plugins.authz.v1.PolicyRuleOutput" + }, + { + "kind": "step", + "type": "step.authz_rebac_add_relation", + "mode": "strict", + "config": "workflow.plugins.authz.v1.RelationConfig", + "input": "workflow.plugins.authz.v1.RelationInput", + "output": "workflow.plugins.authz.v1.RelationOutput" + }, + { + "kind": "step", + "type": "step.authz_rebac_remove_relation", + "mode": "strict", + "config": "workflow.plugins.authz.v1.RelationConfig", + "input": "workflow.plugins.authz.v1.RelationInput", + "output": "workflow.plugins.authz.v1.RelationOutput" + }, + { + "kind": "step", + "type": "step.authz_rebac_check", + "mode": "strict", + "config": "workflow.plugins.authz.v1.SubjectObjectActionConfig", + "input": "workflow.plugins.authz.v1.SubjectObjectActionInput", + "output": "workflow.plugins.authz.v1.SubjectObjectActionOutput" + }, + { + "kind": "step", + "type": "step.authz_rebac_list_relations", + "mode": "strict", + "config": "workflow.plugins.authz.v1.ListConfig", + "input": "workflow.plugins.authz.v1.ListInput", + "output": "workflow.plugins.authz.v1.GenericStepOutput" + }, + { + "kind": "step", + "type": "step.permit_check", + "mode": "strict", + "config": "workflow.plugins.authz.v1.PermitStepConfig", + "input": "workflow.plugins.authz.v1.PermitStepInput", + "output": "workflow.plugins.authz.v1.GenericStepOutput" + }, + {"kind":"step","type":"step.permit_api_key_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_api_key_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_api_key_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_api_key_rotate","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_authorized_users","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_bulk_assign","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_bulk_unassign","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_check_bulk","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_condition_set_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_condition_set_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_condition_set_get","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_condition_set_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_condition_set_update","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_env_copy","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_env_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_env_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_env_get","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_env_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_env_update","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_org_get","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_org_member_invite","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_org_member_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_org_member_remove","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_org_update","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_project_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_project_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_project_get","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_project_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_project_update","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_relationship_tuple_bulk_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_relationship_tuple_bulk_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_relationship_tuple_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_relationship_tuple_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_relationship_tuple_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_action_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_action_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_action_get","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_action_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_action_update","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_get","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_instance_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_instance_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_instance_get","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_instance_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_instance_update","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_relation_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_relation_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_relation_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_role_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_role_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_role_get","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_role_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_role_update","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_resource_update","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_role_assign","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_role_assign_permissions","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_role_assignment_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_role_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_role_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_role_get","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_role_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_role_remove_permissions","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_role_unassign","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_role_update","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_tenant_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_tenant_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_tenant_get","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_tenant_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_tenant_list_users","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_tenant_update","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_user_create","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_user_delete","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_user_get","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_user_get_roles","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_user_list","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_user_permissions","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_user_sync","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"}, + {"kind":"step","type":"step.permit_user_update","mode":"strict","config":"workflow.plugins.authz.v1.PermitStepConfig","input":"workflow.plugins.authz.v1.PermitStepInput","output":"workflow.plugins.authz.v1.GenericStepOutput"} + ] +} diff --git a/plugin.json b/plugin.json index 9e66602..f5564fa 100644 --- a/plugin.json +++ b/plugin.json @@ -6,13 +6,46 @@ "license": "MIT", "type": "external", "tier": "core", - "minEngineVersion": "0.3.11", + "private": false, + "minEngineVersion": "0.19.0", "keywords": ["authz", "rbac", "casbin", "authorization", "policy"], "homepage": "https://github.com/GoCodeAlone/workflow-plugin-authz", "repository": "https://github.com/GoCodeAlone/workflow-plugin-authz", + "downloads": [ + { + "os": "linux", + "arch": "amd64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-authz/releases/download/v0.0.0-dev/workflow-plugin-authz-linux-amd64.tar.gz" + }, + { + "os": "linux", + "arch": "arm64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-authz/releases/download/v0.0.0-dev/workflow-plugin-authz-linux-arm64.tar.gz" + }, + { + "os": "darwin", + "arch": "amd64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-authz/releases/download/v0.0.0-dev/workflow-plugin-authz-darwin-amd64.tar.gz" + }, + { + "os": "darwin", + "arch": "arm64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-authz/releases/download/v0.0.0-dev/workflow-plugin-authz-darwin-arm64.tar.gz" + }, + { + "os": "windows", + "arch": "amd64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-authz/releases/download/v0.0.0-dev/workflow-plugin-authz-windows-amd64.tar.gz" + }, + { + "os": "windows", + "arch": "arm64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-authz/releases/download/v0.0.0-dev/workflow-plugin-authz-windows-arm64.tar.gz" + } + ], "capabilities": { "configProvider": false, - "moduleTypes": ["authz.casbin"], + "moduleTypes": ["authz.casbin", "permit.provider"], "stepTypes": [ "step.authz_check_casbin", "step.authz_add_policy",