From cdc5d89885239ad535523013bdcae0feeaab334b Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Mon, 6 Apr 2026 19:32:54 -0400 Subject: [PATCH] Add configs field to routers. Fixes #3780 --- CHANGELOG.md | 46 +- common/pb/cmd_pb/cmd.pb.go | 986 ++++++------------ common/pb/cmd_pb/cmd.proto | 1 + common/pb/edge_cmd_pb/edge_cmd.pb.go | 26 +- common/pb/edge_cmd_pb/edge_cmd.proto | 2 + controller/db/config_store.go | 17 + controller/db/router_store.go | 7 + .../internal/routes/edge_router_api_model.go | 4 + .../routes/fabric_router_api_model.go | 4 + .../internal/routes/router_api_model.go | 4 + controller/model/edge_router_manager.go | 3 + controller/model/edge_router_model.go | 16 +- controller/model/router_manager.go | 3 + controller/model/router_model.go | 69 +- controller/model/transit_router_manager.go | 3 + controller/model/transit_router_model.go | 16 +- controller/rest_model/router_create.go | 3 + controller/rest_model/router_detail.go | 11 + controller/rest_model/router_patch.go | 3 + controller/rest_model/router_update.go | 3 + controller/rest_server/embedded_spec.go | 48 + controller/specs/swagger.yml | 16 + go.mod | 113 +- go.sum | 240 +++-- tests/api_client_management.go | 38 + tests/edge_router_test.go | 203 ++++ tests/entities.go | 12 + tests/fabric_router_test.go | 165 +++ tests/testutil/linkschecker.go | 35 +- ziti/cmd/edge/create_edge_router.go | 19 +- ziti/cmd/edge/create_transit_router.go | 13 +- ziti/cmd/edge/update_edge_router.go | 23 +- ziti/cmd/fabric/create_router.go | 15 +- ziti/cmd/fabric/update_router.go | 19 +- zititest/go.mod | 100 +- zititest/go.sum | 220 ++-- 36 files changed, 1474 insertions(+), 1032 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 143215d3e..1b584f341 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * [Fully Connected Controller Mesh](#fully-connected-controller-mesh) - Controllers now proactively keep the cluster mesh fully connected * [Config Type Target Field](#config-type-target-field) - Config types now have a target field indicating whether they apply to services, routers or other entities * [Wildcard OIDC Issuers](#wildcard-oidc-issuers) - Controllers with a wildcard server-certificate SAN can serve OIDC for explicitly allow-listed hostnames +* [Router Configs](#router-configs) - Allow routers to have a list of associated configs ## Cluster Quorum Recovery @@ -113,13 +114,54 @@ entries are matched against wildcard SANs using standard X.509 hostname rules. T are therefore concrete, fixed hostnames, so the set of valid `iss` values stays closed. Concrete (non-wildcard) SANs continue to be served as issuers automatically and do not need to be listed. +## Router Configs + +Routers (edge, transit, and fabric) now have a `configs` field that holds a list of config IDs the +router should use. This is the second step toward controller-managed router configuration: routers +can now be associated with configs in the same way services already can. + +Validation rules: + +* Every config referenced by a router must use a config type with `target = "router"`. Configs + with `target = "service"` (or anything else) are rejected. +* A router may reference at most one config per config type. Attempting to attach two configs of + the same type is rejected with a duplicate-config error naming both configs. +* Deleting a config automatically removes it from the `configs` list of any router that referenced + it, so dangling references are not possible. + +The `configs` field is exposed on router create, update, patch, and detail responses across the +edge, transit, and fabric router REST APIs. + +The CLI has been updated to support the new field: + +* `ziti edge create edge-router` accepts `--config ` (repeatable) +* `ziti edge create transit-router` accepts `--config ` (repeatable) +* `ziti edge update edge-router` accepts `--config ` to replace the router's config list +* `ziti fabric create router` accepts `--config ` (repeatable) +* `ziti fabric update router` accepts `--config ` to replace the router's config list + ## Component Updates and Bug Fixes +* github.com/openziti/foundation/v2: [v2.0.91 -> v2.0.92](https://github.com/openziti/foundation/compare/v2.0.91...v2.0.92) +* github.com/openziti/identity: [v1.0.129 -> v1.0.130](https://github.com/openziti/identity/compare/v1.0.129...v1.0.130) +* github.com/openziti/sdk-golang: [v1.7.0 -> v1.8.0](https://github.com/openziti/sdk-golang/compare/v1.7.0...v1.8.0) + * [Issue #927](https://github.com/openziti/sdk-golang/issues/927) - Apply exponential backoff to auth retry attempts + * [Issue #926](https://github.com/openziti/sdk-golang/issues/926) - Refresh OIDC token using a window to avoid race conditions and herding + * [Issue #925](https://github.com/openziti/sdk-golang/issues/925) - Switch controllers on a broader set of errors + * [Issue #924](https://github.com/openziti/sdk-golang/issues/924) - Make controller http timeout configurable, with a default of 30s + * [Issue #932](https://github.com/openziti/sdk-golang/issues/932) - API Session Certificate chain is not preserved + * github.com/openziti/ziti/v2: [v2.0.0 -> v2.1.0](https://github.com/openziti/ziti/compare/v2.0.0...v2.1.0) + * [Issue #1593](https://github.com/openziti/ziti/issues/1593) - Expanded attribute query support in management API; add policy attribute support and usage count + * [Issue #3867](https://github.com/openziti/ziti/issues/3867) - Tunneler skips iptables rules for services sharing an intercept hostname + * [Issue #3949](https://github.com/openziti/ziti/issues/3949) - DeleteById swallows errors when firing change events + * [Issue #3945](https://github.com/openziti/ziti/issues/3945) - Increase certificate serial number namespace to 159 bits + * [Issue #3942](https://github.com/openziti/ziti/issues/3942) - Prep for channel v5: bind handler invocation, send priorities + * [Issue #3938](https://github.com/openziti/ziti/issues/3938) - Carry the link id in a link header instead of only in the channel identity token + * [Issue #3914](https://github.com/openziti/ziti/issues/3914) - ziti login fails with oidc + wildcard certs + * [Issue #3891](https://github.com/openziti/ziti/issues/3891) - oidc auth fails with wildcard server-cert SANs * [Issue #3744](https://github.com/openziti/ziti/issues/3744) - Add a target field to config type * [Issue #3684](https://github.com/openziti/ziti/issues/3684) - Keep controller mesh fully connected, as much as possible * [Issue #3849](https://github.com/openziti/ziti/issues/3849) - Add a recover mechanism for when a controller cluster can't form a quorum - * [Issue #3891](https://github.com/openziti/ziti/issues/3891) - Fix OIDC auth failing for controllers using a wildcard server-cert SAN - * [Issue #3961](https://github.com/openziti/ziti/issues/3961) - Fix router panic evaluating a process posture check when the client has reported no process/OS posture data diff --git a/common/pb/cmd_pb/cmd.pb.go b/common/pb/cmd_pb/cmd.pb.go index fdd5496ae..598f20bef 100644 --- a/common/pb/cmd_pb/cmd.pb.go +++ b/common/pb/cmd_pb/cmd.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.36.11 // protoc v3.21.12 // source: cmd.proto @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -144,21 +145,18 @@ func (CommandType) EnumDescriptor() ([]byte, []int) { } type ChangeContext struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Attributes map[string]string `protobuf:"bytes,1,rep,name=attributes,proto3" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + RaftIndex uint64 `protobuf:"varint,2,opt,name=raftIndex,proto3" json:"raftIndex,omitempty"` unknownFields protoimpl.UnknownFields - - Attributes map[string]string `protobuf:"bytes,1,rep,name=attributes,proto3" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - RaftIndex uint64 `protobuf:"varint,2,opt,name=raftIndex,proto3" json:"raftIndex,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ChangeContext) Reset() { *x = ChangeContext{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ChangeContext) String() string { @@ -169,7 +167,7 @@ func (*ChangeContext) ProtoMessage() {} func (x *ChangeContext) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -199,23 +197,20 @@ func (x *ChangeContext) GetRaftIndex() uint64 { } type AddPeerRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"` + IsVoter bool `protobuf:"varint,3,opt,name=isVoter,proto3" json:"isVoter,omitempty"` + Ctx *ChangeContext `protobuf:"bytes,4,opt,name=ctx,proto3" json:"ctx,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"` - IsVoter bool `protobuf:"varint,3,opt,name=isVoter,proto3" json:"isVoter,omitempty"` - Ctx *ChangeContext `protobuf:"bytes,4,opt,name=ctx,proto3" json:"ctx,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddPeerRequest) Reset() { *x = AddPeerRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddPeerRequest) String() string { @@ -226,7 +221,7 @@ func (*AddPeerRequest) ProtoMessage() {} func (x *AddPeerRequest) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -270,21 +265,18 @@ func (x *AddPeerRequest) GetCtx() *ChangeContext { } type RemovePeerRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Ctx *ChangeContext `protobuf:"bytes,2,opt,name=ctx,proto3" json:"ctx,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Ctx *ChangeContext `protobuf:"bytes,2,opt,name=ctx,proto3" json:"ctx,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RemovePeerRequest) Reset() { *x = RemovePeerRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RemovePeerRequest) String() string { @@ -295,7 +287,7 @@ func (*RemovePeerRequest) ProtoMessage() {} func (x *RemovePeerRequest) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -325,21 +317,18 @@ func (x *RemovePeerRequest) GetCtx() *ChangeContext { } type TransferLeadershipRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Ctx *ChangeContext `protobuf:"bytes,2,opt,name=ctx,proto3" json:"ctx,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Ctx *ChangeContext `protobuf:"bytes,2,opt,name=ctx,proto3" json:"ctx,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TransferLeadershipRequest) Reset() { *x = TransferLeadershipRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TransferLeadershipRequest) String() string { @@ -350,7 +339,7 @@ func (*TransferLeadershipRequest) ProtoMessage() {} func (x *TransferLeadershipRequest) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -380,23 +369,20 @@ func (x *TransferLeadershipRequest) GetCtx() *ChangeContext { } type CreateEntityCommand struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + EntityType string `protobuf:"bytes,1,opt,name=entityType,proto3" json:"entityType,omitempty"` + EntityData []byte `protobuf:"bytes,2,opt,name=entityData,proto3" json:"entityData,omitempty"` + Flags uint32 `protobuf:"varint,3,opt,name=flags,proto3" json:"flags,omitempty"` + Ctx *ChangeContext `protobuf:"bytes,4,opt,name=ctx,proto3" json:"ctx,omitempty"` unknownFields protoimpl.UnknownFields - - EntityType string `protobuf:"bytes,1,opt,name=entityType,proto3" json:"entityType,omitempty"` - EntityData []byte `protobuf:"bytes,2,opt,name=entityData,proto3" json:"entityData,omitempty"` - Flags uint32 `protobuf:"varint,3,opt,name=flags,proto3" json:"flags,omitempty"` - Ctx *ChangeContext `protobuf:"bytes,4,opt,name=ctx,proto3" json:"ctx,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateEntityCommand) Reset() { *x = CreateEntityCommand{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateEntityCommand) String() string { @@ -407,7 +393,7 @@ func (*CreateEntityCommand) ProtoMessage() {} func (x *CreateEntityCommand) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -451,24 +437,21 @@ func (x *CreateEntityCommand) GetCtx() *ChangeContext { } type UpdateEntityCommand struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + EntityType string `protobuf:"bytes,1,opt,name=entityType,proto3" json:"entityType,omitempty"` + EntityData []byte `protobuf:"bytes,2,opt,name=entityData,proto3" json:"entityData,omitempty"` + UpdatedFields []string `protobuf:"bytes,3,rep,name=updatedFields,proto3" json:"updatedFields,omitempty"` + Flags uint32 `protobuf:"varint,4,opt,name=flags,proto3" json:"flags,omitempty"` + Ctx *ChangeContext `protobuf:"bytes,5,opt,name=ctx,proto3" json:"ctx,omitempty"` unknownFields protoimpl.UnknownFields - - EntityType string `protobuf:"bytes,1,opt,name=entityType,proto3" json:"entityType,omitempty"` - EntityData []byte `protobuf:"bytes,2,opt,name=entityData,proto3" json:"entityData,omitempty"` - UpdatedFields []string `protobuf:"bytes,3,rep,name=updatedFields,proto3" json:"updatedFields,omitempty"` - Flags uint32 `protobuf:"varint,4,opt,name=flags,proto3" json:"flags,omitempty"` - Ctx *ChangeContext `protobuf:"bytes,5,opt,name=ctx,proto3" json:"ctx,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateEntityCommand) Reset() { *x = UpdateEntityCommand{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateEntityCommand) String() string { @@ -479,7 +462,7 @@ func (*UpdateEntityCommand) ProtoMessage() {} func (x *UpdateEntityCommand) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -530,22 +513,19 @@ func (x *UpdateEntityCommand) GetCtx() *ChangeContext { } type DeleteEntityCommand struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + EntityId string `protobuf:"bytes,1,opt,name=entityId,proto3" json:"entityId,omitempty"` + EntityType string `protobuf:"bytes,2,opt,name=entityType,proto3" json:"entityType,omitempty"` + Ctx *ChangeContext `protobuf:"bytes,3,opt,name=ctx,proto3" json:"ctx,omitempty"` unknownFields protoimpl.UnknownFields - - EntityId string `protobuf:"bytes,1,opt,name=entityId,proto3" json:"entityId,omitempty"` - EntityType string `protobuf:"bytes,2,opt,name=entityType,proto3" json:"entityType,omitempty"` - Ctx *ChangeContext `protobuf:"bytes,3,opt,name=ctx,proto3" json:"ctx,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteEntityCommand) Reset() { *x = DeleteEntityCommand{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteEntityCommand) String() string { @@ -556,7 +536,7 @@ func (*DeleteEntityCommand) ProtoMessage() {} func (x *DeleteEntityCommand) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -593,21 +573,18 @@ func (x *DeleteEntityCommand) GetCtx() *ChangeContext { } type SyncSnapshotCommand struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SnapshotId string `protobuf:"bytes,1,opt,name=snapshotId,proto3" json:"snapshotId,omitempty"` + Snapshot []byte `protobuf:"bytes,2,opt,name=snapshot,proto3" json:"snapshot,omitempty"` unknownFields protoimpl.UnknownFields - - SnapshotId string `protobuf:"bytes,1,opt,name=snapshotId,proto3" json:"snapshotId,omitempty"` - Snapshot []byte `protobuf:"bytes,2,opt,name=snapshot,proto3" json:"snapshot,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SyncSnapshotCommand) Reset() { *x = SyncSnapshotCommand{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SyncSnapshotCommand) String() string { @@ -618,7 +595,7 @@ func (*SyncSnapshotCommand) ProtoMessage() {} func (x *SyncSnapshotCommand) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -648,21 +625,18 @@ func (x *SyncSnapshotCommand) GetSnapshot() []byte { } type InitClusterIdCommand struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ClusterId string `protobuf:"bytes,1,opt,name=clusterId,proto3" json:"clusterId,omitempty"` + TimelineId string `protobuf:"bytes,2,opt,name=timelineId,proto3" json:"timelineId,omitempty"` unknownFields protoimpl.UnknownFields - - ClusterId string `protobuf:"bytes,1,opt,name=clusterId,proto3" json:"clusterId,omitempty"` - TimelineId string `protobuf:"bytes,2,opt,name=timelineId,proto3" json:"timelineId,omitempty"` + sizeCache protoimpl.SizeCache } func (x *InitClusterIdCommand) Reset() { *x = InitClusterIdCommand{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *InitClusterIdCommand) String() string { @@ -673,7 +647,7 @@ func (*InitClusterIdCommand) ProtoMessage() {} func (x *InitClusterIdCommand) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -703,21 +677,18 @@ func (x *InitClusterIdCommand) GetTimelineId() string { } type DeleteTerminatorsBatchCommand struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + EntityIds []string `protobuf:"bytes,1,rep,name=entityIds,proto3" json:"entityIds,omitempty"` + Ctx *ChangeContext `protobuf:"bytes,2,opt,name=ctx,proto3" json:"ctx,omitempty"` unknownFields protoimpl.UnknownFields - - EntityIds []string `protobuf:"bytes,1,rep,name=entityIds,proto3" json:"entityIds,omitempty"` - Ctx *ChangeContext `protobuf:"bytes,2,opt,name=ctx,proto3" json:"ctx,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteTerminatorsBatchCommand) Reset() { *x = DeleteTerminatorsBatchCommand{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteTerminatorsBatchCommand) String() string { @@ -728,7 +699,7 @@ func (*DeleteTerminatorsBatchCommand) ProtoMessage() {} func (x *DeleteTerminatorsBatchCommand) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -758,26 +729,23 @@ func (x *DeleteTerminatorsBatchCommand) GetCtx() *ChangeContext { } type TagValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Value: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Value: // // *TagValue_BoolValue // *TagValue_StringValue // *TagValue_FpValue // *TagValue_NilValue - Value isTagValue_Value `protobuf_oneof:"value"` + Value isTagValue_Value `protobuf_oneof:"value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TagValue) Reset() { *x = TagValue{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TagValue) String() string { @@ -788,7 +756,7 @@ func (*TagValue) ProtoMessage() {} func (x *TagValue) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -803,37 +771,45 @@ func (*TagValue) Descriptor() ([]byte, []int) { return file_cmd_proto_rawDescGZIP(), []int{10} } -func (m *TagValue) GetValue() isTagValue_Value { - if m != nil { - return m.Value +func (x *TagValue) GetValue() isTagValue_Value { + if x != nil { + return x.Value } return nil } func (x *TagValue) GetBoolValue() bool { - if x, ok := x.GetValue().(*TagValue_BoolValue); ok { - return x.BoolValue + if x != nil { + if x, ok := x.Value.(*TagValue_BoolValue); ok { + return x.BoolValue + } } return false } func (x *TagValue) GetStringValue() string { - if x, ok := x.GetValue().(*TagValue_StringValue); ok { - return x.StringValue + if x != nil { + if x, ok := x.Value.(*TagValue_StringValue); ok { + return x.StringValue + } } return "" } func (x *TagValue) GetFpValue() float64 { - if x, ok := x.GetValue().(*TagValue_FpValue); ok { - return x.FpValue + if x != nil { + if x, ok := x.Value.(*TagValue_FpValue); ok { + return x.FpValue + } } return 0 } func (x *TagValue) GetNilValue() bool { - if x, ok := x.GetValue().(*TagValue_NilValue); ok { - return x.NilValue + if x != nil { + if x, ok := x.Value.(*TagValue_NilValue); ok { + return x.NilValue + } } return false } @@ -867,24 +843,21 @@ func (*TagValue_FpValue) isTagValue_Value() {} func (*TagValue_NilValue) isTagValue_Value() {} type Service struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - TerminatorStrategy string `protobuf:"bytes,3,opt,name=terminatorStrategy,proto3" json:"terminatorStrategy,omitempty"` - Tags map[string]*TagValue `protobuf:"bytes,4,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MaxIdleTime int64 `protobuf:"varint,5,opt,name=maxIdleTime,proto3" json:"maxIdleTime,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + TerminatorStrategy string `protobuf:"bytes,3,opt,name=terminatorStrategy,proto3" json:"terminatorStrategy,omitempty"` + Tags map[string]*TagValue `protobuf:"bytes,4,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + MaxIdleTime int64 `protobuf:"varint,5,opt,name=maxIdleTime,proto3" json:"maxIdleTime,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Service) Reset() { *x = Service{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Service) String() string { @@ -895,7 +868,7 @@ func (*Service) ProtoMessage() {} func (x *Service) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -946,20 +919,17 @@ func (x *Service) GetMaxIdleTime() int64 { } type CtrlChanListenerDetail struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Groups []string `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"` unknownFields protoimpl.UnknownFields - - Groups []string `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CtrlChanListenerDetail) Reset() { *x = CtrlChanListenerDetail{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CtrlChanListenerDetail) String() string { @@ -970,7 +940,7 @@ func (*CtrlChanListenerDetail) ProtoMessage() {} func (x *CtrlChanListenerDetail) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -993,28 +963,26 @@ func (x *CtrlChanListenerDetail) GetGroups() []string { } type Router struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` Fingerprint []byte `protobuf:"bytes,3,opt,name=fingerprint,proto3" json:"fingerprint,omitempty"` Cost uint32 `protobuf:"varint,4,opt,name=cost,proto3" json:"cost,omitempty"` NoTraversal bool `protobuf:"varint,5,opt,name=noTraversal,proto3" json:"noTraversal,omitempty"` Disabled bool `protobuf:"varint,6,opt,name=disabled,proto3" json:"disabled,omitempty"` - Tags map[string]*TagValue `protobuf:"bytes,7,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Tags map[string]*TagValue `protobuf:"bytes,7,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` Interfaces []*Interface `protobuf:"bytes,8,rep,name=interfaces,proto3" json:"interfaces,omitempty"` - CtrlChanListeners map[string]*CtrlChanListenerDetail `protobuf:"bytes,9,rep,name=ctrlChanListeners,proto3" json:"ctrlChanListeners,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + CtrlChanListeners map[string]*CtrlChanListenerDetail `protobuf:"bytes,9,rep,name=ctrlChanListeners,proto3" json:"ctrlChanListeners,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Configs []string `protobuf:"bytes,10,rep,name=configs,proto3" json:"configs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Router) Reset() { *x = Router{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Router) String() string { @@ -1025,7 +993,7 @@ func (*Router) ProtoMessage() {} func (x *Router) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1103,35 +1071,39 @@ func (x *Router) GetCtrlChanListeners() map[string]*CtrlChanListenerDetail { return nil } -type Terminator struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *Router) GetConfigs() []string { + if x != nil { + return x.Configs + } + return nil +} - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ServiceId string `protobuf:"bytes,2,opt,name=serviceId,proto3" json:"serviceId,omitempty"` - RouterId string `protobuf:"bytes,3,opt,name=routerId,proto3" json:"routerId,omitempty"` - Binding string `protobuf:"bytes,4,opt,name=binding,proto3" json:"binding,omitempty"` - Address string `protobuf:"bytes,5,opt,name=address,proto3" json:"address,omitempty"` - InstanceId string `protobuf:"bytes,6,opt,name=instanceId,proto3" json:"instanceId,omitempty"` - InstanceSecret []byte `protobuf:"bytes,7,opt,name=instanceSecret,proto3" json:"instanceSecret,omitempty"` - Cost uint32 `protobuf:"varint,8,opt,name=cost,proto3" json:"cost,omitempty"` - Precedence uint32 `protobuf:"varint,9,opt,name=precedence,proto3" json:"precedence,omitempty"` - PeerData map[uint32][]byte `protobuf:"bytes,10,rep,name=peerData,proto3" json:"peerData,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Tags map[string]*TagValue `protobuf:"bytes,11,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - HostId string `protobuf:"bytes,12,opt,name=hostId,proto3" json:"hostId,omitempty"` - IsSystem bool `protobuf:"varint,13,opt,name=isSystem,proto3" json:"isSystem,omitempty"` - SavedPrecedence uint32 `protobuf:"varint,14,opt,name=savedPrecedence,proto3" json:"savedPrecedence,omitempty"` - SourceCtrl string `protobuf:"bytes,15,opt,name=sourceCtrl,proto3" json:"sourceCtrl,omitempty"` +type Terminator struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + ServiceId string `protobuf:"bytes,2,opt,name=serviceId,proto3" json:"serviceId,omitempty"` + RouterId string `protobuf:"bytes,3,opt,name=routerId,proto3" json:"routerId,omitempty"` + Binding string `protobuf:"bytes,4,opt,name=binding,proto3" json:"binding,omitempty"` + Address string `protobuf:"bytes,5,opt,name=address,proto3" json:"address,omitempty"` + InstanceId string `protobuf:"bytes,6,opt,name=instanceId,proto3" json:"instanceId,omitempty"` + InstanceSecret []byte `protobuf:"bytes,7,opt,name=instanceSecret,proto3" json:"instanceSecret,omitempty"` + Cost uint32 `protobuf:"varint,8,opt,name=cost,proto3" json:"cost,omitempty"` + Precedence uint32 `protobuf:"varint,9,opt,name=precedence,proto3" json:"precedence,omitempty"` + PeerData map[uint32][]byte `protobuf:"bytes,10,rep,name=peerData,proto3" json:"peerData,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Tags map[string]*TagValue `protobuf:"bytes,11,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + HostId string `protobuf:"bytes,12,opt,name=hostId,proto3" json:"hostId,omitempty"` + IsSystem bool `protobuf:"varint,13,opt,name=isSystem,proto3" json:"isSystem,omitempty"` + SavedPrecedence uint32 `protobuf:"varint,14,opt,name=savedPrecedence,proto3" json:"savedPrecedence,omitempty"` + SourceCtrl string `protobuf:"bytes,15,opt,name=sourceCtrl,proto3" json:"sourceCtrl,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Terminator) Reset() { *x = Terminator{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Terminator) String() string { @@ -1142,7 +1114,7 @@ func (*Terminator) ProtoMessage() {} func (x *Terminator) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1263,25 +1235,22 @@ func (x *Terminator) GetSourceCtrl() string { } type Interface struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - HardwareAddress string `protobuf:"bytes,2,opt,name=hardwareAddress,proto3" json:"hardwareAddress,omitempty"` - Mtu int64 `protobuf:"varint,3,opt,name=mtu,proto3" json:"mtu,omitempty"` - Index int64 `protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"` - Flags uint64 `protobuf:"varint,5,opt,name=flags,proto3" json:"flags,omitempty"` - Addresses []string `protobuf:"bytes,6,rep,name=addresses,proto3" json:"addresses,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + HardwareAddress string `protobuf:"bytes,2,opt,name=hardwareAddress,proto3" json:"hardwareAddress,omitempty"` + Mtu int64 `protobuf:"varint,3,opt,name=mtu,proto3" json:"mtu,omitempty"` + Index int64 `protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"` + Flags uint64 `protobuf:"varint,5,opt,name=flags,proto3" json:"flags,omitempty"` + Addresses []string `protobuf:"bytes,6,rep,name=addresses,proto3" json:"addresses,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Interface) Reset() { *x = Interface{} - if protoimpl.UnsafeEnabled { - mi := &file_cmd_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_cmd_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Interface) String() string { @@ -1292,7 +1261,7 @@ func (*Interface) ProtoMessage() {} func (x *Interface) ProtoReflect() protoreflect.Message { mi := &file_cmd_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1351,243 +1320,173 @@ func (x *Interface) GetAddresses() []string { var File_cmd_proto protoreflect.FileDescriptor -var file_cmd_proto_rawDesc = []byte{ - 0x0a, 0x09, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x7a, 0x69, 0x74, - 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x22, 0xb8, 0x01, 0x0a, 0x0d, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4a, 0x0a, 0x0a, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x61, 0x66, 0x74, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x61, 0x66, 0x74, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x7c, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x56, - 0x6f, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x56, 0x6f, - 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x03, 0x63, 0x74, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x03, 0x63, 0x74, - 0x78, 0x22, 0x51, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x03, 0x63, 0x74, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, - 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, - 0x03, 0x63, 0x74, 0x78, 0x22, 0x59, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, - 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x2c, 0x0a, 0x03, 0x63, 0x74, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x03, 0x63, 0x74, 0x78, 0x22, - 0x99, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x2c, 0x0a, - 0x03, 0x63, 0x74, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, - 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x03, 0x63, 0x74, 0x78, 0x22, 0xbf, 0x01, 0x0a, 0x13, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, - 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, - 0x2c, 0x0a, 0x03, 0x63, 0x74, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, - 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x03, 0x63, 0x74, 0x78, 0x22, 0x7f, 0x0a, - 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, - 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x2c, 0x0a, 0x03, 0x63, 0x74, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x03, 0x63, 0x74, 0x78, 0x22, 0x51, - 0x0a, 0x13, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x22, 0x54, 0x0a, 0x14, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x69, 0x6d, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x6b, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x49, 0x64, 0x73, 0x12, 0x2c, 0x0a, 0x03, 0x63, 0x74, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, - 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, - 0x03, 0x63, 0x74, 0x78, 0x22, 0x91, 0x01, 0x0a, 0x08, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x22, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x66, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x07, 0x66, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1c, 0x0a, 0x08, 0x6e, 0x69, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x08, 0x6e, 0x69, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x83, 0x02, 0x0a, 0x07, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, - 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x32, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, - 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x61, 0x67, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x20, 0x0a, 0x0b, - 0x6d, 0x61, 0x78, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x4e, - 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x7a, - 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x30, - 0x0a, 0x16, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x22, 0xa0, 0x04, 0x0a, 0x06, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x6f, 0x54, 0x72, 0x61, 0x76, 0x65, - 0x72, 0x73, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x6f, 0x54, 0x72, - 0x61, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x7a, 0x69, 0x74, - 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x58, - 0x0a, 0x11, 0x63, 0x74, 0x72, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x69, 0x74, 0x69, - 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x43, - 0x74, 0x72, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x63, 0x74, 0x72, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x4c, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x1a, 0x4e, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, - 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x69, 0x0a, 0x16, 0x43, 0x74, 0x72, 0x6c, - 0x43, 0x68, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, - 0x62, 0x2e, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x8b, 0x05, 0x0a, 0x0a, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, - 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, - 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0a, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x08, - 0x70, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x35, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x69, 0x73, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x69, 0x73, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x61, - 0x76, 0x65, 0x64, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x73, 0x61, 0x76, 0x65, 0x64, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x74, - 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x43, 0x74, 0x72, 0x6c, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x4e, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x68, 0x61, - 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, - 0x03, 0x6d, 0x74, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, - 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x2a, 0xc3, 0x01, 0x0a, 0x0b, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x14, - 0x0a, 0x0f, 0x4e, 0x65, 0x77, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, - 0x65, 0x10, 0x82, 0x10, 0x12, 0x16, 0x0a, 0x11, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0x83, 0x10, 0x12, 0x18, 0x0a, 0x13, - 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x10, 0x84, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x85, 0x10, 0x12, - 0x1a, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x86, 0x10, 0x12, 0x22, 0x0a, 0x1d, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x87, 0x10, 0x2a, - 0x9e, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x08, 0x0a, 0x04, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x10, 0x01, 0x12, - 0x14, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x54, - 0x79, 0x70, 0x65, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x10, 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x53, - 0x79, 0x6e, 0x63, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x10, 0x0a, 0x12, 0x11, 0x0a, - 0x0d, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x10, 0x0b, - 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, - 0x70, 0x65, 0x6e, 0x7a, 0x69, 0x74, 0x69, 0x2f, 0x66, 0x61, 0x62, 0x72, 0x69, 0x63, 0x2f, 0x70, - 0x62, 0x2f, 0x63, 0x6d, 0x64, 0x5f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_cmd_proto_rawDesc = "" + + "\n" + + "\tcmd.proto\x12\vziti.cmd.pb\"\xb8\x01\n" + + "\rChangeContext\x12J\n" + + "\n" + + "attributes\x18\x01 \x03(\v2*.ziti.cmd.pb.ChangeContext.AttributesEntryR\n" + + "attributes\x12\x1c\n" + + "\traftIndex\x18\x02 \x01(\x04R\traftIndex\x1a=\n" + + "\x0fAttributesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"|\n" + + "\x0eAddPeerRequest\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04addr\x18\x02 \x01(\tR\x04addr\x12\x18\n" + + "\aisVoter\x18\x03 \x01(\bR\aisVoter\x12,\n" + + "\x03ctx\x18\x04 \x01(\v2\x1a.ziti.cmd.pb.ChangeContextR\x03ctx\"Q\n" + + "\x11RemovePeerRequest\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12,\n" + + "\x03ctx\x18\x02 \x01(\v2\x1a.ziti.cmd.pb.ChangeContextR\x03ctx\"Y\n" + + "\x19TransferLeadershipRequest\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12,\n" + + "\x03ctx\x18\x02 \x01(\v2\x1a.ziti.cmd.pb.ChangeContextR\x03ctx\"\x99\x01\n" + + "\x13CreateEntityCommand\x12\x1e\n" + + "\n" + + "entityType\x18\x01 \x01(\tR\n" + + "entityType\x12\x1e\n" + + "\n" + + "entityData\x18\x02 \x01(\fR\n" + + "entityData\x12\x14\n" + + "\x05flags\x18\x03 \x01(\rR\x05flags\x12,\n" + + "\x03ctx\x18\x04 \x01(\v2\x1a.ziti.cmd.pb.ChangeContextR\x03ctx\"\xbf\x01\n" + + "\x13UpdateEntityCommand\x12\x1e\n" + + "\n" + + "entityType\x18\x01 \x01(\tR\n" + + "entityType\x12\x1e\n" + + "\n" + + "entityData\x18\x02 \x01(\fR\n" + + "entityData\x12$\n" + + "\rupdatedFields\x18\x03 \x03(\tR\rupdatedFields\x12\x14\n" + + "\x05flags\x18\x04 \x01(\rR\x05flags\x12,\n" + + "\x03ctx\x18\x05 \x01(\v2\x1a.ziti.cmd.pb.ChangeContextR\x03ctx\"\x7f\n" + + "\x13DeleteEntityCommand\x12\x1a\n" + + "\bentityId\x18\x01 \x01(\tR\bentityId\x12\x1e\n" + + "\n" + + "entityType\x18\x02 \x01(\tR\n" + + "entityType\x12,\n" + + "\x03ctx\x18\x03 \x01(\v2\x1a.ziti.cmd.pb.ChangeContextR\x03ctx\"Q\n" + + "\x13SyncSnapshotCommand\x12\x1e\n" + + "\n" + + "snapshotId\x18\x01 \x01(\tR\n" + + "snapshotId\x12\x1a\n" + + "\bsnapshot\x18\x02 \x01(\fR\bsnapshot\"T\n" + + "\x14InitClusterIdCommand\x12\x1c\n" + + "\tclusterId\x18\x01 \x01(\tR\tclusterId\x12\x1e\n" + + "\n" + + "timelineId\x18\x02 \x01(\tR\n" + + "timelineId\"k\n" + + "\x1dDeleteTerminatorsBatchCommand\x12\x1c\n" + + "\tentityIds\x18\x01 \x03(\tR\tentityIds\x12,\n" + + "\x03ctx\x18\x02 \x01(\v2\x1a.ziti.cmd.pb.ChangeContextR\x03ctx\"\x91\x01\n" + + "\bTagValue\x12\x1e\n" + + "\tboolValue\x18\x01 \x01(\bH\x00R\tboolValue\x12\"\n" + + "\vstringValue\x18\x02 \x01(\tH\x00R\vstringValue\x12\x1a\n" + + "\afpValue\x18\x03 \x01(\x01H\x00R\afpValue\x12\x1c\n" + + "\bnilValue\x18\x04 \x01(\bH\x00R\bnilValueB\a\n" + + "\x05value\"\x83\x02\n" + + "\aService\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12.\n" + + "\x12terminatorStrategy\x18\x03 \x01(\tR\x12terminatorStrategy\x122\n" + + "\x04tags\x18\x04 \x03(\v2\x1e.ziti.cmd.pb.Service.TagsEntryR\x04tags\x12 \n" + + "\vmaxIdleTime\x18\x05 \x01(\x03R\vmaxIdleTime\x1aN\n" + + "\tTagsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12+\n" + + "\x05value\x18\x02 \x01(\v2\x15.ziti.cmd.pb.TagValueR\x05value:\x028\x01\"0\n" + + "\x16CtrlChanListenerDetail\x12\x16\n" + + "\x06groups\x18\x01 \x03(\tR\x06groups\"\xba\x04\n" + + "\x06Router\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12 \n" + + "\vfingerprint\x18\x03 \x01(\fR\vfingerprint\x12\x12\n" + + "\x04cost\x18\x04 \x01(\rR\x04cost\x12 \n" + + "\vnoTraversal\x18\x05 \x01(\bR\vnoTraversal\x12\x1a\n" + + "\bdisabled\x18\x06 \x01(\bR\bdisabled\x121\n" + + "\x04tags\x18\a \x03(\v2\x1d.ziti.cmd.pb.Router.TagsEntryR\x04tags\x126\n" + + "\n" + + "interfaces\x18\b \x03(\v2\x16.ziti.cmd.pb.InterfaceR\n" + + "interfaces\x12X\n" + + "\x11ctrlChanListeners\x18\t \x03(\v2*.ziti.cmd.pb.Router.CtrlChanListenersEntryR\x11ctrlChanListeners\x12\x18\n" + + "\aconfigs\x18\n" + + " \x03(\tR\aconfigs\x1aN\n" + + "\tTagsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12+\n" + + "\x05value\x18\x02 \x01(\v2\x15.ziti.cmd.pb.TagValueR\x05value:\x028\x01\x1ai\n" + + "\x16CtrlChanListenersEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x129\n" + + "\x05value\x18\x02 \x01(\v2#.ziti.cmd.pb.CtrlChanListenerDetailR\x05value:\x028\x01\"\x8b\x05\n" + + "\n" + + "Terminator\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x1c\n" + + "\tserviceId\x18\x02 \x01(\tR\tserviceId\x12\x1a\n" + + "\brouterId\x18\x03 \x01(\tR\brouterId\x12\x18\n" + + "\abinding\x18\x04 \x01(\tR\abinding\x12\x18\n" + + "\aaddress\x18\x05 \x01(\tR\aaddress\x12\x1e\n" + + "\n" + + "instanceId\x18\x06 \x01(\tR\n" + + "instanceId\x12&\n" + + "\x0einstanceSecret\x18\a \x01(\fR\x0einstanceSecret\x12\x12\n" + + "\x04cost\x18\b \x01(\rR\x04cost\x12\x1e\n" + + "\n" + + "precedence\x18\t \x01(\rR\n" + + "precedence\x12A\n" + + "\bpeerData\x18\n" + + " \x03(\v2%.ziti.cmd.pb.Terminator.PeerDataEntryR\bpeerData\x125\n" + + "\x04tags\x18\v \x03(\v2!.ziti.cmd.pb.Terminator.TagsEntryR\x04tags\x12\x16\n" + + "\x06hostId\x18\f \x01(\tR\x06hostId\x12\x1a\n" + + "\bisSystem\x18\r \x01(\bR\bisSystem\x12(\n" + + "\x0fsavedPrecedence\x18\x0e \x01(\rR\x0fsavedPrecedence\x12\x1e\n" + + "\n" + + "sourceCtrl\x18\x0f \x01(\tR\n" + + "sourceCtrl\x1a;\n" + + "\rPeerDataEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\rR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\fR\x05value:\x028\x01\x1aN\n" + + "\tTagsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12+\n" + + "\x05value\x18\x02 \x01(\v2\x15.ziti.cmd.pb.TagValueR\x05value:\x028\x01\"\xa5\x01\n" + + "\tInterface\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12(\n" + + "\x0fhardwareAddress\x18\x02 \x01(\tR\x0fhardwareAddress\x12\x10\n" + + "\x03mtu\x18\x03 \x01(\x03R\x03mtu\x12\x14\n" + + "\x05index\x18\x04 \x01(\x03R\x05index\x12\x14\n" + + "\x05flags\x18\x05 \x01(\x04R\x05flags\x12\x1c\n" + + "\taddresses\x18\x06 \x03(\tR\taddresses*\xc3\x01\n" + + "\vContentType\x12\x13\n" + + "\x0fContentTypeZero\x10\x00\x12\x14\n" + + "\x0fNewLogEntryType\x10\x82\x10\x12\x16\n" + + "\x11ErrorResponseType\x10\x83\x10\x12\x18\n" + + "\x13SuccessResponseType\x10\x84\x10\x12\x17\n" + + "\x12AddPeerRequestType\x10\x85\x10\x12\x1a\n" + + "\x15RemovePeerRequestType\x10\x86\x10\x12\"\n" + + "\x1dTransferLeadershipRequestType\x10\x87\x10*\x9e\x01\n" + + "\vCommandType\x12\b\n" + + "\x04Zero\x10\x00\x12\x14\n" + + "\x10CreateEntityType\x10\x01\x12\x14\n" + + "\x10UpdateEntityType\x10\x02\x12\x14\n" + + "\x10DeleteEntityType\x10\x03\x12\x1e\n" + + "\x1aDeleteTerminatorsBatchType\x10\x04\x12\x10\n" + + "\fSyncSnapshot\x10\n" + + "\x12\x11\n" + + "\rInitClusterId\x10\vB&Z$github.com/openziti/fabric/pb/cmd_pbb\x06proto3" var ( file_cmd_proto_rawDescOnce sync.Once - file_cmd_proto_rawDescData = file_cmd_proto_rawDesc + file_cmd_proto_rawDescData []byte ) func file_cmd_proto_rawDescGZIP() []byte { file_cmd_proto_rawDescOnce.Do(func() { - file_cmd_proto_rawDescData = protoimpl.X.CompressGZIP(file_cmd_proto_rawDescData) + file_cmd_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_cmd_proto_rawDesc), len(file_cmd_proto_rawDesc))) }) return file_cmd_proto_rawDescData } var file_cmd_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_cmd_proto_msgTypes = make([]protoimpl.MessageInfo, 22) -var file_cmd_proto_goTypes = []interface{}{ +var file_cmd_proto_goTypes = []any{ (ContentType)(0), // 0: ziti.cmd.pb.ContentType (CommandType)(0), // 1: ziti.cmd.pb.CommandType (*ChangeContext)(nil), // 2: ziti.cmd.pb.ChangeContext @@ -1644,201 +1543,7 @@ func file_cmd_proto_init() { if File_cmd_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_cmd_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangeContext); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddPeerRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemovePeerRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransferLeadershipRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateEntityCommand); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateEntityCommand); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteEntityCommand); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncSnapshotCommand); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitClusterIdCommand); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteTerminatorsBatchCommand); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TagValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Service); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CtrlChanListenerDetail); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Router); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Terminator); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cmd_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interface); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_cmd_proto_msgTypes[10].OneofWrappers = []interface{}{ + file_cmd_proto_msgTypes[10].OneofWrappers = []any{ (*TagValue_BoolValue)(nil), (*TagValue_StringValue)(nil), (*TagValue_FpValue)(nil), @@ -1848,7 +1553,7 @@ func file_cmd_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_cmd_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_cmd_proto_rawDesc), len(file_cmd_proto_rawDesc)), NumEnums: 2, NumMessages: 22, NumExtensions: 0, @@ -1860,7 +1565,6 @@ func file_cmd_proto_init() { MessageInfos: file_cmd_proto_msgTypes, }.Build() File_cmd_proto = out.File - file_cmd_proto_rawDesc = nil file_cmd_proto_goTypes = nil file_cmd_proto_depIdxs = nil } diff --git a/common/pb/cmd_pb/cmd.proto b/common/pb/cmd_pb/cmd.proto index 070d36c37..497c8312c 100644 --- a/common/pb/cmd_pb/cmd.proto +++ b/common/pb/cmd_pb/cmd.proto @@ -118,6 +118,7 @@ message Router { map tags = 7; repeated Interface interfaces = 8; map ctrlChanListeners = 9; + repeated string configs = 10; } message Terminator { diff --git a/common/pb/edge_cmd_pb/edge_cmd.pb.go b/common/pb/edge_cmd_pb/edge_cmd.pb.go index a7aa57119..b7a162963 100644 --- a/common/pb/edge_cmd_pb/edge_cmd.pb.go +++ b/common/pb/edge_cmd_pb/edge_cmd.pb.go @@ -1403,6 +1403,7 @@ type EdgeRouter struct { Disabled bool `protobuf:"varint,15,opt,name=disabled,proto3" json:"disabled,omitempty"` Interfaces []*Interface `protobuf:"bytes,16,rep,name=interfaces,proto3" json:"interfaces,omitempty"` CtrlChanListeners map[string]*CtrlChanListenerDetail `protobuf:"bytes,17,rep,name=ctrlChanListeners,proto3" json:"ctrlChanListeners,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Configs []string `protobuf:"bytes,18,rep,name=configs,proto3" json:"configs,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1556,6 +1557,13 @@ func (x *EdgeRouter) GetCtrlChanListeners() map[string]*CtrlChanListenerDetail { return nil } +func (x *EdgeRouter) GetConfigs() []string { + if x != nil { + return x.Configs + } + return nil +} + type ReEnrollEdgeRouterCmd struct { state protoimpl.MessageState `protogen:"open.v1"` EdgeRouterId string `protobuf:"bytes,1,opt,name=edgeRouterId,proto3" json:"edgeRouterId,omitempty"` @@ -3260,6 +3268,7 @@ type TransitRouter struct { NoTraversal bool `protobuf:"varint,9,opt,name=noTraversal,proto3" json:"noTraversal,omitempty"` Disabled bool `protobuf:"varint,10,opt,name=disabled,proto3" json:"disabled,omitempty"` CtrlChanListeners map[string]*CtrlChanListenerDetail `protobuf:"bytes,11,rep,name=ctrlChanListeners,proto3" json:"ctrlChanListeners,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Configs []string `protobuf:"bytes,12,rep,name=configs,proto3" json:"configs,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3371,6 +3380,13 @@ func (x *TransitRouter) GetCtrlChanListeners() map[string]*CtrlChanListenerDetai return nil } +func (x *TransitRouter) GetConfigs() []string { + if x != nil { + return x.Configs + } + return nil +} + type CreateTransitRouterCmd struct { state protoimpl.MessageState `protogen:"open.v1"` Router *TransitRouter `protobuf:"bytes,1,opt,name=router,proto3" json:"router,omitempty"` @@ -4918,7 +4934,7 @@ const file_edge_cmd_proto_rawDesc = "" + "\x05flags\x18\x05 \x01(\x04R\x05flags\x12\x1c\n" + "\taddresses\x18\x06 \x03(\tR\taddresses\"0\n" + "\x16CtrlChanListenerDetail\x12\x16\n" + - "\x06groups\x18\x01 \x03(\tR\x06groups\"\xe1\a\n" + + "\x06groups\x18\x01 \x03(\tR\x06groups\"\xfb\a\n" + "\n" + "EdgeRouter\x12\x0e\n" + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + @@ -4942,7 +4958,8 @@ const file_edge_cmd_proto_rawDesc = "" + "\n" + "interfaces\x18\x10 \x03(\v2\x1b.ziti.edge_cmd.pb.InterfaceR\n" + "interfaces\x12a\n" + - "\x11ctrlChanListeners\x18\x11 \x03(\v23.ziti.edge_cmd.pb.EdgeRouter.CtrlChanListenersEntryR\x11ctrlChanListeners\x1aS\n" + + "\x11ctrlChanListeners\x18\x11 \x03(\v23.ziti.edge_cmd.pb.EdgeRouter.CtrlChanListenersEntryR\x11ctrlChanListeners\x12\x18\n" + + "\aconfigs\x18\x12 \x03(\tR\aconfigs\x1aS\n" + "\tTagsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x120\n" + "\x05value\x18\x02 \x01(\v2\x1a.ziti.edge_cmd.pb.TagValueR\x05value:\x028\x01\x1an\n" + @@ -5227,7 +5244,7 @@ const file_edge_cmd_proto_rawDesc = "" + "policyType\x1aS\n" + "\tTagsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x120\n" + - "\x05value\x18\x02 \x01(\v2\x1a.ziti.edge_cmd.pb.TagValueR\x05value:\x028\x01\"\xe4\x05\n" + + "\x05value\x18\x02 \x01(\v2\x1a.ziti.edge_cmd.pb.TagValueR\x05value:\x028\x01\"\xfe\x05\n" + "\rTransitRouter\x12\x0e\n" + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12=\n" + @@ -5242,7 +5259,8 @@ const file_edge_cmd_proto_rawDesc = "" + "\vnoTraversal\x18\t \x01(\bR\vnoTraversal\x12\x1a\n" + "\bdisabled\x18\n" + " \x01(\bR\bdisabled\x12d\n" + - "\x11ctrlChanListeners\x18\v \x03(\v26.ziti.edge_cmd.pb.TransitRouter.CtrlChanListenersEntryR\x11ctrlChanListeners\x1aS\n" + + "\x11ctrlChanListeners\x18\v \x03(\v26.ziti.edge_cmd.pb.TransitRouter.CtrlChanListenersEntryR\x11ctrlChanListeners\x12\x18\n" + + "\aconfigs\x18\f \x03(\tR\aconfigs\x1aS\n" + "\tTagsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x120\n" + "\x05value\x18\x02 \x01(\v2\x1a.ziti.edge_cmd.pb.TagValueR\x05value:\x028\x01\x1an\n" + diff --git a/common/pb/edge_cmd_pb/edge_cmd.proto b/common/pb/edge_cmd_pb/edge_cmd.proto index bad254356..66e037ca6 100644 --- a/common/pb/edge_cmd_pb/edge_cmd.proto +++ b/common/pb/edge_cmd_pb/edge_cmd.proto @@ -231,6 +231,7 @@ message EdgeRouter { bool disabled = 15; repeated Interface interfaces = 16; map ctrlChanListeners = 17; + repeated string configs = 18; } message ReEnrollEdgeRouterCmd { @@ -501,6 +502,7 @@ message TransitRouter { bool noTraversal = 9; bool disabled = 10; map ctrlChanListeners = 11; + repeated string configs = 12; } message CreateTransitRouterCmd { diff --git a/controller/db/config_store.go b/controller/db/config_store.go index c686c72cd..3a8d20f50 100644 --- a/controller/db/config_store.go +++ b/controller/db/config_store.go @@ -77,6 +77,7 @@ type configStoreImpl struct { indexName boltz.ReadIndex symbolType boltz.EntitySymbol symbolServices boltz.EntitySetSymbol + symbolRouters boltz.EntitySetSymbol symbolIdentityServices boltz.EntitySetSymbol identityServicesLinks *boltz.LinkedSetSymbol } @@ -91,6 +92,7 @@ func (store *configStoreImpl) initializeLocal() { store.symbolType = store.AddFkSymbol(FieldConfigType, store.stores.configType) store.AddMapSymbol(FieldConfigData, ast.NodeTypeAnyType, FieldConfigData) store.symbolServices = store.AddFkSetSymbol(EntityTypeServices, store.stores.edgeService) + store.symbolRouters = store.AddFkSetSymbol(EntityTypeRouters, store.stores.router) store.symbolIdentityServices = store.AddSetSymbol(FieldConfigIdentityService, ast.NodeTypeOther) store.identityServicesLinks = &boltz.LinkedSetSymbol{EntitySymbol: store.symbolIdentityServices} } @@ -98,6 +100,7 @@ func (store *configStoreImpl) initializeLocal() { func (store *configStoreImpl) initializeLinked() { store.AddFkIndex(store.symbolType, store.stores.configType.symbolConfigs) store.AddLinkCollection(store.symbolServices, store.stores.edgeService.symbolConfigs) + store.AddLinkCollection(store.symbolRouters, store.stores.router.symbolConfigs) } func (store *configStoreImpl) NewEntity() *Config { @@ -148,6 +151,20 @@ func (store *configStoreImpl) DeleteById(ctx boltz.MutateContext, id string) err } } + // clear config from referencing routers + for _, routerId := range store.GetRelatedEntitiesIdList(ctx.Tx(), id, EntityTypeRouters) { + router, err := store.stores.router.LoadById(ctx.Tx(), routerId) + if err != nil { + return fmt.Errorf("error loading router %s to clear reference to config %s (%w)", routerId, id, err) + } + router.Configs = slices.DeleteFunc(router.Configs, func(s string) bool { + return s == id + }) + if err = store.stores.router.Update(ctx, router, nil); err != nil { + return fmt.Errorf("error updating router %s to clear reference to config %s (%w)", routerId, id, err) + } + } + err := store.symbolIdentityServices.Map(ctx.Tx(), []byte(id), func(mapCtx *boltz.MapContext) { keys, err := boltz.DecodeStringSlice(mapCtx.Value()) if err != nil { diff --git a/controller/db/router_store.go b/controller/db/router_store.go index eee59fe38..f72113c05 100644 --- a/controller/db/router_store.go +++ b/controller/db/router_store.go @@ -42,6 +42,7 @@ type Router struct { Disabled bool `json:"disabled"` CtrlChanListeners map[string][]string `json:"ctrlChanListeners"` Interfaces []*Interface `json:"interfaces"` + Configs []string `json:"configs"` } func (entity *Router) GetEntityType() string { @@ -69,6 +70,7 @@ type routerStoreImpl struct { baseStore[*Router] indexName boltz.ReadIndex terminatorsSymbol boltz.EntitySetSymbol + symbolConfigs boltz.EntitySetSymbol } func (store *routerStoreImpl) initializeLocal() { @@ -83,9 +85,12 @@ func (store *routerStoreImpl) initializeLocal() { store.AddSymbol(FieldRouterNoTraversal, ast.NodeTypeBool) store.AddSymbol(FieldRouterDisabled, ast.NodeTypeBool) store.AddSymbol(FieldRouterCtrlChanListeners, ast.NodeTypeOther) + store.symbolConfigs = store.AddFkSetSymbol(EntityTypeConfigs, store.stores.config) + store.MakeSymbolPublic(EntityTypeConfigs) } func (store *routerStoreImpl) initializeLinked() { + store.AddLinkCollection(store.symbolConfigs, store.stores.config.symbolRouters) } func (self *routerStoreImpl) NewEntity() *Router { @@ -101,6 +106,7 @@ func (self *routerStoreImpl) FillEntity(entity *Router, bucket *boltz.TypedBucke entity.Disabled = bucket.GetBoolWithDefault(FieldRouterDisabled, false) entity.CtrlChanListeners = decodeCtrlChanListeners(bucket.GetMap(FieldRouterCtrlChanListeners)) entity.Interfaces = loadInterfaces(bucket) + entity.Configs = bucket.GetStringList(EntityTypeConfigs) } func (self *routerStoreImpl) PersistEntity(entity *Router, ctx *boltz.PersistContext) { @@ -112,6 +118,7 @@ func (self *routerStoreImpl) PersistEntity(entity *Router, ctx *boltz.PersistCon ctx.SetBool(FieldRouterDisabled, entity.Disabled) ctx.Bucket.PutMap(FieldRouterCtrlChanListeners, encodeCtrlChanListeners(entity.CtrlChanListeners), ctx.FieldChecker, true) storeInterfaces(entity.Interfaces, ctx) + ctx.SetLinkedIds(EntityTypeConfigs, entity.Configs) } func (self *routerStoreImpl) UpdateInterfaces(entity *Router, interfaces map[string]*Interface, ctx *boltz.PersistContext) { diff --git a/controller/internal/routes/edge_router_api_model.go b/controller/internal/routes/edge_router_api_model.go index 4175002c4..272bf27fd 100644 --- a/controller/internal/routes/edge_router_api_model.go +++ b/controller/internal/routes/edge_router_api_model.go @@ -67,6 +67,7 @@ func MapCreateEdgeRouterToModel(router *rest_model.EdgeRouterCreate) *model.Edge NoTraversal: BoolOrDefault(router.NoTraversal), Disabled: BoolOrDefault(router.Disabled), CtrlChanListeners: router.CtrlChanListeners, + Configs: router.Configs, } return ret @@ -86,6 +87,7 @@ func MapUpdateEdgeRouterToModel(id string, router *rest_model.EdgeRouterUpdate) NoTraversal: BoolOrDefault(router.NoTraversal), Disabled: BoolOrDefault(router.Disabled), CtrlChanListeners: router.CtrlChanListeners, + Configs: router.Configs, } return ret @@ -105,6 +107,7 @@ func MapPatchEdgeRouterToModel(id string, router *rest_model.EdgeRouterPatch) *m NoTraversal: BoolOrDefault(router.NoTraversal), Disabled: BoolOrDefault(router.Disabled), CtrlChanListeners: router.CtrlChanListeners, + Configs: router.Configs, } return ret @@ -167,6 +170,7 @@ func MapEdgeRouterToRestModel(ae *env.AppEnv, router *model.EdgeRouter) (*rest_m UnverifiedFingerprint: router.UnverifiedFingerprint, UnverifiedCertPem: router.UnverifiedCertPem, CtrlChanListeners: router.CtrlChanListeners, + Configs: router.Configs, } for _, intf := range router.Interfaces { diff --git a/controller/internal/routes/fabric_router_api_model.go b/controller/internal/routes/fabric_router_api_model.go index ef8111e59..8aabc573a 100644 --- a/controller/internal/routes/fabric_router_api_model.go +++ b/controller/internal/routes/fabric_router_api_model.go @@ -60,6 +60,7 @@ func MapCreateFabricRouterToModel(router *rest_model.RouterCreate) *model.Router NoTraversal: BoolOrDefault(router.NoTraversal), Disabled: BoolOrDefault(router.Disabled), CtrlChanListeners: router.CtrlChanListeners, + Configs: router.Configs, } return ret @@ -77,6 +78,7 @@ func MapUpdateFabricRouterToModel(id string, router *rest_model.RouterUpdate) *m NoTraversal: BoolOrDefault(router.NoTraversal), Disabled: BoolOrDefault(router.Disabled), CtrlChanListeners: router.CtrlChanListeners, + Configs: router.Configs, } return ret @@ -94,6 +96,7 @@ func MapPatchFabricRouterToModel(id string, router *rest_model.RouterPatch) *mod NoTraversal: BoolOrDefault(router.NoTraversal), Disabled: BoolOrDefault(router.Disabled), CtrlChanListeners: router.CtrlChanListeners, + Configs: router.Configs, } return ret @@ -127,6 +130,7 @@ func (FabricRouterModelMapper) ToApi(ae *env.AppEnv, _ *response.RequestContext, NoTraversal: &router.NoTraversal, Disabled: &router.Disabled, CtrlChanListeners: router.CtrlChanListeners, + Configs: router.Configs, } if connected != nil { diff --git a/controller/internal/routes/router_api_model.go b/controller/internal/routes/router_api_model.go index c8cf037ba..8691ab8ab 100644 --- a/controller/internal/routes/router_api_model.go +++ b/controller/internal/routes/router_api_model.go @@ -23,6 +23,7 @@ func MapCreateRouterToModel(router *rest_model.RouterCreate) *model.TransitRoute Cost: uint16(Int64OrDefault(router.Cost)), NoTraversal: BoolOrDefault(router.NoTraversal), CtrlChanListeners: router.CtrlChanListeners, + Configs: router.Configs, } return ret @@ -39,6 +40,7 @@ func MapUpdateTransitRouterToModel(id string, router *rest_model.RouterUpdate) * NoTraversal: BoolOrDefault(router.NoTraversal), Disabled: BoolOrDefault(router.Disabled), CtrlChanListeners: router.CtrlChanListeners, + Configs: router.Configs, } return ret @@ -55,6 +57,7 @@ func MapPatchTransitRouterToModel(id string, router *rest_model.RouterPatch) *mo NoTraversal: BoolOrDefault(router.NoTraversal), Disabled: BoolOrDefault(router.Disabled), CtrlChanListeners: router.CtrlChanListeners, + Configs: router.Configs, } return ret @@ -79,6 +82,7 @@ func MapTransitRouterToRestModel(ae *env.AppEnv, router *model.TransitRouter) (* NoTraversal: &router.NoTraversal, Disabled: &router.Disabled, CtrlChanListeners: router.CtrlChanListeners, + Configs: router.Configs, } if !router.IsBase && !router.IsVerified { diff --git a/controller/model/edge_router_manager.go b/controller/model/edge_router_manager.go index b0f8e5d88..35aa59d7d 100644 --- a/controller/model/edge_router_manager.go +++ b/controller/model/edge_router_manager.go @@ -50,6 +50,7 @@ func NewEdgeRouterManager(env Env) *EdgeRouterManager { db.FieldRouterDisabled: struct{}{}, db.FieldEdgeRouterAppData: struct{}{}, db.FieldRouterCtrlChanListeners: struct{}{}, + db.EntityTypeConfigs: struct{}{}, }, } @@ -459,6 +460,7 @@ func (self *EdgeRouterManager) EdgeRouterToProtobuf(entity *EdgeRouter) (*edge_c NoTraversal: entity.NoTraversal, Disabled: entity.Disabled, CtrlChanListeners: edge_cmd_pb.EncodeCtrlChanListeners(entity.CtrlChanListeners), + Configs: entity.Configs, } for _, intf := range entity.Interfaces { @@ -508,6 +510,7 @@ func (self *EdgeRouterManager) ProtobufToEdgeRouter(msg *edge_cmd_pb.EdgeRouter) NoTraversal: msg.NoTraversal, Disabled: msg.Disabled, CtrlChanListeners: edge_cmd_pb.DecodeCtrlChanListeners(msg.CtrlChanListeners), + Configs: msg.Configs, } for _, intf := range msg.Interfaces { diff --git a/controller/model/edge_router_model.go b/controller/model/edge_router_model.go index 4274efcbe..364bb4ad5 100644 --- a/controller/model/edge_router_model.go +++ b/controller/model/edge_router_model.go @@ -42,13 +42,18 @@ type EdgeRouter struct { Disabled bool CtrlChanListeners map[string][]string Interfaces []*Interface + Configs []string } func (self *EdgeRouter) GetName() string { return self.Name } -func (entity *EdgeRouter) toBoltEntityForCreate(*bbolt.Tx, Env) (*db.EdgeRouter, error) { +func (entity *EdgeRouter) toBoltEntityForCreate(tx *bbolt.Tx, env Env) (*db.EdgeRouter, error) { + if err := validateRouterConfigs(tx, env, entity.Configs, nil); err != nil { + return nil, err + } + boltEntity := &db.EdgeRouter{ Router: db.Router{ BaseExtEntity: *boltz.NewExtEntity(entity.Id, entity.Tags), @@ -58,6 +63,7 @@ func (entity *EdgeRouter) toBoltEntityForCreate(*bbolt.Tx, Env) (*db.EdgeRouter, Disabled: entity.Disabled, CtrlChanListeners: entity.CtrlChanListeners, Interfaces: InterfacesToBolt(entity.Interfaces), + Configs: entity.Configs, }, RoleAttributes: entity.RoleAttributes, IsVerified: false, @@ -68,7 +74,11 @@ func (entity *EdgeRouter) toBoltEntityForCreate(*bbolt.Tx, Env) (*db.EdgeRouter, return boltEntity, nil } -func (entity *EdgeRouter) toBoltEntityForUpdate(*bbolt.Tx, Env, boltz.FieldChecker) (*db.EdgeRouter, error) { +func (entity *EdgeRouter) toBoltEntityForUpdate(tx *bbolt.Tx, env Env, checker boltz.FieldChecker) (*db.EdgeRouter, error) { + if err := validateRouterConfigs(tx, env, entity.Configs, checker); err != nil { + return nil, err + } + return &db.EdgeRouter{ Router: db.Router{ BaseExtEntity: *boltz.NewExtEntity(entity.Id, entity.Tags), @@ -79,6 +89,7 @@ func (entity *EdgeRouter) toBoltEntityForUpdate(*bbolt.Tx, Env, boltz.FieldCheck Disabled: entity.Disabled, CtrlChanListeners: entity.CtrlChanListeners, Interfaces: InterfacesToBolt(entity.Interfaces), + Configs: entity.Configs, }, RoleAttributes: entity.RoleAttributes, IsVerified: entity.IsVerified, @@ -106,5 +117,6 @@ func (entity *EdgeRouter) fillFrom(_ Env, _ *bbolt.Tx, boltEdgeRouter *db.EdgeRo entity.Disabled = boltEdgeRouter.Disabled entity.CtrlChanListeners = boltEdgeRouter.CtrlChanListeners entity.Interfaces = InterfacesFromBolt(boltEdgeRouter.Interfaces) + entity.Configs = boltEdgeRouter.Configs return nil } diff --git a/controller/model/router_manager.go b/controller/model/router_manager.go index 9d254eba2..6f41158fa 100644 --- a/controller/model/router_manager.go +++ b/controller/model/router_manager.go @@ -453,6 +453,7 @@ func (self *RouterManager) UpdateCachedRouter(id string) { v.NoTraversal = router.NoTraversal v.Disabled = router.Disabled v.CtrlChanListeners = router.CtrlChanListeners + v.Configs = router.Configs if v.Disabled { if ctrl := v.Control; ctrl != nil { @@ -493,6 +494,7 @@ func (self *RouterManager) Marshall(entity *Router) ([]byte, error) { Disabled: entity.Disabled, Tags: tags, CtrlChanListeners: cmd_pb.EncodeCtrlChanListeners(entity.CtrlChanListeners), + Configs: entity.Configs, } for _, intf := range entity.Interfaces { @@ -532,6 +534,7 @@ func (self *RouterManager) Unmarshall(bytes []byte) (*Router, error) { NoTraversal: msg.NoTraversal, Disabled: msg.Disabled, CtrlChanListeners: cmd_pb.DecodeCtrlChanListeners(msg.CtrlChanListeners), + Configs: msg.Configs, } for _, intf := range msg.Interfaces { diff --git a/controller/model/router_model.go b/controller/model/router_model.go index 55c586ef7..7d062c43c 100644 --- a/controller/model/router_model.go +++ b/controller/model/router_model.go @@ -17,17 +17,19 @@ package model import ( + "fmt" "math/big" "sync/atomic" "time" + "github.com/openziti/foundation/v2/errorz" "github.com/openziti/foundation/v2/versions" - "github.com/openziti/ziti/v2/controller/storage/boltz" "github.com/openziti/ziti/v2/common/capabilities" "github.com/openziti/ziti/v2/common/ctrlchan" "github.com/openziti/ziti/v2/common/pb/ctrl_pb" "github.com/openziti/ziti/v2/controller/db" "github.com/openziti/ziti/v2/controller/models" + "github.com/openziti/ziti/v2/controller/storage/boltz" "go.etcd.io/bbolt" ) @@ -53,17 +55,28 @@ type Router struct { Capabilities *big.Int Interfaces []*Interface CtrlChanListeners map[string][]string + Configs []string } func (entity *Router) GetLinks() []*Link { return entity.routerLinks.GetLinks() } -func (entity *Router) toBoltEntityForUpdate(tx *bbolt.Tx, env Env, _ boltz.FieldChecker) (*db.Router, error) { - return entity.toBoltEntityForCreate(tx, env) +func (entity *Router) toBoltEntityForUpdate(tx *bbolt.Tx, env Env, checker boltz.FieldChecker) (*db.Router, error) { + if err := validateRouterConfigs(tx, env, entity.Configs, checker); err != nil { + return nil, err + } + return entity.toBoltEntity(), nil } -func (entity *Router) toBoltEntityForCreate(*bbolt.Tx, Env) (*db.Router, error) { +func (entity *Router) toBoltEntityForCreate(tx *bbolt.Tx, env Env) (*db.Router, error) { + if err := validateRouterConfigs(tx, env, entity.Configs, nil); err != nil { + return nil, err + } + return entity.toBoltEntity(), nil +} + +func (entity *Router) toBoltEntity() *db.Router { return &db.Router{ BaseExtEntity: *boltz.NewExtEntity(entity.Id, entity.Tags), Name: entity.Name, @@ -73,7 +86,52 @@ func (entity *Router) toBoltEntityForCreate(*bbolt.Tx, Env) (*db.Router, error) Disabled: entity.Disabled, CtrlChanListeners: entity.CtrlChanListeners, Interfaces: InterfacesToBolt(entity.Interfaces), - }, nil + Configs: entity.Configs, + } +} + +// validateRouterConfigs validates that all configs target routers and have unique config types. +// If checker is non-nil and the configs field is not being updated, validation is skipped. +func validateRouterConfigs(tx *bbolt.Tx, env Env, configs []string, checker boltz.FieldChecker) error { + if checker != nil && !checker.IsUpdated(db.EntityTypeConfigs) { + return nil + } + if len(configs) == 0 { + return nil + } + + typeMap := map[string]*db.Config{} + configStore := env.GetStores().Config + configTypeStore := env.GetStores().ConfigType + for _, id := range configs { + config, err := configStore.LoadById(tx, id) + if err != nil { + return err + } + + configType, err := configTypeStore.LoadById(tx, config.TypeId) + if err != nil { + if boltz.IsErrNotFoundErr(err) { + msg := fmt.Sprintf("config %v references config type %v which does not exist", + config.Name, config.TypeId) + return errorz.NewFieldError(msg, "configs", configs) + } + return err + } + if configType.Target != db.ConfigTypeTargetRouter { + msg := fmt.Sprintf("config %v has config type %v which does not target routers", + config.Name, configType.Name) + return errorz.NewFieldError(msg, "configs", configs) + } + + if conflictConfig, found := typeMap[config.TypeId]; found { + msg := fmt.Sprintf("duplicate configs named %v and %v found for config type %v. Only one config of a given type is allowed per router", + conflictConfig.Name, config.Name, configType.Name) + return errorz.NewFieldError(msg, "configs", configs) + } + typeMap[config.TypeId] = config + } + return nil } func (entity *Router) fillFrom(_ Env, _ *bbolt.Tx, boltRouter *db.Router) error { @@ -84,6 +142,7 @@ func (entity *Router) fillFrom(_ Env, _ *bbolt.Tx, boltRouter *db.Router) error entity.Disabled = boltRouter.Disabled entity.CtrlChanListeners = boltRouter.CtrlChanListeners entity.Interfaces = InterfacesFromBolt(boltRouter.Interfaces) + entity.Configs = boltRouter.Configs entity.FillCommon(boltRouter) return nil } diff --git a/controller/model/transit_router_manager.go b/controller/model/transit_router_manager.go index 5715aa505..658be15fe 100644 --- a/controller/model/transit_router_manager.go +++ b/controller/model/transit_router_manager.go @@ -42,6 +42,7 @@ func NewTransitRouterManager(env Env) *TransitRouterManager { db.FieldName: struct{}{}, boltz.FieldTags: struct{}{}, db.FieldRouterCtrlChanListeners: struct{}{}, + db.EntityTypeConfigs: struct{}{}, }, } manager.impl = manager @@ -310,6 +311,7 @@ func (self *TransitRouterManager) TransitRouterToProtobuf(entity *TransitRouter) NoTraversal: entity.NoTraversal, Disabled: entity.Disabled, CtrlChanListeners: edge_cmd_pb.EncodeCtrlChanListeners(entity.CtrlChanListeners), + Configs: entity.Configs, } return msg, nil @@ -338,6 +340,7 @@ func (self *TransitRouterManager) ProtobufToTransitRouter(msg *edge_cmd_pb.Trans NoTraversal: msg.NoTraversal, Disabled: msg.Disabled, CtrlChanListeners: edge_cmd_pb.DecodeCtrlChanListeners(msg.CtrlChanListeners), + Configs: msg.Configs, }, nil } diff --git a/controller/model/transit_router_model.go b/controller/model/transit_router_model.go index f1945b094..2f8f6c832 100644 --- a/controller/model/transit_router_model.go +++ b/controller/model/transit_router_model.go @@ -35,13 +35,18 @@ type TransitRouter struct { NoTraversal bool Disabled bool CtrlChanListeners map[string][]string + Configs []string } func (self *TransitRouter) GetName() string { return self.Name } -func (entity *TransitRouter) toBoltEntityForCreate(*bbolt.Tx, Env) (*db.TransitRouter, error) { +func (entity *TransitRouter) toBoltEntityForCreate(tx *bbolt.Tx, env Env) (*db.TransitRouter, error) { + if err := validateRouterConfigs(tx, env, entity.Configs, nil); err != nil { + return nil, err + } + boltEntity := &db.TransitRouter{ Router: db.Router{ BaseExtEntity: *boltz.NewExtEntity(entity.Id, entity.Tags), @@ -51,6 +56,7 @@ func (entity *TransitRouter) toBoltEntityForCreate(*bbolt.Tx, Env) (*db.TransitR NoTraversal: entity.NoTraversal, Disabled: entity.Disabled, CtrlChanListeners: entity.CtrlChanListeners, + Configs: entity.Configs, }, IsVerified: false, } @@ -58,7 +64,11 @@ func (entity *TransitRouter) toBoltEntityForCreate(*bbolt.Tx, Env) (*db.TransitR return boltEntity, nil } -func (entity *TransitRouter) toBoltEntityForUpdate(*bbolt.Tx, Env, boltz.FieldChecker) (*db.TransitRouter, error) { +func (entity *TransitRouter) toBoltEntityForUpdate(tx *bbolt.Tx, env Env, checker boltz.FieldChecker) (*db.TransitRouter, error) { + if err := validateRouterConfigs(tx, env, entity.Configs, checker); err != nil { + return nil, err + } + ret := &db.TransitRouter{ Router: db.Router{ BaseExtEntity: *boltz.NewExtEntity(entity.Id, entity.Tags), @@ -68,6 +78,7 @@ func (entity *TransitRouter) toBoltEntityForUpdate(*bbolt.Tx, Env, boltz.FieldCh NoTraversal: entity.NoTraversal, Disabled: entity.Disabled, CtrlChanListeners: entity.CtrlChanListeners, + Configs: entity.Configs, }, IsVerified: entity.IsVerified, UnverifiedFingerprint: entity.UnverifiedFingerprint, @@ -89,6 +100,7 @@ func (entity *TransitRouter) fillFrom(_ Env, _ *bbolt.Tx, boltTransitRouter *db. entity.NoTraversal = boltTransitRouter.NoTraversal entity.Disabled = boltTransitRouter.Disabled entity.CtrlChanListeners = boltTransitRouter.CtrlChanListeners + entity.Configs = boltTransitRouter.Configs return nil } diff --git a/controller/rest_model/router_create.go b/controller/rest_model/router_create.go index ba79b3d66..364da34a2 100644 --- a/controller/rest_model/router_create.go +++ b/controller/rest_model/router_create.go @@ -44,6 +44,9 @@ import ( // swagger:model routerCreate type RouterCreate struct { + // configs + Configs []string `json:"configs"` + // cost // Required: true // Maximum: 65535 diff --git a/controller/rest_model/router_detail.go b/controller/rest_model/router_detail.go index 727218281..eef164a21 100644 --- a/controller/rest_model/router_detail.go +++ b/controller/rest_model/router_detail.go @@ -46,6 +46,9 @@ import ( type RouterDetail struct { BaseEntity + // configs + Configs []string `json:"configs"` + // connected // Required: true Connected *bool `json:"connected"` @@ -96,6 +99,8 @@ func (m *RouterDetail) UnmarshalJSON(raw []byte) error { // AO1 var dataAO1 struct { + Configs []string `json:"configs"` + Connected *bool `json:"connected"` Cost *int64 `json:"cost"` @@ -120,6 +125,8 @@ func (m *RouterDetail) UnmarshalJSON(raw []byte) error { return err } + m.Configs = dataAO1.Configs + m.Connected = dataAO1.Connected m.Cost = dataAO1.Cost @@ -153,6 +160,8 @@ func (m RouterDetail) MarshalJSON() ([]byte, error) { } _parts = append(_parts, aO0) var dataAO1 struct { + Configs []string `json:"configs"` + Connected *bool `json:"connected"` Cost *int64 `json:"cost"` @@ -174,6 +183,8 @@ func (m RouterDetail) MarshalJSON() ([]byte, error) { VersionInfo *VersionInfo `json:"versionInfo,omitempty"` } + dataAO1.Configs = m.Configs + dataAO1.Connected = m.Connected dataAO1.Cost = m.Cost diff --git a/controller/rest_model/router_patch.go b/controller/rest_model/router_patch.go index 29443ca79..47c422b9c 100644 --- a/controller/rest_model/router_patch.go +++ b/controller/rest_model/router_patch.go @@ -44,6 +44,9 @@ import ( // swagger:model routerPatch type RouterPatch struct { + // configs + Configs []string `json:"configs"` + // cost // Maximum: 65535 // Minimum: 0 diff --git a/controller/rest_model/router_update.go b/controller/rest_model/router_update.go index 834d4f961..d7de2dc87 100644 --- a/controller/rest_model/router_update.go +++ b/controller/rest_model/router_update.go @@ -44,6 +44,9 @@ import ( // swagger:model routerUpdate type RouterUpdate struct { + // configs + Configs []string `json:"configs"` + // cost // Required: true // Maximum: 65535 diff --git a/controller/rest_server/embedded_spec.go b/controller/rest_server/embedded_spec.go index 63aa8edae..ed3fc2ab6 100644 --- a/controller/rest_server/embedded_spec.go +++ b/controller/rest_server/embedded_spec.go @@ -2125,6 +2125,12 @@ func init() { "noTraversal" ], "properties": { + "configs": { + "type": "array", + "items": { + "type": "string" + } + }, "cost": { "type": "integer", "maximum": 65535 @@ -2178,6 +2184,12 @@ func init() { "disabled" ], "properties": { + "configs": { + "type": "array", + "items": { + "type": "string" + } + }, "connected": { "type": "boolean" }, @@ -2249,6 +2261,12 @@ func init() { "routerPatch": { "type": "object", "properties": { + "configs": { + "type": "array", + "items": { + "type": "string" + } + }, "cost": { "type": "integer", "maximum": 65535, @@ -2293,6 +2311,12 @@ func init() { "noTraversal" ], "properties": { + "configs": { + "type": "array", + "items": { + "type": "string" + } + }, "cost": { "type": "integer", "maximum": 65535 @@ -7976,6 +8000,12 @@ func init() { "noTraversal" ], "properties": { + "configs": { + "type": "array", + "items": { + "type": "string" + } + }, "cost": { "type": "integer", "maximum": 65535, @@ -8030,6 +8060,12 @@ func init() { "disabled" ], "properties": { + "configs": { + "type": "array", + "items": { + "type": "string" + } + }, "connected": { "type": "boolean" }, @@ -8102,6 +8138,12 @@ func init() { "routerPatch": { "type": "object", "properties": { + "configs": { + "type": "array", + "items": { + "type": "string" + } + }, "cost": { "type": "integer", "maximum": 65535, @@ -8147,6 +8189,12 @@ func init() { "noTraversal" ], "properties": { + "configs": { + "type": "array", + "items": { + "type": "string" + } + }, "cost": { "type": "integer", "maximum": 65535, diff --git a/controller/specs/swagger.yml b/controller/specs/swagger.yml index 7dd8c1efb..95454bfb1 100644 --- a/controller/specs/swagger.yml +++ b/controller/specs/swagger.yml @@ -1640,6 +1640,10 @@ definitions: type: array items: type: string + configs: + type: array + items: + type: string routerListener: type: object required: @@ -1681,6 +1685,10 @@ definitions: items: type: string x-omitempty: false + configs: + type: array + items: + type: string tags: $ref: '#/definitions/tags' routerUpdate: @@ -1711,6 +1719,10 @@ definitions: items: type: string x-omitempty: false + configs: + type: array + items: + type: string tags: $ref: '#/definitions/tags' routerPatch: @@ -1739,6 +1751,10 @@ definitions: items: type: string x-omitempty: false + configs: + type: array + items: + type: string tags: $ref: '#/definitions/tags' diff --git a/go.mod b/go.mod index 15034ec76..21ae98597 100644 --- a/go.mod +++ b/go.mod @@ -1,13 +1,13 @@ module github.com/openziti/ziti/v2 -go 1.26.1 +go 1.26.4 // pinned replace github.com/michaelquigley/pfxlog => github.com/michaelquigley/pfxlog v0.6.10 require ( github.com/AppsFlyer/go-sundheit v0.6.0 - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.22.0 github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.10.0 github.com/Jeffail/gabs v1.4.0 github.com/Jeffail/gabs/v2 v2.7.0 @@ -16,7 +16,7 @@ require ( github.com/antlr4-go/antlr/v4 v4.13.1 github.com/biogo/store v0.0.0-20201120204734-aad293a2328f github.com/blang/semver v3.5.1+incompatible - github.com/c-bata/go-prompt v0.2.6 + github.com/c-bata/go-prompt v0.2.5 github.com/cenkalti/backoff/v4 v4.3.0 github.com/coreos/go-iptables v0.8.0 github.com/dgryski/dgoogauth v0.0.0-20190221195224-5a805980a5f3 @@ -25,17 +25,17 @@ require ( github.com/fatih/color v1.19.0 github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa github.com/gaissmai/extnetip v1.3.1 - github.com/go-acme/lego/v4 v4.35.2 + github.com/go-acme/lego/v4 v4.18.0 github.com/go-jose/go-jose/v4 v4.1.4 - github.com/go-openapi/errors v0.22.7 + github.com/go-openapi/errors v0.22.8 github.com/go-openapi/jsonpointer v0.23.1 - github.com/go-openapi/loads v0.23.3 - github.com/go-openapi/runtime v0.32.2 - github.com/go-openapi/spec v0.22.4 - github.com/go-openapi/strfmt v0.26.2 - github.com/go-openapi/swag v0.26.0 - github.com/go-openapi/swag/jsonutils v0.26.0 - github.com/go-openapi/validate v0.25.2 + github.com/go-openapi/loads v0.24.0 + github.com/go-openapi/runtime v0.32.3 + github.com/go-openapi/spec v0.22.5 + github.com/go-openapi/strfmt v0.26.3 + github.com/go-openapi/swag v0.26.1 + github.com/go-openapi/swag/jsonutils v0.26.1 + github.com/go-openapi/validate v0.26.0 github.com/go-resty/resty/v2 v2.17.2 github.com/go-viper/mapstructure/v2 v2.5.0 github.com/golang-jwt/jwt/v5 v5.3.1 @@ -50,7 +50,7 @@ require ( github.com/hashicorp/golang-lru/v2 v2.0.7 github.com/hashicorp/raft v1.7.3 github.com/hashicorp/raft-boltdb/v2 v2.3.1 - github.com/jedib0t/go-pretty/v6 v6.7.10 + github.com/jedib0t/go-pretty/v6 v6.8.1 github.com/jellydator/ttlcache/v3 v3.4.0 github.com/jessevdk/go-flags v1.6.1 github.com/jinzhu/copier v0.4.0 @@ -65,15 +65,15 @@ require ( github.com/openziti/agent v1.0.33 github.com/openziti/channel/v4 v4.3.11 github.com/openziti/cobra-to-md v1.0.1 - github.com/openziti/edge-api v0.31.0 - github.com/openziti/foundation/v2 v2.0.92 - github.com/openziti/identity v1.0.130 + github.com/openziti/edge-api v0.31.1 + github.com/openziti/foundation/v2 v2.0.95 + github.com/openziti/identity v1.0.133 github.com/openziti/jwks v1.0.6 github.com/openziti/metrics v1.4.5 github.com/openziti/runzmd v1.0.90 github.com/openziti/sdk-golang v1.8.0 - github.com/openziti/secretstream v0.1.49 - github.com/openziti/transport/v2 v2.0.215 + github.com/openziti/secretstream v0.1.51 + github.com/openziti/transport/v2 v2.0.216 github.com/openziti/x509-claims v1.0.3 github.com/openziti/xweb/v3 v3.0.4 github.com/orcaman/concurrent-map/v2 v2.0.1 @@ -95,13 +95,13 @@ require ( go.etcd.io/bbolt v1.4.3 go.uber.org/atomic v1.11.0 go4.org v0.0.0-20260112195520-a5071408f32f - golang.org/x/crypto v0.52.0 - golang.org/x/net v0.55.0 + golang.org/x/crypto v0.53.0 + golang.org/x/net v0.56.0 golang.org/x/oauth2 v0.36.0 - golang.org/x/sync v0.20.0 - golang.org/x/sys v0.45.0 - golang.org/x/term v0.43.0 - golang.org/x/text v0.37.0 + golang.org/x/sync v0.21.0 + golang.org/x/sys v0.46.0 + golang.org/x/term v0.44.0 + golang.org/x/text v0.38.0 google.golang.org/protobuf v1.36.11 gopkg.in/AlecAivazis/survey.v1 v1.8.8 gopkg.in/resty.v1 v1.12.0 @@ -112,7 +112,7 @@ require ( require ( github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0 // indirect - github.com/Azure/go-amqp v1.6.0 // indirect + github.com/Azure/go-amqp v1.7.0 // indirect github.com/MichaelMure/go-term-text v0.3.1 // indirect github.com/alecthomas/chroma v0.10.0 // indirect github.com/andybalholm/brotli v1.2.1 // indirect @@ -120,35 +120,34 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/bmatcuk/doublestar/v4 v4.10.0 // indirect github.com/boltdb/bolt v1.3.1 // indirect - github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/clipperhouse/uax29/v2 v2.7.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect - github.com/creack/pty v1.1.11 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/creack/pty v1.1.24 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect github.com/dlclark/regexp2 v1.12.0 // indirect github.com/docker/go-units v0.5.0 // indirect - github.com/ebitengine/purego v0.10.0 // indirect + github.com/ebitengine/purego v0.10.1 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.10.1 // indirect - github.com/go-chi/chi/v5 v5.2.5 // indirect + github.com/go-chi/chi/v5 v5.3.0 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect - github.com/go-openapi/analysis v0.25.0 // indirect - github.com/go-openapi/jsonreference v0.21.5 // indirect - github.com/go-openapi/runtime/server-middleware v0.30.0 // indirect - github.com/go-openapi/swag/cmdutils v0.26.0 // indirect - github.com/go-openapi/swag/conv v0.26.0 // indirect - github.com/go-openapi/swag/fileutils v0.26.0 // indirect - github.com/go-openapi/swag/jsonname v0.26.0 // indirect - github.com/go-openapi/swag/loading v0.26.0 // indirect - github.com/go-openapi/swag/mangling v0.26.0 // indirect - github.com/go-openapi/swag/netutils v0.26.0 // indirect - github.com/go-openapi/swag/stringutils v0.26.0 // indirect - github.com/go-openapi/swag/typeutils v0.26.0 // indirect - github.com/go-openapi/swag/yamlutils v0.26.0 // indirect + github.com/go-openapi/analysis v0.25.2 // indirect + github.com/go-openapi/jsonreference v0.21.6 // indirect + github.com/go-openapi/runtime/server-middleware v0.32.3 // indirect + github.com/go-openapi/swag/cmdutils v0.26.1 // indirect + github.com/go-openapi/swag/conv v0.26.1 // indirect + github.com/go-openapi/swag/fileutils v0.26.1 // indirect + github.com/go-openapi/swag/jsonname v0.26.1 // indirect + github.com/go-openapi/swag/loading v0.26.1 // indirect + github.com/go-openapi/swag/mangling v0.26.1 // indirect + github.com/go-openapi/swag/netutils v0.26.1 // indirect + github.com/go-openapi/swag/stringutils v0.26.1 // indirect + github.com/go-openapi/swag/typeutils v0.26.1 // indirect + github.com/go-openapi/swag/yamlutils v0.26.1 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/gomarkdown/markdown v0.0.0-20260417124207-7d523f7318df // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect @@ -160,11 +159,11 @@ require ( github.com/kr/pty v1.1.8 // indirect github.com/kyokomi/emoji/v2 v2.2.13 // indirect github.com/lufia/plan9stats v0.0.0-20260330125221-c963978e514e // indirect - github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-colorable v0.1.15 // indirect github.com/mattn/go-isatty v0.0.22 // indirect - github.com/mattn/go-runewidth v0.0.23 // indirect + github.com/mattn/go-runewidth v0.0.24 // indirect github.com/mattn/go-tty v0.0.8 // indirect - github.com/mdlayher/socket v0.6.0 // indirect + github.com/mdlayher/socket v0.6.1 // indirect github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/miekg/pkcs11 v1.1.2 // indirect github.com/mitchellh/go-ps v1.0.0 // indirect @@ -174,16 +173,16 @@ require ( github.com/openziti/go-term-markdown v1.0.1 // indirect github.com/parallaxsecond/parsec-client-go v0.0.0-20221025095442-f0a77d263cf9 // indirect github.com/pelletier/go-toml/v2 v2.3.1 // indirect - github.com/pion/dtls/v3 v3.1.2 // indirect + github.com/pion/dtls/v3 v3.1.4 // indirect github.com/pion/logging v0.2.4 // indirect - github.com/pion/transport/v4 v4.0.1 // indirect - github.com/pkg/term v1.2.0-beta.2 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/pion/transport/v4 v4.0.2 // indirect + github.com/pkg/term v1.1.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/rs/cors v1.11.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.12.0 // indirect - github.com/shirou/gopsutil/v4 v4.26.4 // indirect + github.com/shirou/gopsutil/v4 v4.26.5 // indirect github.com/shoenig/go-m1cpu v0.2.1 // indirect github.com/speps/go-hashids v2.0.0+incompatible // indirect github.com/spf13/afero v1.15.0 // indirect @@ -200,13 +199,13 @@ require ( github.com/zitadel/schema v1.3.2 // indirect go.mozilla.org/pkcs7 v0.9.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/otel v1.43.0 // indirect - go.opentelemetry.io/otel/metric v1.43.0 // indirect - go.opentelemetry.io/otel/trace v1.43.0 // indirect + go.opentelemetry.io/otel v1.44.0 // indirect + go.opentelemetry.io/otel/metric v1.44.0 // indirect + go.opentelemetry.io/otel/trace v1.44.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a // indirect - golang.org/x/mod v0.36.0 // indirect + golang.org/x/exp v0.0.0-20260603202125-055de637280b // indirect + golang.org/x/mod v0.37.0 // indirect golang.org/x/tools v0.45.0 // indirect - gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect nhooyr.io/websocket v1.8.17 // indirect ) diff --git a/go.sum b/go.sum index 4e70d24e6..53f183a3a 100644 --- a/go.sum +++ b/go.sum @@ -41,21 +41,21 @@ github.com/AlecAivazis/survey/v2 v2.0.5/go.mod h1:WYBhg6f0y/fNYUuesWQc0PKbJcEliG github.com/AppsFlyer/go-sundheit v0.6.0 h1:d2hBvCjBSb2lUsEWGfPigr4MCOt04sxB+Rppl0yUMSk= github.com/AppsFlyer/go-sundheit v0.6.0/go.mod h1:LDdBHD6tQBtmHsdW+i1GwdTt6Wqc0qazf5ZEJVTbTME= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1 h1:jHb/wfvRikGdxMXYV3QG/SzUOPYN9KEUUuC0Yd0/vC0= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1/go.mod h1:pzBXCYn05zvYIrwLgtK8Ap8QcjRg+0i76tMQdWN6wOk= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.22.0 h1:aokoqcHvaGjiM3VpjKDfMMnF/8epJ+Q1HLJ7CudztqE= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.22.0/go.mod h1:/WYEx9pcM9Y+Dd/APJaNlSvVSvzl54rrMdZT5+Oi2LM= 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.12.0 h1:fhqpLE3UEXi9lPaBRpQ6XuRW0nU7hgg4zlmZZa+a9q4= github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0/go.mod h1:7dCRMLwisfRH3dBupKeNCioWYUZ4SS09Z14H+7i8ZoY= github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.10.0 h1:kE5kpeiSqu4jcCQ/sWuyggMXJ/pT6oQ99+8hwPmyeJ0= github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.10.0/go.mod h1:IAN3Z0DMtehoxoQQnfqg1891z1P7GNoDryKtFcAyMBI= -github.com/Azure/go-amqp v1.6.0 h1:pMnBstxSd2JnvTopR/L9MUdQi4e5Mp9FscP4kZ0rZ8M= -github.com/Azure/go-amqp v1.6.0/go.mod h1:vZAogwdrkbyK3Mla8m/CxSc/aKdnTZ4IbPxl51Y5WZE= +github.com/Azure/go-amqp v1.7.0 h1:9VlH/LEWr386XWWJRNON0eslFqSClYBXP4HewvIqkDQ= +github.com/Azure/go-amqp v1.7.0/go.mod h1:pCJaHsvRlmmFUpxyQbh2qPkUFqYJeRBTqJSHKJadvPg= github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 h1:XRzhVemXdgvJqCH0sFfrBUTnUJSBrBf7++ypk+twtRs= github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= -github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Jeffail/gabs v1.4.0 h1://5fYRRTq1edjfIrQGvdkcd22pkYUrHZ5YC/H2GJVAo= @@ -102,12 +102,10 @@ github.com/bmatcuk/doublestar/v4 v4.10.0 h1:zU9WiOla1YA122oLM6i4EXvGW62DvKZVxIe6 github.com/bmatcuk/doublestar/v4 v4.10.0/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/c-bata/go-prompt v0.2.6 h1:POP+nrHE+DfLYx370bedwNhsqmpCUynWPxuHi0C5vZI= -github.com/c-bata/go-prompt v0.2.6/go.mod h1:/LMAke8wD2FsNu9EXNdHxNLbd9MedkPnCdfpU9wwHfY= +github.com/c-bata/go-prompt v0.2.5 h1:3zg6PecEywxNn0xiqcXHD96fkbxghD+gdB2tbsYfl+Y= +github.com/c-bata/go-prompt v0.2.5/go.mod h1:vFnjEGDIIA/Lib7giyE4E9c50Lvl8j0S+7FVlAwDAVw= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= -github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= @@ -134,12 +132,11 @@ github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6N github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= +github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/dgoogauth v0.0.0-20190221195224-5a805980a5f3 h1:AqeKSZIG/NIC75MNQlPy/LM3LxfpLwahICJBHwSMFNc= github.com/dgryski/dgoogauth v0.0.0-20190221195224-5a805980a5f3/go.mod h1:hEfFauPHz7+NnjR/yHJGhrKo1Za+zStgwUETx3yzqgY= github.com/dineshappavoo/basex v0.0.0-20170425072625-481a6f6dc663 h1:fctNkSsavbXpt8geFWZb8n+noCqS8MrOXRJ/YfdZ2dQ= @@ -149,8 +146,8 @@ github.com/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU= -github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/ebitengine/purego v0.10.1 h1:dewVBCBT2GaMu1SrNTYxQhgQBethzfhiwvZiLGP/qyY= +github.com/ebitengine/purego v0.10.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/ef-ds/deque v1.0.4 h1:iFAZNmveMT9WERAkqLJ+oaABF9AcVQ5AjXem/hroniI= github.com/ef-ds/deque v1.0.4/go.mod h1:gXDnTC3yqvBcHbq2lcExjtAcVrOnJCbMcZXmuj8Z4tg= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -181,10 +178,10 @@ github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXt github.com/gaissmai/extnetip v1.3.1 h1:e8xa3hJG/+6NevjZXVkC60WBLypNjH/ugEy4kaPoKAU= github.com/gaissmai/extnetip v1.3.1/go.mod h1:PepswGWH0GJ4XSdiY7bY2EaEPpCQs7OaYcySeW525fg= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-acme/lego/v4 v4.35.2 h1:uVQg+KC/yj9R2g7Q9W5wDqhvQvxV5SMu5eqFVoN5xZU= -github.com/go-acme/lego/v4 v4.35.2/go.mod h1:pX2jN5n8OphMGY1IaMjYm5DAEzguBaKRt8AvJAgJXpc= -github.com/go-chi/chi/v5 v5.2.5 h1:Eg4myHZBjyvJmAFjFvWgrqDTXFyOzjj7YIm3L3mu6Ug= -github.com/go-chi/chi/v5 v5.2.5/go.mod h1:X7Gx4mteadT3eDOMTsXzmI4/rwUpOwBHLpAfupzFJP0= +github.com/go-acme/lego/v4 v4.18.0 h1:2hH8KcdRBSb+p5o9VZIm61GAOXYALgILUCSs1Q+OYsk= +github.com/go-acme/lego/v4 v4.18.0/go.mod h1:Blkg3izvXpl3zxk7WKngIuwR2I/hvYVP3vRnvgBp7m8= +github.com/go-chi/chi/v5 v5.3.0 h1:halUjDxhshgXHMrao5bB8eNBXo/rnzwr8m5m36glehM= +github.com/go-chi/chi/v5 v5.3.0/go.mod h1:R+tYY2hNuVUUjxoPtqUdgBqevM9s9njzkTLutVsOCto= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -204,56 +201,56 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-openapi/analysis v0.25.0 h1:EnjAq1yO8wEO9HbPmY8vLPEIkdZuuFhCAKBPvCB7bCs= -github.com/go-openapi/analysis v0.25.0/go.mod h1:5WFTRE43WLkPG9r9OtlMfqkkvUTYLVVCIxLlEpyF8kE= -github.com/go-openapi/errors v0.22.7 h1:JLFBGC0Apwdzw3484MmBqspjPbwa2SHvpDm0u5aGhUA= -github.com/go-openapi/errors v0.22.7/go.mod h1://QW6SD9OsWtH6gHllUCddOXDL0tk0ZGNYHwsw4sW3w= +github.com/go-openapi/analysis v0.25.2 h1:I0vy4n3alz+DHTiN1PRhCb7QZxkK6g5YmswZKv2TKuw= +github.com/go-openapi/analysis v0.25.2/go.mod h1:Uhs1t/2XR10EnwONYILGEzw8gcfGIG5Xk5K2AxnhqDo= +github.com/go-openapi/errors v0.22.8 h1:oP7sW7TWc3wFFjrzzj0nI83H2qMBkNjNfSd+XRejk/I= +github.com/go-openapi/errors v0.22.8/go.mod h1:BuUoHcYrU6E7V9gfj1I5wLQqgtIHnup/alXZ8KdgQ0w= github.com/go-openapi/jsonpointer v0.23.1 h1:1HBACs7XIwR2RcmItfdSFlALhGbe6S92p0ry4d1GWg4= github.com/go-openapi/jsonpointer v0.23.1/go.mod h1:iWRmZTrGn7XwYhtPt/fvdSFj1OfNBngqRT2UG3BxSqY= -github.com/go-openapi/jsonreference v0.21.5 h1:6uCGVXU/aNF13AQNggxfysJ+5ZcU4nEAe+pJyVWRdiE= -github.com/go-openapi/jsonreference v0.21.5/go.mod h1:u25Bw85sX4E2jzFodh1FOKMTZLcfifd1Q+iKKOUxExw= -github.com/go-openapi/loads v0.23.3 h1:g5Xap1JfwKkUnZdn+S0L3SzBDpcTIYzZ5Qaag0YDkKQ= -github.com/go-openapi/loads v0.23.3/go.mod h1:NOH07zLajXo8y55hom0omlHWDVVvCwBM/S+csCK8LqA= -github.com/go-openapi/runtime v0.32.2 h1:X9mZz716lFwYZ6bFV1BBnthNdHTy46zKM5Em4D1UISI= -github.com/go-openapi/runtime v0.32.2/go.mod h1:IfM3cpgencPuwBp5Uo16i2IQaE74odL7Q4DCGovIQac= -github.com/go-openapi/runtime/server-middleware v0.30.0 h1:8rPoJ/xv7JL8BsovaqboKETlpWBArVh8n+0L/GyePog= -github.com/go-openapi/runtime/server-middleware v0.30.0/go.mod h1:OYNT/TxNvB/VK5oe4htM2jDTwlEXuejVJmu0DVZfAMs= -github.com/go-openapi/spec v0.22.4 h1:4pxGjipMKu0FzFiu/DPwN3CTBRlVM2yLf/YTWorYfDQ= -github.com/go-openapi/spec v0.22.4/go.mod h1:WQ6Ai0VPWMZgMT4XySjlRIE6GP1bGQOtEThn3gcWLtQ= -github.com/go-openapi/strfmt v0.26.2 h1:ysjheCh4i1rmFEo2LanhELDNucNzfWTZhUDKgWWPaFM= -github.com/go-openapi/strfmt v0.26.2/go.mod h1:fXh1e449cyUn2NYuz+wb3wARBUdMl7qPEZwX00nqivY= -github.com/go-openapi/swag v0.26.0 h1:GVDXCmfvhfu1BxiHo8/FA+BbKmhecHnG3varjON5/RI= -github.com/go-openapi/swag v0.26.0/go.mod h1:82g3193sZJRbocs7bNCqGfIgq8pkuwVwCfhKIRlEQF0= -github.com/go-openapi/swag/cmdutils v0.26.0 h1:iowihOcvq7y4egO8cOq0dmfohz6wfeQ63U1EnuhO2TU= -github.com/go-openapi/swag/cmdutils v0.26.0/go.mod h1:Sm1MVFMkF6guJJ+pQqHnQA3N0j9qALV3NxzDSv6bETM= -github.com/go-openapi/swag/conv v0.26.0 h1:5yGGsPYI1ZCva93U0AoKi/iZrNhaJEjr324YVsiD89I= -github.com/go-openapi/swag/conv v0.26.0/go.mod h1:tpAmIL7X58VPnHHiSO4uE3jBeRamGsFsfdDeDtb5ECE= -github.com/go-openapi/swag/fileutils v0.26.0 h1:WJoPRvsA7QRiiWluowkLJa9jaYR7FCuxmDvnCgaRRxU= -github.com/go-openapi/swag/fileutils v0.26.0/go.mod h1:0WDJ7lp67eNjPMO50wAWYlKvhOb6CQ37rzR7wrgI8Tc= -github.com/go-openapi/swag/jsonname v0.26.0 h1:gV1NFX9M8avo0YSpmWogqfQISigCmpaiNci8cGECU5w= -github.com/go-openapi/swag/jsonname v0.26.0/go.mod h1:urBBR8bZNoDYGr653ynhIx+gTeIz0ARZxHkAPktJK2M= -github.com/go-openapi/swag/jsonutils v0.26.0 h1:FawFML2iAXsPqmERscuMPIHmFsoP1tOqWkxBaKNMsnA= -github.com/go-openapi/swag/jsonutils v0.26.0/go.mod h1:2VmA0CJlyFqgawOaPI9psnjFDqzyivIqLYN34t9p91E= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.26.0 h1:apqeINu/ICHouqiRZbyFvuDge5jCmmLTqGQ9V95EaOM= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.26.0/go.mod h1:AyM6QT8uz5IdKxk5akv0y6u4QvcL9GWERt0Jx/F/R8Y= -github.com/go-openapi/swag/loading v0.26.0 h1:Apg6zaKhCJurpJer0DCxq99qwmhFddBhaMX7kilDcko= -github.com/go-openapi/swag/loading v0.26.0/go.mod h1:dBxQ/6V2uBaAQdevN18VELE6xSpJWZxLX4txe12JwDg= -github.com/go-openapi/swag/mangling v0.26.0 h1:Du2YC4YLA/Y5m/YKQd7AnY5qq0wRKSFZTTt8ktFaXcQ= -github.com/go-openapi/swag/mangling v0.26.0/go.mod h1:jifS7W9vbg+pw63bT+GI53otluMQL3CeemuyCHKwVx0= -github.com/go-openapi/swag/netutils v0.26.0 h1:CmZp+ZT7HrmFwrC3GdGsXBq2+42T1bjKBapcqVpIs3c= -github.com/go-openapi/swag/netutils v0.26.0/go.mod h1:5iK+Ok3ZohWWex1C50BFTPexi03UaPwjW4Oj8kgrpwo= -github.com/go-openapi/swag/stringutils v0.26.0 h1:qZQngLxs5s7SLijc3N2ZO+fUq2o8LjuWAASSrJuh+xg= -github.com/go-openapi/swag/stringutils v0.26.0/go.mod h1:sWn5uY+QIIspwPhvgnqJsH8xqFT2ZbYcvbcFanRyhFE= -github.com/go-openapi/swag/typeutils v0.26.0 h1:2kdEwdiNWy+JJdOvu5MA2IIg2SylWAFuuyQIKYybfq4= -github.com/go-openapi/swag/typeutils v0.26.0/go.mod h1:oovDuIUvTrEHVMqWilQzKzV4YlSKgyZmFh7AlfABNVE= -github.com/go-openapi/swag/yamlutils v0.26.0 h1:H7O8l/8NJJQ/oiReEN+oMpnGMyt8G0hl460nRZxhLMQ= -github.com/go-openapi/swag/yamlutils v0.26.0/go.mod h1:1evKEGAtP37Pkwcc7EWMF0hedX0/x3Rkvei2wtG/TbU= +github.com/go-openapi/jsonreference v0.21.6 h1:NZ5nGfnaM1n4I43Xjm1e5/M2GjOwQwndQz22uhxwD+Y= +github.com/go-openapi/jsonreference v0.21.6/go.mod h1:xzbgtQ3ZbWxvET3AxdzCJlJt6vkovbf+IfSPJjD0tUY= +github.com/go-openapi/loads v0.24.0 h1:4LLorXRPTzIN9V6ngMUZbAscsBOUBk3Oa8cClu/bFrQ= +github.com/go-openapi/loads v0.24.0/go.mod h1:xQMgX+hw5xRAhGrcDXxeMw78IFqUpIzhleu3HqPhyF4= +github.com/go-openapi/runtime v0.32.3 h1:J7Ycy5DJmhhP1By3NifhRUjnkXTrk21qbeqSULjwX8U= +github.com/go-openapi/runtime v0.32.3/go.mod h1:/WTQi0fa5DiGnnCXQKsTkSm15OzJp8Uz3H2t+67TBr4= +github.com/go-openapi/runtime/server-middleware v0.32.3 h1:Y/6h9ix9NCoMG04XazRwX6eA3alh4+JZ6qXdar5yd24= +github.com/go-openapi/runtime/server-middleware v0.32.3/go.mod h1:fYPep4GdTwg/XqZUjR40uIM/8C12Ba5M+MrGCiwpTHo= +github.com/go-openapi/spec v0.22.5 h1:KhO7RBlKQfonUWX2WzQCoLIXVA6AcNqDGZ3a1Dutdlo= +github.com/go-openapi/spec v0.22.5/go.mod h1:vxpOtMya5TXtENXKE5bKqv5NjocVhyhxHrlZfvKnZ74= +github.com/go-openapi/strfmt v0.26.3 h1:rzmslHarJgBbf2qfGge+X3htclQfmXqBZMm0Too0HhU= +github.com/go-openapi/strfmt v0.26.3/go.mod h1:a5nsUw0oRpQzZeOwx8bi6cKbzFZslpbCKt1LEot+KnQ= +github.com/go-openapi/swag v0.26.1 h1:l5sVEyVpwj+DDYeZyo7wQI/Ebn/mKYIyGB/pFwAfGoQ= +github.com/go-openapi/swag v0.26.1/go.mod h1:yNY38BbIVthxbkDtq1UHBCGasBqjakW3lCR6ANzdBEw= +github.com/go-openapi/swag/cmdutils v0.26.1 h1:f2iE1ijYaJ3nuu5PaEMx3zpEhzhZFgivCJObWEObLIQ= +github.com/go-openapi/swag/cmdutils v0.26.1/go.mod h1:Sm1MVFMkF6guJJ+pQqHnQA3N0j9qALV3NxzDSv6bETM= +github.com/go-openapi/swag/conv v0.26.1 h1:slr5FVkg9Wc3Y5zcwenD8Sd/PQ94b2I/QJI7N7KTBpg= +github.com/go-openapi/swag/conv v0.26.1/go.mod h1:mvQXgPptZk9GTrFgGwWvT4q+dN+zQej9JfmGwnipz1A= +github.com/go-openapi/swag/fileutils v0.26.1 h1:K1XCM2CGhfNsc6YDt6v7Q5+1e59rftYWdcu/isZhvFw= +github.com/go-openapi/swag/fileutils v0.26.1/go.mod h1:mYUgxQAKX4ShS3qvvySx+/9yrlUnDhjiD1CalaQl8lQ= +github.com/go-openapi/swag/jsonname v0.26.1 h1:VReupaV6WxlAsCn0e4DUfgV6bPmINnPpyJDLqSfNPcE= +github.com/go-openapi/swag/jsonname v0.26.1/go.mod h1:OvdW6BoWoj33pTfi7x9vFrgmT+fk7aw0BRwvCE0YOuc= +github.com/go-openapi/swag/jsonutils v0.26.1 h1:2hdBfFkHg+7Wrz2VsCbeyR6hzkRDs7AztnMR2u84yOY= +github.com/go-openapi/swag/jsonutils v0.26.1/go.mod h1:U+RMJH3wa+6BRiphuRtIyI8fW9HPFqFQ4sHk2oRx0UQ= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.26.1 h1:1CD7NiLLb/TXl3tOnFYU4b+mNfb5rtgHkaA+q7RMYYQ= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.26.1/go.mod h1:ZWafc8nMdYzTE3uYY6W86f0n46+IF0g4uUyRhJw/kXc= +github.com/go-openapi/swag/loading v0.26.1 h1:E9K4wqXeROlhjFQ13K9zMz6ojFGXIggGe+ad1odrK9w= +github.com/go-openapi/swag/loading v0.26.1/go.mod h1:3qvRIlWzWdq1HvmldwmuJ2ohpcAryN6xVt2OTKd0/7E= +github.com/go-openapi/swag/mangling v0.26.1 h1:gpYI4WuPKFJJVjV5cDLGlDVJhFIxYjQc7yN5eEb4CqM= +github.com/go-openapi/swag/mangling v0.26.1/go.mod h1:POETDH01hqAdASXfw7ISEd9bCOE6xBHOt8NHmGZRmYM= +github.com/go-openapi/swag/netutils v0.26.1 h1:BNctoc39WTAUMxyAs355fExOPzMZtPbZ0ZZ1Am2FR5M= +github.com/go-openapi/swag/netutils v0.26.1/go.mod h1:y02vByhZhQPAVwOX+0KipXFZ/hUbk6G/Enhf5rGaOkQ= +github.com/go-openapi/swag/stringutils v0.26.1 h1:f88uYyTso7TnHrKM/bUBsQ5e2wKf37cpgo6pvbzd9yU= +github.com/go-openapi/swag/stringutils v0.26.1/go.mod h1:Sc6d3bU8fgk5AyZR8/8jEQ+Is/Ald+TD/IIggPN8UJk= +github.com/go-openapi/swag/typeutils v0.26.1 h1:yg42FgMzRR6PVQ3M3qHz1s+Y6/P4HoJ3cBarXa3OVnU= +github.com/go-openapi/swag/typeutils v0.26.1/go.mod h1:VfnV+oUtSP2vCSCn2aJgnr8OevUYemyIzzS1VOzS10o= +github.com/go-openapi/swag/yamlutils v0.26.1 h1:0TSLK+lXs9vfIhAWzBeI/lOzEnIoot6WTCO1aAeWFTk= +github.com/go-openapi/swag/yamlutils v0.26.1/go.mod h1:7W5b7PRX9MxwL7TjeG7H8HkyBGRsIDRObhyMWFgBI2M= github.com/go-openapi/testify/enable/yaml/v2 v2.5.1 h1:q9NtHwK4qHF7yZziBPvZyv7zWAIk8ok88Gh2mR6Jpc8= github.com/go-openapi/testify/enable/yaml/v2 v2.5.1/go.mod h1:JW0MXIotCYps/XsgJnG3a8Q7rE5xAiBwoOD5OfaIQBk= github.com/go-openapi/testify/v2 v2.5.1 h1:TMdhCaw8fUNraVSf3Omoob1dO/AzBfhtFAPW0an6sBo= github.com/go-openapi/testify/v2 v2.5.1/go.mod h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw= -github.com/go-openapi/validate v0.25.2 h1:12NsfLAwGegqbGWr2CnvT65X/Q2USJipmJ9b7xDJZz0= -github.com/go-openapi/validate v0.25.2/go.mod h1:Pgl1LpPPGFnZ+ys4/hTlDiRYQdI1ocKypgE+8Q8BLfY= +github.com/go-openapi/validate v0.26.0 h1:dxWzQ3F+vb1SajqUxHjwb5T4mTpSHmdrtv5Bi7+ZNhw= +github.com/go-openapi/validate v0.26.0/go.mod h1:b4o00uq7fJeJA+wWhVFCJpKTctzeFwzZImGGmHsl2JA= github.com/go-resty/resty/v2 v2.17.2 h1:FQW5oHYcIlkCNrMD2lloGScxcHJ0gkjshV3qcQAyHQk= github.com/go-resty/resty/v2 v2.17.2/go.mod h1:kCKZ3wWmwJaNc7S29BRtUhJwy7iqmn+2mLtQrOyQlVA= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -402,8 +399,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jedib0t/go-pretty/v6 v6.7.10 h1:B/2qW2Bkv2L6n14PP8o1kx75kWzHOQ3YTluWzg9icac= -github.com/jedib0t/go-pretty/v6 v6.7.10/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU= +github.com/jedib0t/go-pretty/v6 v6.8.1 h1:0fkCNhjrX0zPpwkWaDYU5VMrygg41Tu197mWILIJoqQ= +github.com/jedib0t/go-pretty/v6 v6.8.1/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU= github.com/jellydator/ttlcache/v3 v3.4.0 h1:YS4P125qQS0tNhtL6aeYkheEaB/m8HCqdMMP4mnWdTY= github.com/jellydator/ttlcache/v3 v3.4.0/go.mod h1:Hw9EgjymziQD3yGsQdf1FqFdpp7YjFMd4Srg5EJlgD4= github.com/jeremija/gosubmit v0.2.8 h1:mmSITBz9JxVtu8eqbN+zmmwX7Ij2RidQxhcwRVI4wqA= @@ -463,8 +460,8 @@ github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= -github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-colorable v0.1.15 h1:+u9SLTRGnXv73cEsnsmoZBom+dMU88B2M0aDcWy0/jY= +github.com/mattn/go-colorable v0.1.15/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -477,16 +474,16 @@ github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJ github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= -github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw= -github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= +github.com/mattn/go-runewidth v0.0.24 h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/ay2DU= +github.com/mattn/go-runewidth v0.0.24/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0= github.com/mattn/go-tty v0.0.8 h1:yxtc0Ye17/1ne/bjy993YUoyP8bJJFa9n5M9XTdwoZQ= github.com/mattn/go-tty v0.0.8/go.mod h1:f2i5ZOvXBU/tCABmLmOfzLz9azMo5wdAaElRNnJKr+k= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mdlayher/netlink v1.11.2 h1:HKh2jqe+omdSWcQ88nrT7INE61B0NXfiSPFdgL4YbNI= github.com/mdlayher/netlink v1.11.2/go.mod h1:uT2Yc/QLaZubzDpZIBi9d4GoeLwtp3x1AMeqSRrK2sA= -github.com/mdlayher/socket v0.6.0 h1:ScZPaAGyO1icQnbFrhPM8mnXyMu9qukC1K4ZoM2IQKU= -github.com/mdlayher/socket v0.6.0/go.mod h1:q7vozUAnxSqnjHc12Fik5yUKIzfZ8ITCfMkhOtE9z18= +github.com/mdlayher/socket v0.6.1 h1:M7uj2NtuujUY4mYr1C57NmfNiRHbkKpnBxO856lsc3A= +github.com/mdlayher/socket v0.6.1/go.mod h1:+/SGtqc9V+5dAuRgQsU0fGBI+oRDiW7O2Obx10OIWfg= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= @@ -543,14 +540,14 @@ github.com/openziti/channel/v4 v4.3.11 h1:ugezUhTEuSQnVFKUioN1gh6f+ZF4eBqx6mOrT5 github.com/openziti/channel/v4 v4.3.11/go.mod h1:WZpOeuPliA7mJ3m7Pal8WdYu74eHMzkM/1Z9AMLmUAg= github.com/openziti/cobra-to-md v1.0.1 h1:WRinNoIRmwWUSJm+pSNXMjOrtU48oxXDZgeCYQfVXxE= github.com/openziti/cobra-to-md v1.0.1/go.mod h1:FjCpk/yzHF7/r28oSTNr5P57yN5VolpdAtS/g7KNi2c= -github.com/openziti/edge-api v0.31.0 h1:QdaaPnKQj4B40q404+c8VZxMsoVpfGpfOhzs3LLCd/A= -github.com/openziti/edge-api v0.31.0/go.mod h1:pDtCR6Mq0h5e8ulJhmuhPshEBa39hpQy+yTtLpUSBOs= -github.com/openziti/foundation/v2 v2.0.92 h1:vmyZfY/Iw9y2p6jlDWNapK97vjPh+9enMQoly6XPEfo= -github.com/openziti/foundation/v2 v2.0.92/go.mod h1:pb0yHDHb9pNrWOyvLWeDiHhYzJXlzJSz1RmQWBxhrFA= +github.com/openziti/edge-api v0.31.1 h1:0AA2g/fXVkLV5ud89gzXFbcbQF6s9B8L15k+Fi7FhbI= +github.com/openziti/edge-api v0.31.1/go.mod h1:wFExSB9pO7yEwVVuz4AatZeU++dgcjy9pkzeCFLXeno= +github.com/openziti/foundation/v2 v2.0.95 h1:ZB6AeclGCfuI2l3c3PN7stKLp6Ck+P0wBuokY4pp7qo= +github.com/openziti/foundation/v2 v2.0.95/go.mod h1:yhdRzmEzrHxqG8frg2fMmSpR5+iZI1tL/teeaAoWl7U= github.com/openziti/go-term-markdown v1.0.1 h1:9uzMpK4tav6OtvRxRt99WwPTzAzCh+Pj9zWU2FBp3Qg= github.com/openziti/go-term-markdown v1.0.1/go.mod h1:aIhR12zlROVqr7x51DtBALaQZQ3FofBuKDWqCfaz3oo= -github.com/openziti/identity v1.0.130 h1:AU4KV4bbIuWeOZ3YZJDkZoY5AKPPoPVM80JqGshTzDs= -github.com/openziti/identity v1.0.130/go.mod h1:vlz/ZqlHpzmt3jhGKqWSO6/YSu3sxXrQh6J72Z/JWdQ= +github.com/openziti/identity v1.0.133 h1:rOFsV+sQVpy3FJqtShF7NYQxR+678FDQfFUS3ziGNeo= +github.com/openziti/identity v1.0.133/go.mod h1:mZKgg92/dHxGytk8eRCSg2wmEFUp/ajy4KhoArP+g94= github.com/openziti/jwks v1.0.6 h1:PR+9OVaMO8oHEoVQmHqeUBExWwLWyODEGJQK2DXHaqE= github.com/openziti/jwks v1.0.6/go.mod h1:t4xxq8vlXGsPn29kiQVnZBBDDnEoOFqtJoHibkJunQQ= github.com/openziti/metrics v1.4.5 h1:p51HYSQyqaDafizPWluhYjU/rVfY52snER8/BHpfPrU= @@ -559,10 +556,10 @@ github.com/openziti/runzmd v1.0.90 h1:fasGlaq9xV+zohEGDC7Q0nOLA0n8Kpfccribc+VGQV github.com/openziti/runzmd v1.0.90/go.mod h1:ma3b7UdVYAC9ZCVUSjevUH/7yz9asI537XPsEh7+j14= github.com/openziti/sdk-golang v1.8.0 h1:Gt2QT8+bO/qq7eVU/HeMYlBvatddTJoiwE8HS+xwxVo= github.com/openziti/sdk-golang v1.8.0/go.mod h1:2nIjYyl7fBtomYRE6kZGkA3hU7Ene+tI7jqnA4yTWnk= -github.com/openziti/secretstream v0.1.49 h1:qfyex2w4fGtTnvIGSiVXn8prQC2IWajQ4Y76r8x9CD0= -github.com/openziti/secretstream v0.1.49/go.mod h1:wrPNC1z0rh4e3wFW4kYumU1Tx9YoXXc9Im2biyxb0P4= -github.com/openziti/transport/v2 v2.0.215 h1:JkasjdBTa8kcVsLO1fn655GJWBrp6BsMElzSxN9dcEA= -github.com/openziti/transport/v2 v2.0.215/go.mod h1:oPeiTC0UHndnK8mQDAwnqZiefoXA8GfRlvVSMSFRbLc= +github.com/openziti/secretstream v0.1.51 h1:j/rMfIzBNqZD5a1EKV8J4Z5QeaoSK56s/zxvvB08eSA= +github.com/openziti/secretstream v0.1.51/go.mod h1:YapZv2c/SyZyohn6Q0MJkl8SUuBbs9Q6XWSiboBc1jA= +github.com/openziti/transport/v2 v2.0.216 h1:/2ALqUaeDzOfvZwzGSPNtWqMu8srgA1AERF3Nk94nDQ= +github.com/openziti/transport/v2 v2.0.216/go.mod h1:Kh4dP6FtAUbiJvTmRcMJvLVCBmpQOpvUT1jMUCLDxQg= github.com/openziti/x509-claims v1.0.3 h1:HNdQ8Nf1agB3lBs1gahcO6zfkeS4S5xoQ2/PkY4HRX0= github.com/openziti/x509-claims v1.0.3/go.mod h1:Z0WIpBm6c4ecrpRKrou6Gk2wrLWxJO/+tuUwKh8VewE= github.com/openziti/xweb/v3 v3.0.4 h1:sKQJOJDQiWcTkuc37L7oc0Z0jQ5Poh2zaa5raiP0GLc= @@ -578,12 +575,12 @@ github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwp github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.3.1 h1:MYEvvGnQjeNkRF1qUuGolNtNExTDwct51yp7olPtrEc= github.com/pelletier/go-toml/v2 v2.3.1/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= -github.com/pion/dtls/v3 v3.1.2 h1:gqEdOUXLtCGW+afsBLO0LtDD8GnuBBjEy6HRtyofZTc= -github.com/pion/dtls/v3 v3.1.2/go.mod h1:Hw/igcX4pdY69z1Hgv5x7wJFrUkdgHwAn/Q/uo7YHRo= +github.com/pion/dtls/v3 v3.1.4 h1:QhvtMflMfu9Kf0RcDC5BJBle4caPskByrKQR6uuYqpY= +github.com/pion/dtls/v3 v3.1.4/go.mod h1:cr/qotLISUw/9C1m83ZPNZtj9WnXkYLpfCptPqbkInc= github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= -github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k8o= -github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= +github.com/pion/transport/v4 v4.0.2 h1:ifYlPqNwsy6aKQ9y8yzxXlHae5431ZrH2avkD/Rn6Tk= +github.com/pion/transport/v4 v4.0.2/go.mod h1:06hFI+jCFcok2X2MekVufNZ/uzNZXivGBPfviSVcjgM= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -591,11 +588,10 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/term v1.2.0-beta.2 h1:L3y/h2jkuBVFdWiJvNfYfKmzcCnILw7mJWm2JQuMppw= -github.com/pkg/term v1.2.0-beta.2/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= +github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= @@ -641,8 +637,8 @@ github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9t github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shirou/gopsutil/v4 v4.26.4 h1:B4SXVbcwTyrocPHEmWBC4uCYr4Xcu3MK1TXqbprAOWY= -github.com/shirou/gopsutil/v4 v4.26.4/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ= +github.com/shirou/gopsutil/v4 v4.26.5 h1:RPcBXkpz7kOj9PqGFQOlBPZHsyaPvPVQc098y9RmCNM= +github.com/shirou/gopsutil/v4 v4.26.5/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ= github.com/shoenig/go-m1cpu v0.2.1 h1:yqRB4fvOge2+FyRXFkXqsyMoqPazv14Yyy+iyccT2E4= github.com/shoenig/go-m1cpu v0.2.1/go.mod h1:KkDOw6m3ZJQAPHbrzkZki4hnx+pDRR1Lo+ldA56wD5w= github.com/shoenig/test v1.7.0 h1:eWcHtTXa6QLnBvm0jgEabMRN/uJ4DMV3M8xUGgRkZmk= @@ -682,8 +678,8 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4= -github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -750,14 +746,14 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= 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/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= -go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -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/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/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= +go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= +go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= +go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= +go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58= +go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0= +go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk= +go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= @@ -780,8 +776,8 @@ 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.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= -golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -792,8 +788,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a h1:+3jdDGGB8NGb1Zktc737jlt3/A5f6UlwSzmvqUuufxw= -golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a/go.mod h1:d2fgXJLVs4dYDHUk5lwMIfzRzSrWCfGZb0ZqeLa/Vcw= +golang.org/x/exp v0.0.0-20260603202125-055de637280b h1:v1uXiEBHo8QA0LiGCo7UgHMzHT4Kdfpl2zmtH5vaP1Q= +golang.org/x/exp v0.0.0-20260603202125-055de637280b/go.mod h1:d2fgXJLVs4dYDHUk5lwMIfzRzSrWCfGZb0ZqeLa/Vcw= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -820,8 +816,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/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.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= -golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -866,8 +862,8 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= -golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= +golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= +golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -894,8 +890,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -965,13 +961,13 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= -golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= +golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= +golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -981,13 +977,13 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= -golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= +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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1163,8 +1159,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= diff --git a/tests/api_client_management.go b/tests/api_client_management.go index a7e151bc7..ce8405c1c 100644 --- a/tests/api_client_management.go +++ b/tests/api_client_management.go @@ -12,6 +12,7 @@ import ( "github.com/openziti/edge-api/rest_management_api_client/auth_policy" managementAuthenticator "github.com/openziti/edge-api/rest_management_api_client/authenticator" "github.com/openziti/edge-api/rest_management_api_client/certificate_authority" + managementConfig "github.com/openziti/edge-api/rest_management_api_client/config" managementCurrentApiSession "github.com/openziti/edge-api/rest_management_api_client/current_api_session" managementCurrentIdentity "github.com/openziti/edge-api/rest_management_api_client/current_identity" managementEnrollment "github.com/openziti/edge-api/rest_management_api_client/enrollment" @@ -107,6 +108,43 @@ func (helper *ManagementHelperClient) CreateIdentity(name string, isAdmin bool, return resp.Payload.Data, nil } +// CreateConfigType creates a config type with a generated name and the given target. +func (helper *ManagementHelperClient) CreateConfigType(target *string) (*rest_model.CreateLocation, error) { + params := &managementConfig.CreateConfigTypeParams{ + ConfigType: &rest_model.ConfigTypeCreate{ + Name: ToPtr(eid.New()), + Target: target, + }, + } + + resp, err := helper.API.Config.CreateConfigType(params, nil) + + if err != nil { + return nil, rest_util.WrapErr(err) + } + + return resp.Payload.Data, nil +} + +// CreateConfig creates a config with a generated name for the given config type. +func (helper *ManagementHelperClient) CreateConfig(configTypeId string, data interface{}) (*rest_model.CreateLocation, error) { + params := &managementConfig.CreateConfigParams{ + Config: &rest_model.ConfigCreate{ + Name: ToPtr(eid.New()), + ConfigTypeID: &configTypeId, + Data: data, + }, + } + + resp, err := helper.API.Config.CreateConfig(params, nil) + + if err != nil { + return nil, rest_util.WrapErr(err) + } + + return resp.Payload.Data, nil +} + func (helper *ManagementHelperClient) GetIdentity(identityId string) (*rest_model.IdentityDetail, error) { getParams := &managementIdentity.DetailIdentityParams{ ID: identityId, diff --git a/tests/edge_router_test.go b/tests/edge_router_test.go index 34ab0f2d1..184218436 100644 --- a/tests/edge_router_test.go +++ b/tests/edge_router_test.go @@ -25,6 +25,7 @@ import ( "github.com/openziti/edge-api/rest_management_api_client/edge_router" "github.com/openziti/edge-api/rest_management_api_client/role_attributes" "github.com/openziti/edge-api/rest_model" + "github.com/openziti/foundation/v2/errorz" "github.com/openziti/foundation/v2/stringz" "github.com/openziti/foundation/v2/util" "github.com/openziti/ziti/v2/common/eid" @@ -322,3 +323,205 @@ func Test_EdgeRouter(t *testing.T) { ctx.Req.NoError(err) }) } + +func Test_EdgeRouterConfigs(t *testing.T) { + ctx := NewTestContext(t) + defer ctx.Teardown() + ctx.StartServer() + ctx.RequireAdminManagementApiLogin() + + t.Run("create with router-target config should succeed", func(t *testing.T) { + ctx.testContextChanged(t) + ct := ctx.newConfigType() + ct.Target = util.Ptr("router") + ct.Id = ctx.AdminManagementSession.requireCreateEntity(ct) + config := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + + er := newTestEdgeRouter() + er.configs = s(config.Id) + er.id = ctx.AdminManagementSession.requireCreateEntity(er) + ctx.AdminManagementSession.validateEntityWithQuery(er) + }) + + t.Run("create with service-target config should fail", func(t *testing.T) { + ctx.testContextChanged(t) + ct := ctx.newConfigType() + ct.Target = util.Ptr("service") + ct.Id = ctx.AdminManagementSession.requireCreateEntity(ct) + config := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + + er := newTestEdgeRouter() + er.configs = s(config.Id) + resp := ctx.AdminManagementSession.createEntity(er) + ctx.requireFieldError(resp.StatusCode(), resp.Body(), errorz.CouldNotValidateCode, "configs") + }) + + t.Run("create with duplicate config types should fail", func(t *testing.T) { + ctx.testContextChanged(t) + ct := ctx.newConfigType() + ct.Target = util.Ptr("router") + ct.Id = ctx.AdminManagementSession.requireCreateEntity(ct) + config1 := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + config2 := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + + er := newTestEdgeRouter() + er.configs = s(config1.Id, config2.Id) + resp := ctx.AdminManagementSession.createEntity(er) + ctx.requireFieldError(resp.StatusCode(), resp.Body(), errorz.CouldNotValidateCode, "configs") + }) + + t.Run("update should add configs", func(t *testing.T) { + ctx.testContextChanged(t) + ct := ctx.newConfigType() + ct.Target = util.Ptr("router") + ct.Id = ctx.AdminManagementSession.requireCreateEntity(ct) + config1 := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + + ct2 := ctx.newConfigType() + ct2.Target = util.Ptr("router") + ct2.Id = ctx.AdminManagementSession.requireCreateEntity(ct2) + config2 := ctx.AdminManagementSession.requireCreateNewConfig(ct2.Id, map[string]interface{}{"key": "value"}) + + er := newTestEdgeRouter() + er.configs = s(config1.Id) + er.id = ctx.AdminManagementSession.requireCreateEntity(er) + ctx.AdminManagementSession.validateEntityWithQuery(er) + + er.configs = s(config1.Id, config2.Id) + ctx.AdminManagementSession.requireUpdateEntity(er) + ctx.AdminManagementSession.validateUpdate(er) + }) + + t.Run("patch should update configs", func(t *testing.T) { + ctx.testContextChanged(t) + ct := ctx.newConfigType() + ct.Target = util.Ptr("router") + ct.Id = ctx.AdminManagementSession.requireCreateEntity(ct) + config := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + + er := newTestEdgeRouter() + er.id = ctx.AdminManagementSession.requireCreateEntity(er) + + er.configs = s(config.Id) + ctx.AdminManagementSession.requirePatchEntity(er, "configs") + ctx.AdminManagementSession.validateUpdate(er) + }) + + t.Run("update should clear configs", func(t *testing.T) { + ctx.testContextChanged(t) + ct := ctx.newConfigType() + ct.Target = util.Ptr("router") + ct.Id = ctx.AdminManagementSession.requireCreateEntity(ct) + config := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + + er := newTestEdgeRouter() + er.configs = s(config.Id) + er.id = ctx.AdminManagementSession.requireCreateEntity(er) + ctx.AdminManagementSession.validateEntityWithQuery(er) + + er.configs = nil + ctx.AdminManagementSession.requireUpdateEntity(er) + ctx.AdminManagementSession.validateUpdate(er) + }) +} + +func Test_TransitRouterConfigs(t *testing.T) { + ctx := NewTestContext(t) + defer ctx.Teardown() + ctx.StartServer() + ctx.RequireAdminManagementApiLogin() + + t.Run("create with router-target config should succeed", func(t *testing.T) { + ctx.testContextChanged(t) + ct := ctx.newConfigType() + ct.Target = util.Ptr("router") + ct.Id = ctx.AdminManagementSession.requireCreateEntity(ct) + config := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + + tr := newTestTransitRouter() + tr.configs = s(config.Id) + tr.id = ctx.AdminManagementSession.requireCreateEntity(tr) + ctx.AdminManagementSession.validateEntityWithQuery(tr) + }) + + t.Run("create with service-target config should fail", func(t *testing.T) { + ctx.testContextChanged(t) + ct := ctx.newConfigType() + ct.Target = util.Ptr("service") + ct.Id = ctx.AdminManagementSession.requireCreateEntity(ct) + config := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + + tr := newTestTransitRouter() + tr.configs = s(config.Id) + resp := ctx.AdminManagementSession.createEntity(tr) + ctx.requireFieldError(resp.StatusCode(), resp.Body(), errorz.CouldNotValidateCode, "configs") + }) + + t.Run("create with duplicate config types should fail", func(t *testing.T) { + ctx.testContextChanged(t) + ct := ctx.newConfigType() + ct.Target = util.Ptr("router") + ct.Id = ctx.AdminManagementSession.requireCreateEntity(ct) + config1 := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + config2 := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + + tr := newTestTransitRouter() + tr.configs = s(config1.Id, config2.Id) + resp := ctx.AdminManagementSession.createEntity(tr) + ctx.requireFieldError(resp.StatusCode(), resp.Body(), errorz.CouldNotValidateCode, "configs") + }) + + t.Run("update should add configs", func(t *testing.T) { + ctx.testContextChanged(t) + ct := ctx.newConfigType() + ct.Target = util.Ptr("router") + ct.Id = ctx.AdminManagementSession.requireCreateEntity(ct) + config1 := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + + ct2 := ctx.newConfigType() + ct2.Target = util.Ptr("router") + ct2.Id = ctx.AdminManagementSession.requireCreateEntity(ct2) + config2 := ctx.AdminManagementSession.requireCreateNewConfig(ct2.Id, map[string]interface{}{"key": "value"}) + + tr := newTestTransitRouter() + tr.configs = s(config1.Id) + tr.id = ctx.AdminManagementSession.requireCreateEntity(tr) + ctx.AdminManagementSession.validateEntityWithQuery(tr) + + tr.configs = s(config1.Id, config2.Id) + ctx.AdminManagementSession.requireUpdateEntity(tr) + ctx.AdminManagementSession.validateUpdate(tr) + }) + + t.Run("patch should update configs", func(t *testing.T) { + ctx.testContextChanged(t) + ct := ctx.newConfigType() + ct.Target = util.Ptr("router") + ct.Id = ctx.AdminManagementSession.requireCreateEntity(ct) + config := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + + tr := newTestTransitRouter() + tr.id = ctx.AdminManagementSession.requireCreateEntity(tr) + + tr.configs = s(config.Id) + ctx.AdminManagementSession.requirePatchEntity(tr, "configs") + ctx.AdminManagementSession.validateUpdate(tr) + }) + + t.Run("update should clear configs", func(t *testing.T) { + ctx.testContextChanged(t) + ct := ctx.newConfigType() + ct.Target = util.Ptr("router") + ct.Id = ctx.AdminManagementSession.requireCreateEntity(ct) + config := ctx.AdminManagementSession.requireCreateNewConfig(ct.Id, map[string]interface{}{"key": "value"}) + + tr := newTestTransitRouter() + tr.configs = s(config.Id) + tr.id = ctx.AdminManagementSession.requireCreateEntity(tr) + ctx.AdminManagementSession.validateEntityWithQuery(tr) + + tr.configs = nil + ctx.AdminManagementSession.requireUpdateEntity(tr) + ctx.AdminManagementSession.validateUpdate(tr) + }) +} diff --git a/tests/entities.go b/tests/entities.go index 77124fe9c..e1fb28f79 100644 --- a/tests/entities.go +++ b/tests/entities.go @@ -381,6 +381,7 @@ type edgeRouter struct { name string isTunnelerEnabled bool roleAttributes []string + configs []string ctrlChanListeners map[string][]string tags map[string]interface{} } @@ -402,6 +403,9 @@ func (entity *edgeRouter) toJson(_ bool, ctx *TestContext, _ ...string) string { ctx.setJsonValue(entityData, entity.name, "name") ctx.setJsonValue(entityData, entity.roleAttributes, "roleAttributes") ctx.setJsonValue(entityData, entity.isTunnelerEnabled, "isTunnelerEnabled") + if len(entity.configs) > 0 { + ctx.setJsonValue(entityData, entity.configs, "configs") + } listeners := entity.ctrlChanListeners if listeners == nil { listeners = map[string][]string{} @@ -418,6 +422,8 @@ func (entity *edgeRouter) validate(ctx *TestContext, c *gabs.Container) { } ctx.pathEquals(c, entity.name, path("name")) ctx.pathEquals(c, entity.isTunnelerEnabled, path("isTunnelerEnabled")) + sort.Strings(entity.configs) + ctx.pathEqualsStringSlice(c, entity.configs, path("configs")) sort.Strings(entity.roleAttributes) ctx.pathEqualsStringSlice(c, entity.roleAttributes, path("roleAttributes")) ctx.pathEqualsCtrlChanListeners(c, entity.ctrlChanListeners, path("ctrlChanListeners")) @@ -716,6 +722,7 @@ func newTestTransitRouter() *transitRouter { type transitRouter struct { id string name string + configs []string ctrlChanListeners map[string][]string tags map[string]interface{} } @@ -735,6 +742,9 @@ func (entity *transitRouter) getEntityType() string { func (entity *transitRouter) toJson(_ bool, ctx *TestContext, _ ...string) string { entityData := gabs.New() ctx.setJsonValue(entityData, entity.name, "name") + if len(entity.configs) > 0 { + ctx.setJsonValue(entityData, entity.configs, "configs") + } listeners := entity.ctrlChanListeners if listeners == nil { listeners = map[string][]string{} @@ -750,6 +760,8 @@ func (entity *transitRouter) validate(ctx *TestContext, c *gabs.Container) { entity.tags = map[string]interface{}{} } ctx.pathEquals(c, entity.name, path("name")) + sort.Strings(entity.configs) + ctx.pathEqualsStringSlice(c, entity.configs, path("configs")) ctx.pathEqualsCtrlChanListeners(c, entity.ctrlChanListeners, path("ctrlChanListeners")) ctx.pathEquals(c, entity.tags, path("tags")) } diff --git a/tests/fabric_router_test.go b/tests/fabric_router_test.go index 3da75f478..1a4a4fc17 100644 --- a/tests/fabric_router_test.go +++ b/tests/fabric_router_test.go @@ -190,3 +190,168 @@ func Test_FabricRouters(t *testing.T) { ctx.Req.Empty(detailResp.Payload.Data.CtrlChanListeners) }) } + +func Test_FabricRouterConfigs(t *testing.T) { + ctx := NewTestContext(t) + defer ctx.Teardown() + ctx.StartServer() + + mgmtClient := ctx.NewEdgeManagementApi(nil) + adminCreds := ctx.NewAdminCredentials() + _, err := mgmtClient.Authenticate(adminCreds, nil) + ctx.Req.NoError(err) + + t.Run("create with router-target config should succeed", func(t *testing.T) { + ctx.testContextChanged(t) + configType, err := mgmtClient.CreateConfigType(util.Ptr("router")) + ctx.Req.NoError(err) + cfg, err := mgmtClient.CreateConfig(configType.ID, map[string]interface{}{}) + ctx.Req.NoError(err) + + createResp, err := mgmtClient.API.Router.CreateRouter(&router.CreateRouterParams{ + Router: &rest_model.RouterCreate{ + Name: util.Ptr(eid.New()), + Configs: []string{cfg.ID}, + }, + }, nil) + ctx.Req.NoError(err) + + detailResp, err := mgmtClient.API.Router.DetailRouter(&router.DetailRouterParams{ + ID: createResp.Payload.Data.ID, + }, nil) + ctx.Req.NoError(err) + ctx.Req.Equal([]string{cfg.ID}, detailResp.Payload.Data.Configs) + }) + + t.Run("create with service-target config should fail", func(t *testing.T) { + ctx.testContextChanged(t) + configType, err := mgmtClient.CreateConfigType(util.Ptr("service")) + ctx.Req.NoError(err) + cfg, err := mgmtClient.CreateConfig(configType.ID, map[string]interface{}{}) + ctx.Req.NoError(err) + + _, err = mgmtClient.API.Router.CreateRouter(&router.CreateRouterParams{ + Router: &rest_model.RouterCreate{ + Name: util.Ptr(eid.New()), + Configs: []string{cfg.ID}, + }, + }, nil) + ctx.Req.Error(err) + var badReq *router.CreateRouterBadRequest + ctx.Req.ErrorAs(err, &badReq) + }) + + t.Run("create with duplicate config types should fail", func(t *testing.T) { + ctx.testContextChanged(t) + configType, err := mgmtClient.CreateConfigType(util.Ptr("router")) + ctx.Req.NoError(err) + cfg1, err := mgmtClient.CreateConfig(configType.ID, map[string]interface{}{}) + ctx.Req.NoError(err) + cfg2, err := mgmtClient.CreateConfig(configType.ID, map[string]interface{}{}) + ctx.Req.NoError(err) + + _, err = mgmtClient.API.Router.CreateRouter(&router.CreateRouterParams{ + Router: &rest_model.RouterCreate{ + Name: util.Ptr(eid.New()), + Configs: []string{cfg1.ID, cfg2.ID}, + }, + }, nil) + ctx.Req.Error(err) + var badReq *router.CreateRouterBadRequest + ctx.Req.ErrorAs(err, &badReq) + }) + + t.Run("update should add configs", func(t *testing.T) { + ctx.testContextChanged(t) + configType1, err := mgmtClient.CreateConfigType(util.Ptr("router")) + ctx.Req.NoError(err) + cfg1, err := mgmtClient.CreateConfig(configType1.ID, map[string]interface{}{}) + ctx.Req.NoError(err) + + configType2, err := mgmtClient.CreateConfigType(util.Ptr("router")) + ctx.Req.NoError(err) + cfg2, err := mgmtClient.CreateConfig(configType2.ID, map[string]interface{}{}) + ctx.Req.NoError(err) + + name := eid.New() + createResp, err := mgmtClient.API.Router.CreateRouter(&router.CreateRouterParams{ + Router: &rest_model.RouterCreate{ + Name: &name, + Configs: []string{cfg1.ID}, + }, + }, nil) + ctx.Req.NoError(err) + id := createResp.Payload.Data.ID + + _, err = mgmtClient.API.Router.UpdateRouter(&router.UpdateRouterParams{ + ID: id, + Router: &rest_model.RouterUpdate{ + Name: &name, + Configs: []string{cfg1.ID, cfg2.ID}, + }, + }, nil) + ctx.Req.NoError(err) + + detailResp, err := mgmtClient.API.Router.DetailRouter(&router.DetailRouterParams{ID: id}, nil) + ctx.Req.NoError(err) + ctx.Req.ElementsMatch([]string{cfg1.ID, cfg2.ID}, detailResp.Payload.Data.Configs) + }) + + t.Run("patch should update configs", func(t *testing.T) { + ctx.testContextChanged(t) + configType, err := mgmtClient.CreateConfigType(util.Ptr("router")) + ctx.Req.NoError(err) + cfg, err := mgmtClient.CreateConfig(configType.ID, map[string]interface{}{}) + ctx.Req.NoError(err) + + createResp, err := mgmtClient.API.Router.CreateRouter(&router.CreateRouterParams{ + Router: &rest_model.RouterCreate{ + Name: util.Ptr(eid.New()), + }, + }, nil) + ctx.Req.NoError(err) + id := createResp.Payload.Data.ID + + _, err = mgmtClient.API.Router.PatchRouter(&router.PatchRouterParams{ + ID: id, + Router: &rest_model.RouterPatch{ + Configs: []string{cfg.ID}, + }, + }, nil) + ctx.Req.NoError(err) + + detailResp, err := mgmtClient.API.Router.DetailRouter(&router.DetailRouterParams{ID: id}, nil) + ctx.Req.NoError(err) + ctx.Req.Equal([]string{cfg.ID}, detailResp.Payload.Data.Configs) + }) + + t.Run("update should clear configs", func(t *testing.T) { + ctx.testContextChanged(t) + configType, err := mgmtClient.CreateConfigType(util.Ptr("router")) + ctx.Req.NoError(err) + cfg, err := mgmtClient.CreateConfig(configType.ID, map[string]interface{}{}) + ctx.Req.NoError(err) + + name := eid.New() + createResp, err := mgmtClient.API.Router.CreateRouter(&router.CreateRouterParams{ + Router: &rest_model.RouterCreate{ + Name: &name, + Configs: []string{cfg.ID}, + }, + }, nil) + ctx.Req.NoError(err) + id := createResp.Payload.Data.ID + + _, err = mgmtClient.API.Router.UpdateRouter(&router.UpdateRouterParams{ + ID: id, + Router: &rest_model.RouterUpdate{ + Name: &name, + }, + }, nil) + ctx.Req.NoError(err) + + detailResp, err := mgmtClient.API.Router.DetailRouter(&router.DetailRouterParams{ID: id}, nil) + ctx.Req.NoError(err) + ctx.Req.Empty(detailResp.Payload.Data.Configs) + }) +} diff --git a/tests/testutil/linkschecker.go b/tests/testutil/linkschecker.go index 9e3640bcd..dd604e736 100644 --- a/tests/testutil/linkschecker.go +++ b/tests/testutil/linkschecker.go @@ -23,9 +23,10 @@ type TestLink struct { } type LinkStateChecker struct { - errorC chan error - links map[string]*TestLink - req *require.Assertions + errorC chan error + links map[string]*TestLink + pendingFaults map[string]int + req *require.Assertions sync.Mutex } @@ -48,12 +49,19 @@ func (self *LinkStateChecker) HandleLink(msg *channel.Message, ch channel.Channe for _, link := range routerLinks.Links { testLink, ok := self.links[link.Id] if !ok { - self.links[link.Id] = &TestLink{ + newLink := &TestLink{ Id: link.Id, Src: ch.Id(), Dest: link.DestRouterId, Valid: true, } + // Apply any faults that arrived before this link was registered. + if pendingCount, hasPending := self.pendingFaults[link.Id]; hasPending { + newLink.FaultCount = pendingCount + newLink.Valid = false + delete(self.pendingFaults, link.Id) + } + self.links[link.Id] = newLink } else { if testLink.Src != ch.Id() { self.reportError(fmt.Errorf("source router change for link %v => %v", testLink.Src, ch.Id())) @@ -61,7 +69,11 @@ func (self *LinkStateChecker) HandleLink(msg *channel.Message, ch channel.Channe if testLink.Dest != link.DestRouterId { self.reportError(fmt.Errorf("dest router change for link %v => %v", testLink.Dest, link.DestRouterId)) } - testLink.Valid = true + // Don't resurrect a link that has been faulted. A router may re-report a + // faulted link on reconnect before it's finished closing the duplicate. + if testLink.FaultCount == 0 { + testLink.Valid = true + } } } } @@ -82,9 +94,11 @@ func (self *LinkStateChecker) HandleFault(msg *channel.Message, _ channel.Channe if link, found := self.links[fault.Id]; found { link.FaultCount++ link.Valid = false + } else { + // Fault arrived before the link was registered via HandleLink. + // Track it so HandleLink can apply it when the link shows up. + self.pendingFaults[fault.Id]++ } - // Faults for unknown link IDs are expected — the fault can arrive - // before the link is registered via HandleLink due to message ordering. } } @@ -139,9 +153,10 @@ func (self *LinkStateChecker) RequireOneActiveLink() *TestLink { func NewLinkChecker(assertions *require.Assertions) *LinkStateChecker { checker := &LinkStateChecker{ - errorC: make(chan error, 4), - links: map[string]*TestLink{}, - req: assertions, + errorC: make(chan error, 4), + links: map[string]*TestLink{}, + pendingFaults: map[string]int{}, + req: assertions, } return checker } diff --git a/ziti/cmd/edge/create_edge_router.go b/ziti/cmd/edge/create_edge_router.go index 8677b0cc0..9bdfb5b66 100644 --- a/ziti/cmd/edge/create_edge_router.go +++ b/ziti/cmd/edge/create_edge_router.go @@ -28,14 +28,15 @@ import ( type createEdgeRouterOptions struct { api.EntityOptions - isTunnelerEnabled bool - roleAttributes []string - jwtOutputFile string - appData map[string]string - cost uint16 - noTraversal bool - disabled bool + isTunnelerEnabled bool + roleAttributes []string + jwtOutputFile string + appData map[string]string + cost uint16 + noTraversal bool + disabled bool bootstrapCtrlChanListeners []string + configs []string } func NewCreateEdgeRouterCmd(out io.Writer, errOut io.Writer) *cobra.Command { @@ -67,6 +68,7 @@ func NewCreateEdgeRouterCmd(out io.Writer, errOut io.Writer) *cobra.Command { cmd.Flags().BoolVar(&options.noTraversal, "no-traversal", false, "Disallow traversal for this edge router. Default to allowed(false).") cmd.Flags().BoolVar(&options.disabled, "disabled", false, "Disabled routers can't connect to controllers") cmd.Flags().StringSliceVar(&options.bootstrapCtrlChanListeners, "bootstrap-ctrl-chan-listener", nil, "Bootstrap control channel listener address and optional groups. The router will update this automatically once connected. (e.g. 'tls:1.2.3.4:6262=group1,group2')") + cmd.Flags().StringSliceVar(&options.configs, "config", nil, "Config IDs to associate with this edge router") options.AddCommonFlags(cmd) @@ -86,6 +88,9 @@ func runCreateEdgeRouter(o *createEdgeRouterOptions) error { if len(o.bootstrapCtrlChanListeners) > 0 { api.SetJSONValue(entityData, api.ParseCtrlChanListeners(o.bootstrapCtrlChanListeners), "ctrlChanListeners") } + if len(o.configs) > 0 { + api.SetJSONValue(entityData, o.configs, "configs") + } o.SetTags(entityData) result, err := CreateEntityOfType("edge-routers", entityData.String(), &o.Options) diff --git a/ziti/cmd/edge/create_transit_router.go b/ziti/cmd/edge/create_transit_router.go index 037f65cb4..70cf60cb2 100644 --- a/ziti/cmd/edge/create_transit_router.go +++ b/ziti/cmd/edge/create_transit_router.go @@ -29,11 +29,12 @@ import ( type createTransitRouterOptions struct { api.EntityOptions - jwtOutputFile string - cost uint16 - noTraversal bool - disabled bool + jwtOutputFile string + cost uint16 + noTraversal bool + disabled bool bootstrapCtrlChanListeners []string + configs []string } func newCreateTransitRouterCmd(out io.Writer, errOut io.Writer) *cobra.Command { @@ -60,6 +61,7 @@ func newCreateTransitRouterCmd(out io.Writer, errOut io.Writer) *cobra.Command { cmd.Flags().BoolVar(&options.noTraversal, "no-traversal", false, "Disallow traversal for this edge router. Default to allowed(false).") cmd.Flags().BoolVar(&options.disabled, "disabled", false, "Disabled routers can't connect to controllers") cmd.Flags().StringSliceVar(&options.bootstrapCtrlChanListeners, "bootstrap-ctrl-chan-listener", nil, "Bootstrap control channel listener address and optional groups. The router will update this automatically once connected. (e.g. 'tls:1.2.3.4:6262=group1,group2')") + cmd.Flags().StringSliceVar(&options.configs, "config", nil, "Config IDs to associate with this transit router") options.AddCommonFlags(cmd) @@ -76,6 +78,9 @@ func runCreateTransitRouter(o *createTransitRouterOptions) error { if len(o.bootstrapCtrlChanListeners) > 0 { api.SetJSONValue(entityData, api.ParseCtrlChanListeners(o.bootstrapCtrlChanListeners), "ctrlChanListeners") } + if len(o.configs) > 0 { + api.SetJSONValue(entityData, o.configs, "configs") + } o.SetTags(entityData) result, err := CreateEntityOfType("transit-routers", entityData.String(), &o.Options) diff --git a/ziti/cmd/edge/update_edge_router.go b/ziti/cmd/edge/update_edge_router.go index 16b31460d..fe0cc31c2 100644 --- a/ziti/cmd/edge/update_edge_router.go +++ b/ziti/cmd/edge/update_edge_router.go @@ -30,15 +30,16 @@ import ( type updateEdgeRouterOptions struct { api.EntityOptions - name string - isTunnelerEnabled bool - roleAttributes []string - appData map[string]string - usePut bool - cost uint16 - noTraversal bool - disabled bool + name string + isTunnelerEnabled bool + roleAttributes []string + appData map[string]string + usePut bool + cost uint16 + noTraversal bool + disabled bool bootstrapCtrlChanListeners []string + configs []string } func newUpdateEdgeRouterCmd(out io.Writer, errOut io.Writer) *cobra.Command { @@ -72,6 +73,7 @@ func newUpdateEdgeRouterCmd(out io.Writer, errOut io.Writer) *cobra.Command { cmd.Flags().BoolVar(&options.noTraversal, "no-traversal", false, "Disallow traversal for this edge router. Default to allowed(false).") cmd.Flags().BoolVar(&options.disabled, "disabled", false, "Disabled routers can't connect to controllers") cmd.Flags().StringSliceVar(&options.bootstrapCtrlChanListeners, "bootstrap-ctrl-chan-listener", nil, "Bootstrap control channel listener address and optional groups. The router will update this automatically once connected. (e.g. 'tls:1.2.3.4:6262=group1,group2')") + cmd.Flags().StringSliceVar(&options.configs, "config", nil, "Config IDs to associate with this edge router") options.AddCommonFlags(cmd) @@ -132,6 +134,11 @@ func runUpdateEdgeRouter(o *updateEdgeRouterOptions) error { change = true } + if o.Cmd.Flags().Changed("config") { + api.SetJSONValue(entityData, o.configs, "configs") + change = true + } + if !change { return errors.New("no change specified. must specify at least one attribute to change") } diff --git a/ziti/cmd/fabric/create_router.go b/ziti/cmd/fabric/create_router.go index 4a5f5b829..74b2255de 100644 --- a/ziti/cmd/fabric/create_router.go +++ b/ziti/cmd/fabric/create_router.go @@ -29,12 +29,13 @@ import ( type createRouterOptions struct { api.Options - name string - cost uint16 - tags map[string]string - noTraversal bool - disabled bool + name string + cost uint16 + tags map[string]string + noTraversal bool + disabled bool bootstrapCtrlChanListeners []string + configs []string } // newCreateRouterCmd creates the 'fabric create router' command for the given entity type @@ -62,6 +63,7 @@ func newCreateRouterCmd(p common.OptionsProvider) *cobra.Command { cmd.Flags().BoolVar(&options.noTraversal, "no-traversal", false, "Disallow traversal for this edge router. Default to allowed(false).") cmd.Flags().BoolVar(&options.disabled, "disabled", false, "Disabled routers can't connect to controllers") cmd.Flags().StringSliceVar(&options.bootstrapCtrlChanListeners, "bootstrap-ctrl-chan-listener", nil, "Bootstrap control channel listener address and optional groups. The router will update this automatically once connected. (e.g. 'tls:1.2.3.4:6262=group1,group2')") + cmd.Flags().StringSliceVar(&options.configs, "config", nil, "Config IDs to associate with this router") options.AddCommonFlags(cmd) @@ -92,6 +94,9 @@ func (o *createRouterOptions) createRouter(_ *cobra.Command, args []string) erro if len(o.bootstrapCtrlChanListeners) > 0 { api.SetJSONValue(entityData, api.ParseCtrlChanListeners(o.bootstrapCtrlChanListeners), "ctrlChanListeners") } + if len(o.configs) > 0 { + api.SetJSONValue(entityData, o.configs, "configs") + } result, err := createEntityOfType("routers", entityData.String(), &o.Options) if err != nil { return err diff --git a/ziti/cmd/fabric/update_router.go b/ziti/cmd/fabric/update_router.go index 06cfade2d..e50bc1060 100644 --- a/ziti/cmd/fabric/update_router.go +++ b/ziti/cmd/fabric/update_router.go @@ -30,13 +30,14 @@ import ( type updateRouterOptions struct { api.Options - name string - fingerprint string - cost uint16 - noTraversal bool - disabled bool + name string + fingerprint string + cost uint16 + noTraversal bool + disabled bool bootstrapCtrlChanListeners []string - tags map[string]string + configs []string + tags map[string]string } func newUpdateRouterCmd(p common.OptionsProvider) *cobra.Command { @@ -64,6 +65,7 @@ func newUpdateRouterCmd(p common.OptionsProvider) *cobra.Command { cmd.Flags().BoolVar(&options.noTraversal, "no-traversal", false, "Disallow traversal for this edge router. Default to allowed(false).") cmd.Flags().BoolVar(&options.disabled, "disabled", false, "Disabled routers can't connect to controllers") cmd.Flags().StringSliceVar(&options.bootstrapCtrlChanListeners, "bootstrap-ctrl-chan-listener", nil, "Bootstrap control channel listener address and optional groups. The router will update this automatically once connected. (e.g. 'tls:1.2.3.4:6262=group1,group2')") + cmd.Flags().StringSliceVar(&options.configs, "config", nil, "Config IDs to associate with this router") cmd.Flags().StringToStringVar(&options.tags, "tags", nil, "Custom management tags") options.AddCommonFlags(cmd) @@ -110,6 +112,11 @@ func runUpdateRouter(o *updateRouterOptions) error { change = true } + if o.Cmd.Flags().Changed("config") { + api.SetJSONValue(entityData, o.configs, "configs") + change = true + } + if o.Cmd.Flags().Changed("tags") { api.SetJSONValue(entityData, o.tags, "tags") change = true diff --git a/zititest/go.mod b/zititest/go.mod index 398c03cf7..4f2c9c95e 100644 --- a/zititest/go.mod +++ b/zititest/go.mod @@ -1,6 +1,6 @@ module github.com/openziti/ziti/zititest -go 1.26.1 +go 1.26.4 // use parent project replace github.com/openziti/ziti/v2 => ../ @@ -13,19 +13,19 @@ replace github.com/michaelquigley/pfxlog => github.com/michaelquigley/pfxlog v0. require ( github.com/Jeffail/gabs v1.4.0 github.com/Jeffail/gabs/v2 v2.7.0 - github.com/go-openapi/runtime v0.30.0 + github.com/go-openapi/runtime v0.32.3 github.com/google/go-cmp v0.7.0 github.com/google/uuid v1.6.0 github.com/michaelquigley/pfxlog v1.0.0 github.com/openziti/agent v1.0.33 github.com/openziti/channel/v4 v4.3.11 - github.com/openziti/edge-api v0.31.0 + github.com/openziti/edge-api v0.31.1 github.com/openziti/fablab v0.6.16 - github.com/openziti/foundation/v2 v2.0.91 - github.com/openziti/identity v1.0.129 + github.com/openziti/foundation/v2 v2.0.95 + github.com/openziti/identity v1.0.133 github.com/openziti/metrics v1.4.5 - github.com/openziti/sdk-golang v1.7.0 - github.com/openziti/transport/v2 v2.0.215 + github.com/openziti/sdk-golang v1.8.0 + github.com/openziti/transport/v2 v2.0.216 github.com/openziti/ziti/v2 v2.0.0 github.com/orcaman/concurrent-map/v2 v2.0.1 github.com/pkg/errors v0.9.1 @@ -34,7 +34,7 @@ require ( github.com/spf13/cobra v1.10.2 github.com/stretchr/testify v1.11.1 go.etcd.io/bbolt v1.4.3 - golang.org/x/net v0.54.0 + golang.org/x/net v0.56.0 google.golang.org/protobuf v1.36.11 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 @@ -42,10 +42,10 @@ require ( require ( github.com/AppsFlyer/go-sundheit v0.6.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.22.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.10.0 // indirect - github.com/Azure/go-amqp v1.6.0 // indirect + github.com/Azure/go-amqp v1.7.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/MichaelMure/go-term-text v0.3.1 // indirect github.com/alecthomas/chroma v0.10.0 // indirect @@ -94,6 +94,7 @@ require ( github.com/dineshappavoo/basex v0.0.0-20170425072625-481a6f6dc663 // indirect github.com/dlclark/regexp2 v1.12.0 // indirect github.com/docker/go-units v0.5.0 // indirect + github.com/ebitengine/purego v0.10.1 // indirect github.com/ef-ds/deque v1.0.4 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect @@ -103,32 +104,32 @@ require ( github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa // indirect github.com/gaissmai/extnetip v1.3.1 // indirect github.com/go-acme/lego/v4 v4.35.2 // indirect - github.com/go-chi/chi/v5 v5.2.5 // indirect + github.com/go-chi/chi/v5 v5.3.0 // 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-ole/go-ole v1.3.0 // indirect - github.com/go-openapi/analysis v0.25.0 // indirect - github.com/go-openapi/errors v0.22.7 // indirect + github.com/go-openapi/analysis v0.25.2 // indirect + github.com/go-openapi/errors v0.22.8 // indirect github.com/go-openapi/jsonpointer v0.23.1 // indirect - github.com/go-openapi/jsonreference v0.21.5 // indirect - github.com/go-openapi/loads v0.23.3 // indirect - github.com/go-openapi/runtime/server-middleware v0.30.0 // indirect - github.com/go-openapi/spec v0.22.4 // indirect - github.com/go-openapi/strfmt v0.26.2 // indirect - github.com/go-openapi/swag v0.26.0 // indirect - github.com/go-openapi/swag/cmdutils v0.26.0 // indirect - github.com/go-openapi/swag/conv v0.26.0 // indirect - github.com/go-openapi/swag/fileutils v0.26.0 // indirect - github.com/go-openapi/swag/jsonname v0.26.0 // indirect - github.com/go-openapi/swag/jsonutils v0.26.0 // indirect - github.com/go-openapi/swag/loading v0.26.0 // indirect - github.com/go-openapi/swag/mangling v0.26.0 // indirect - github.com/go-openapi/swag/netutils v0.26.0 // indirect - github.com/go-openapi/swag/stringutils v0.26.0 // indirect - github.com/go-openapi/swag/typeutils v0.26.0 // indirect - github.com/go-openapi/swag/yamlutils v0.26.0 // indirect - github.com/go-openapi/validate v0.25.2 // indirect + github.com/go-openapi/jsonreference v0.21.6 // indirect + github.com/go-openapi/loads v0.24.0 // indirect + github.com/go-openapi/runtime/server-middleware v0.32.3 // indirect + github.com/go-openapi/spec v0.22.5 // indirect + github.com/go-openapi/strfmt v0.26.3 // indirect + github.com/go-openapi/swag v0.26.1 // indirect + github.com/go-openapi/swag/cmdutils v0.26.1 // indirect + github.com/go-openapi/swag/conv v0.26.1 // indirect + github.com/go-openapi/swag/fileutils v0.26.1 // indirect + github.com/go-openapi/swag/jsonname v0.26.1 // indirect + github.com/go-openapi/swag/jsonutils v0.26.1 // indirect + github.com/go-openapi/swag/loading v0.26.1 // indirect + github.com/go-openapi/swag/mangling v0.26.1 // indirect + github.com/go-openapi/swag/netutils v0.26.1 // indirect + github.com/go-openapi/swag/stringutils v0.26.1 // indirect + github.com/go-openapi/swag/typeutils v0.26.1 // indirect + github.com/go-openapi/swag/yamlutils v0.26.1 // indirect + github.com/go-openapi/validate v0.26.0 // indirect github.com/go-resty/resty/v2 v2.17.2 // indirect github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/golang-jwt/jwt/v5 v5.3.1 // indirect @@ -149,7 +150,7 @@ require ( github.com/influxdata/influxdb-client-go/v2 v2.14.0 // indirect github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d // indirect github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect - github.com/jedib0t/go-pretty/v6 v6.7.10 // indirect + github.com/jedib0t/go-pretty/v6 v6.8.1 // indirect github.com/jellydator/ttlcache/v3 v3.4.0 // indirect github.com/jessevdk/go-flags v1.6.1 // indirect github.com/jinzhu/copier v0.4.0 // indirect @@ -161,13 +162,13 @@ require ( github.com/lucasb-eyer/go-colorful v1.3.0 // indirect github.com/lucsky/cuid v1.2.1 // indirect github.com/lufia/plan9stats v0.0.0-20260330125221-c963978e514e // indirect - github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-colorable v0.1.15 // indirect github.com/mattn/go-isatty v0.0.22 // indirect github.com/mattn/go-localereader v0.0.1 // indirect - github.com/mattn/go-runewidth v0.0.23 // indirect + github.com/mattn/go-runewidth v0.0.24 // indirect github.com/mattn/go-tty v0.0.8 // indirect - github.com/mdlayher/netlink v1.11.1 // indirect - github.com/mdlayher/socket v0.6.0 // indirect + github.com/mdlayher/netlink v1.11.2 // indirect + github.com/mdlayher/socket v0.6.1 // indirect github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/michaelquigley/figlet v0.1.0 // indirect github.com/miekg/dns v1.1.72 // indirect @@ -188,14 +189,14 @@ require ( github.com/openziti/go-term-markdown v1.0.1 // indirect github.com/openziti/jwks v1.0.6 // indirect github.com/openziti/runzmd v1.0.90 // indirect - github.com/openziti/secretstream v0.1.49 // indirect + github.com/openziti/secretstream v0.1.51 // indirect github.com/openziti/x509-claims v1.0.3 // indirect github.com/openziti/xweb/v3 v3.0.4 // indirect github.com/parallaxsecond/parsec-client-go v0.0.0-20221025095442-f0a77d263cf9 // indirect github.com/pelletier/go-toml/v2 v2.3.1 // indirect - github.com/pion/dtls/v3 v3.1.2 // indirect + github.com/pion/dtls/v3 v3.1.4 // indirect github.com/pion/logging v0.2.4 // indirect - github.com/pion/transport/v4 v4.0.1 // indirect + github.com/pion/transport/v4 v4.0.2 // indirect github.com/pkg/sftp v1.13.10 // indirect github.com/pkg/term v1.2.0-beta.2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -208,6 +209,7 @@ require ( github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.12.0 // indirect github.com/shirou/gopsutil/v3 v3.24.5 // indirect + github.com/shirou/gopsutil/v4 v4.26.5 // indirect github.com/shoenig/go-m1cpu v0.2.1 // indirect github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect github.com/speps/go-hashids v2.0.0+incompatible // indirect @@ -231,20 +233,20 @@ require ( github.com/zitadel/schema v1.3.2 // indirect go.mozilla.org/pkcs7 v0.9.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/otel v1.43.0 // indirect - go.opentelemetry.io/otel/metric v1.43.0 // indirect - go.opentelemetry.io/otel/trace v1.43.0 // indirect + go.opentelemetry.io/otel v1.44.0 // indirect + go.opentelemetry.io/otel/metric v1.44.0 // indirect + go.opentelemetry.io/otel/trace v1.44.0 // indirect go.uber.org/atomic v1.11.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect go4.org v0.0.0-20260112195520-a5071408f32f // indirect - golang.org/x/crypto v0.51.0 // indirect - golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a // indirect - golang.org/x/mod v0.36.0 // indirect + golang.org/x/crypto v0.53.0 // indirect + golang.org/x/exp v0.0.0-20260603202125-055de637280b // indirect + golang.org/x/mod v0.37.0 // indirect golang.org/x/oauth2 v0.36.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.44.0 // indirect - golang.org/x/term v0.43.0 // indirect - golang.org/x/text v0.37.0 // indirect + golang.org/x/sync v0.21.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/term v0.44.0 // indirect + golang.org/x/text v0.38.0 // indirect golang.org/x/tools v0.45.0 // indirect gopkg.in/AlecAivazis/survey.v1 v1.8.8 // indirect gopkg.in/resty.v1 v1.12.0 // indirect diff --git a/zititest/go.sum b/zititest/go.sum index cc8a9d42e..b83e89b12 100644 --- a/zititest/go.sum +++ b/zititest/go.sum @@ -41,16 +41,16 @@ github.com/AlecAivazis/survey/v2 v2.0.5/go.mod h1:WYBhg6f0y/fNYUuesWQc0PKbJcEliG github.com/AppsFlyer/go-sundheit v0.6.0 h1:d2hBvCjBSb2lUsEWGfPigr4MCOt04sxB+Rppl0yUMSk= github.com/AppsFlyer/go-sundheit v0.6.0/go.mod h1:LDdBHD6tQBtmHsdW+i1GwdTt6Wqc0qazf5ZEJVTbTME= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1 h1:jHb/wfvRikGdxMXYV3QG/SzUOPYN9KEUUuC0Yd0/vC0= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1/go.mod h1:pzBXCYn05zvYIrwLgtK8Ap8QcjRg+0i76tMQdWN6wOk= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.22.0 h1:aokoqcHvaGjiM3VpjKDfMMnF/8epJ+Q1HLJ7CudztqE= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.22.0/go.mod h1:/WYEx9pcM9Y+Dd/APJaNlSvVSvzl54rrMdZT5+Oi2LM= 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.12.0 h1:fhqpLE3UEXi9lPaBRpQ6XuRW0nU7hgg4zlmZZa+a9q4= github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0/go.mod h1:7dCRMLwisfRH3dBupKeNCioWYUZ4SS09Z14H+7i8ZoY= github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.10.0 h1:kE5kpeiSqu4jcCQ/sWuyggMXJ/pT6oQ99+8hwPmyeJ0= github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.10.0/go.mod h1:IAN3Z0DMtehoxoQQnfqg1891z1P7GNoDryKtFcAyMBI= -github.com/Azure/go-amqp v1.6.0 h1:pMnBstxSd2JnvTopR/L9MUdQi4e5Mp9FscP4kZ0rZ8M= -github.com/Azure/go-amqp v1.6.0/go.mod h1:vZAogwdrkbyK3Mla8m/CxSc/aKdnTZ4IbPxl51Y5WZE= +github.com/Azure/go-amqp v1.7.0 h1:9VlH/LEWr386XWWJRNON0eslFqSClYBXP4HewvIqkDQ= +github.com/Azure/go-amqp v1.7.0/go.mod h1:pCJaHsvRlmmFUpxyQbh2qPkUFqYJeRBTqJSHKJadvPg= github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 h1:XRzhVemXdgvJqCH0sFfrBUTnUJSBrBf7++ypk+twtRs= github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -183,8 +183,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsr github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= -github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= +github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -198,6 +198,8 @@ github.com/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/ebitengine/purego v0.10.1 h1:dewVBCBT2GaMu1SrNTYxQhgQBethzfhiwvZiLGP/qyY= +github.com/ebitengine/purego v0.10.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/ef-ds/deque v1.0.4 h1:iFAZNmveMT9WERAkqLJ+oaABF9AcVQ5AjXem/hroniI= github.com/ef-ds/deque v1.0.4/go.mod h1:gXDnTC3yqvBcHbq2lcExjtAcVrOnJCbMcZXmuj8Z4tg= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -232,8 +234,8 @@ github.com/gaissmai/extnetip v1.3.1/go.mod h1:PepswGWH0GJ4XSdiY7bY2EaEPpCQs7OaYc github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-acme/lego/v4 v4.35.2 h1:uVQg+KC/yj9R2g7Q9W5wDqhvQvxV5SMu5eqFVoN5xZU= github.com/go-acme/lego/v4 v4.35.2/go.mod h1:pX2jN5n8OphMGY1IaMjYm5DAEzguBaKRt8AvJAgJXpc= -github.com/go-chi/chi/v5 v5.2.5 h1:Eg4myHZBjyvJmAFjFvWgrqDTXFyOzjj7YIm3L3mu6Ug= -github.com/go-chi/chi/v5 v5.2.5/go.mod h1:X7Gx4mteadT3eDOMTsXzmI4/rwUpOwBHLpAfupzFJP0= +github.com/go-chi/chi/v5 v5.3.0 h1:halUjDxhshgXHMrao5bB8eNBXo/rnzwr8m5m36glehM= +github.com/go-chi/chi/v5 v5.3.0/go.mod h1:R+tYY2hNuVUUjxoPtqUdgBqevM9s9njzkTLutVsOCto= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -253,56 +255,56 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-openapi/analysis v0.25.0 h1:EnjAq1yO8wEO9HbPmY8vLPEIkdZuuFhCAKBPvCB7bCs= -github.com/go-openapi/analysis v0.25.0/go.mod h1:5WFTRE43WLkPG9r9OtlMfqkkvUTYLVVCIxLlEpyF8kE= -github.com/go-openapi/errors v0.22.7 h1:JLFBGC0Apwdzw3484MmBqspjPbwa2SHvpDm0u5aGhUA= -github.com/go-openapi/errors v0.22.7/go.mod h1://QW6SD9OsWtH6gHllUCddOXDL0tk0ZGNYHwsw4sW3w= +github.com/go-openapi/analysis v0.25.2 h1:I0vy4n3alz+DHTiN1PRhCb7QZxkK6g5YmswZKv2TKuw= +github.com/go-openapi/analysis v0.25.2/go.mod h1:Uhs1t/2XR10EnwONYILGEzw8gcfGIG5Xk5K2AxnhqDo= +github.com/go-openapi/errors v0.22.8 h1:oP7sW7TWc3wFFjrzzj0nI83H2qMBkNjNfSd+XRejk/I= +github.com/go-openapi/errors v0.22.8/go.mod h1:BuUoHcYrU6E7V9gfj1I5wLQqgtIHnup/alXZ8KdgQ0w= github.com/go-openapi/jsonpointer v0.23.1 h1:1HBACs7XIwR2RcmItfdSFlALhGbe6S92p0ry4d1GWg4= github.com/go-openapi/jsonpointer v0.23.1/go.mod h1:iWRmZTrGn7XwYhtPt/fvdSFj1OfNBngqRT2UG3BxSqY= -github.com/go-openapi/jsonreference v0.21.5 h1:6uCGVXU/aNF13AQNggxfysJ+5ZcU4nEAe+pJyVWRdiE= -github.com/go-openapi/jsonreference v0.21.5/go.mod h1:u25Bw85sX4E2jzFodh1FOKMTZLcfifd1Q+iKKOUxExw= -github.com/go-openapi/loads v0.23.3 h1:g5Xap1JfwKkUnZdn+S0L3SzBDpcTIYzZ5Qaag0YDkKQ= -github.com/go-openapi/loads v0.23.3/go.mod h1:NOH07zLajXo8y55hom0omlHWDVVvCwBM/S+csCK8LqA= -github.com/go-openapi/runtime v0.30.0 h1:1llnyZcqkjm77VhM4FPO1O1rt2SzLZIRPkZAY4wv4mw= -github.com/go-openapi/runtime v0.30.0/go.mod h1:QtJGUq+1S0VWPP+LQldH6o4tcqGsjzTVjn/wIWEn9o4= -github.com/go-openapi/runtime/server-middleware v0.30.0 h1:8rPoJ/xv7JL8BsovaqboKETlpWBArVh8n+0L/GyePog= -github.com/go-openapi/runtime/server-middleware v0.30.0/go.mod h1:OYNT/TxNvB/VK5oe4htM2jDTwlEXuejVJmu0DVZfAMs= -github.com/go-openapi/spec v0.22.4 h1:4pxGjipMKu0FzFiu/DPwN3CTBRlVM2yLf/YTWorYfDQ= -github.com/go-openapi/spec v0.22.4/go.mod h1:WQ6Ai0VPWMZgMT4XySjlRIE6GP1bGQOtEThn3gcWLtQ= -github.com/go-openapi/strfmt v0.26.2 h1:ysjheCh4i1rmFEo2LanhELDNucNzfWTZhUDKgWWPaFM= -github.com/go-openapi/strfmt v0.26.2/go.mod h1:fXh1e449cyUn2NYuz+wb3wARBUdMl7qPEZwX00nqivY= -github.com/go-openapi/swag v0.26.0 h1:GVDXCmfvhfu1BxiHo8/FA+BbKmhecHnG3varjON5/RI= -github.com/go-openapi/swag v0.26.0/go.mod h1:82g3193sZJRbocs7bNCqGfIgq8pkuwVwCfhKIRlEQF0= -github.com/go-openapi/swag/cmdutils v0.26.0 h1:iowihOcvq7y4egO8cOq0dmfohz6wfeQ63U1EnuhO2TU= -github.com/go-openapi/swag/cmdutils v0.26.0/go.mod h1:Sm1MVFMkF6guJJ+pQqHnQA3N0j9qALV3NxzDSv6bETM= -github.com/go-openapi/swag/conv v0.26.0 h1:5yGGsPYI1ZCva93U0AoKi/iZrNhaJEjr324YVsiD89I= -github.com/go-openapi/swag/conv v0.26.0/go.mod h1:tpAmIL7X58VPnHHiSO4uE3jBeRamGsFsfdDeDtb5ECE= -github.com/go-openapi/swag/fileutils v0.26.0 h1:WJoPRvsA7QRiiWluowkLJa9jaYR7FCuxmDvnCgaRRxU= -github.com/go-openapi/swag/fileutils v0.26.0/go.mod h1:0WDJ7lp67eNjPMO50wAWYlKvhOb6CQ37rzR7wrgI8Tc= -github.com/go-openapi/swag/jsonname v0.26.0 h1:gV1NFX9M8avo0YSpmWogqfQISigCmpaiNci8cGECU5w= -github.com/go-openapi/swag/jsonname v0.26.0/go.mod h1:urBBR8bZNoDYGr653ynhIx+gTeIz0ARZxHkAPktJK2M= -github.com/go-openapi/swag/jsonutils v0.26.0 h1:FawFML2iAXsPqmERscuMPIHmFsoP1tOqWkxBaKNMsnA= -github.com/go-openapi/swag/jsonutils v0.26.0/go.mod h1:2VmA0CJlyFqgawOaPI9psnjFDqzyivIqLYN34t9p91E= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.26.0 h1:apqeINu/ICHouqiRZbyFvuDge5jCmmLTqGQ9V95EaOM= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.26.0/go.mod h1:AyM6QT8uz5IdKxk5akv0y6u4QvcL9GWERt0Jx/F/R8Y= -github.com/go-openapi/swag/loading v0.26.0 h1:Apg6zaKhCJurpJer0DCxq99qwmhFddBhaMX7kilDcko= -github.com/go-openapi/swag/loading v0.26.0/go.mod h1:dBxQ/6V2uBaAQdevN18VELE6xSpJWZxLX4txe12JwDg= -github.com/go-openapi/swag/mangling v0.26.0 h1:Du2YC4YLA/Y5m/YKQd7AnY5qq0wRKSFZTTt8ktFaXcQ= -github.com/go-openapi/swag/mangling v0.26.0/go.mod h1:jifS7W9vbg+pw63bT+GI53otluMQL3CeemuyCHKwVx0= -github.com/go-openapi/swag/netutils v0.26.0 h1:CmZp+ZT7HrmFwrC3GdGsXBq2+42T1bjKBapcqVpIs3c= -github.com/go-openapi/swag/netutils v0.26.0/go.mod h1:5iK+Ok3ZohWWex1C50BFTPexi03UaPwjW4Oj8kgrpwo= -github.com/go-openapi/swag/stringutils v0.26.0 h1:qZQngLxs5s7SLijc3N2ZO+fUq2o8LjuWAASSrJuh+xg= -github.com/go-openapi/swag/stringutils v0.26.0/go.mod h1:sWn5uY+QIIspwPhvgnqJsH8xqFT2ZbYcvbcFanRyhFE= -github.com/go-openapi/swag/typeutils v0.26.0 h1:2kdEwdiNWy+JJdOvu5MA2IIg2SylWAFuuyQIKYybfq4= -github.com/go-openapi/swag/typeutils v0.26.0/go.mod h1:oovDuIUvTrEHVMqWilQzKzV4YlSKgyZmFh7AlfABNVE= -github.com/go-openapi/swag/yamlutils v0.26.0 h1:H7O8l/8NJJQ/oiReEN+oMpnGMyt8G0hl460nRZxhLMQ= -github.com/go-openapi/swag/yamlutils v0.26.0/go.mod h1:1evKEGAtP37Pkwcc7EWMF0hedX0/x3Rkvei2wtG/TbU= -github.com/go-openapi/testify/enable/yaml/v2 v2.5.0 h1:3hZD1fwydvCx/cc1R2uYNQirHqf2s6lqpKV3FcNTURA= -github.com/go-openapi/testify/enable/yaml/v2 v2.5.0/go.mod h1:TvDZKBH7ZbMaF3EqH2AwTvNQCmzyZq8K1agRjf1B+Nk= -github.com/go-openapi/testify/v2 v2.5.0 h1:UOCr63aAsMIDydZbZGqo5Ev01D4eydItRbekDuZMJLw= -github.com/go-openapi/testify/v2 v2.5.0/go.mod h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw= -github.com/go-openapi/validate v0.25.2 h1:12NsfLAwGegqbGWr2CnvT65X/Q2USJipmJ9b7xDJZz0= -github.com/go-openapi/validate v0.25.2/go.mod h1:Pgl1LpPPGFnZ+ys4/hTlDiRYQdI1ocKypgE+8Q8BLfY= +github.com/go-openapi/jsonreference v0.21.6 h1:NZ5nGfnaM1n4I43Xjm1e5/M2GjOwQwndQz22uhxwD+Y= +github.com/go-openapi/jsonreference v0.21.6/go.mod h1:xzbgtQ3ZbWxvET3AxdzCJlJt6vkovbf+IfSPJjD0tUY= +github.com/go-openapi/loads v0.24.0 h1:4LLorXRPTzIN9V6ngMUZbAscsBOUBk3Oa8cClu/bFrQ= +github.com/go-openapi/loads v0.24.0/go.mod h1:xQMgX+hw5xRAhGrcDXxeMw78IFqUpIzhleu3HqPhyF4= +github.com/go-openapi/runtime v0.32.3 h1:J7Ycy5DJmhhP1By3NifhRUjnkXTrk21qbeqSULjwX8U= +github.com/go-openapi/runtime v0.32.3/go.mod h1:/WTQi0fa5DiGnnCXQKsTkSm15OzJp8Uz3H2t+67TBr4= +github.com/go-openapi/runtime/server-middleware v0.32.3 h1:Y/6h9ix9NCoMG04XazRwX6eA3alh4+JZ6qXdar5yd24= +github.com/go-openapi/runtime/server-middleware v0.32.3/go.mod h1:fYPep4GdTwg/XqZUjR40uIM/8C12Ba5M+MrGCiwpTHo= +github.com/go-openapi/spec v0.22.5 h1:KhO7RBlKQfonUWX2WzQCoLIXVA6AcNqDGZ3a1Dutdlo= +github.com/go-openapi/spec v0.22.5/go.mod h1:vxpOtMya5TXtENXKE5bKqv5NjocVhyhxHrlZfvKnZ74= +github.com/go-openapi/strfmt v0.26.3 h1:rzmslHarJgBbf2qfGge+X3htclQfmXqBZMm0Too0HhU= +github.com/go-openapi/strfmt v0.26.3/go.mod h1:a5nsUw0oRpQzZeOwx8bi6cKbzFZslpbCKt1LEot+KnQ= +github.com/go-openapi/swag v0.26.1 h1:l5sVEyVpwj+DDYeZyo7wQI/Ebn/mKYIyGB/pFwAfGoQ= +github.com/go-openapi/swag v0.26.1/go.mod h1:yNY38BbIVthxbkDtq1UHBCGasBqjakW3lCR6ANzdBEw= +github.com/go-openapi/swag/cmdutils v0.26.1 h1:f2iE1ijYaJ3nuu5PaEMx3zpEhzhZFgivCJObWEObLIQ= +github.com/go-openapi/swag/cmdutils v0.26.1/go.mod h1:Sm1MVFMkF6guJJ+pQqHnQA3N0j9qALV3NxzDSv6bETM= +github.com/go-openapi/swag/conv v0.26.1 h1:slr5FVkg9Wc3Y5zcwenD8Sd/PQ94b2I/QJI7N7KTBpg= +github.com/go-openapi/swag/conv v0.26.1/go.mod h1:mvQXgPptZk9GTrFgGwWvT4q+dN+zQej9JfmGwnipz1A= +github.com/go-openapi/swag/fileutils v0.26.1 h1:K1XCM2CGhfNsc6YDt6v7Q5+1e59rftYWdcu/isZhvFw= +github.com/go-openapi/swag/fileutils v0.26.1/go.mod h1:mYUgxQAKX4ShS3qvvySx+/9yrlUnDhjiD1CalaQl8lQ= +github.com/go-openapi/swag/jsonname v0.26.1 h1:VReupaV6WxlAsCn0e4DUfgV6bPmINnPpyJDLqSfNPcE= +github.com/go-openapi/swag/jsonname v0.26.1/go.mod h1:OvdW6BoWoj33pTfi7x9vFrgmT+fk7aw0BRwvCE0YOuc= +github.com/go-openapi/swag/jsonutils v0.26.1 h1:2hdBfFkHg+7Wrz2VsCbeyR6hzkRDs7AztnMR2u84yOY= +github.com/go-openapi/swag/jsonutils v0.26.1/go.mod h1:U+RMJH3wa+6BRiphuRtIyI8fW9HPFqFQ4sHk2oRx0UQ= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.26.1 h1:1CD7NiLLb/TXl3tOnFYU4b+mNfb5rtgHkaA+q7RMYYQ= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.26.1/go.mod h1:ZWafc8nMdYzTE3uYY6W86f0n46+IF0g4uUyRhJw/kXc= +github.com/go-openapi/swag/loading v0.26.1 h1:E9K4wqXeROlhjFQ13K9zMz6ojFGXIggGe+ad1odrK9w= +github.com/go-openapi/swag/loading v0.26.1/go.mod h1:3qvRIlWzWdq1HvmldwmuJ2ohpcAryN6xVt2OTKd0/7E= +github.com/go-openapi/swag/mangling v0.26.1 h1:gpYI4WuPKFJJVjV5cDLGlDVJhFIxYjQc7yN5eEb4CqM= +github.com/go-openapi/swag/mangling v0.26.1/go.mod h1:POETDH01hqAdASXfw7ISEd9bCOE6xBHOt8NHmGZRmYM= +github.com/go-openapi/swag/netutils v0.26.1 h1:BNctoc39WTAUMxyAs355fExOPzMZtPbZ0ZZ1Am2FR5M= +github.com/go-openapi/swag/netutils v0.26.1/go.mod h1:y02vByhZhQPAVwOX+0KipXFZ/hUbk6G/Enhf5rGaOkQ= +github.com/go-openapi/swag/stringutils v0.26.1 h1:f88uYyTso7TnHrKM/bUBsQ5e2wKf37cpgo6pvbzd9yU= +github.com/go-openapi/swag/stringutils v0.26.1/go.mod h1:Sc6d3bU8fgk5AyZR8/8jEQ+Is/Ald+TD/IIggPN8UJk= +github.com/go-openapi/swag/typeutils v0.26.1 h1:yg42FgMzRR6PVQ3M3qHz1s+Y6/P4HoJ3cBarXa3OVnU= +github.com/go-openapi/swag/typeutils v0.26.1/go.mod h1:VfnV+oUtSP2vCSCn2aJgnr8OevUYemyIzzS1VOzS10o= +github.com/go-openapi/swag/yamlutils v0.26.1 h1:0TSLK+lXs9vfIhAWzBeI/lOzEnIoot6WTCO1aAeWFTk= +github.com/go-openapi/swag/yamlutils v0.26.1/go.mod h1:7W5b7PRX9MxwL7TjeG7H8HkyBGRsIDRObhyMWFgBI2M= +github.com/go-openapi/testify/enable/yaml/v2 v2.5.1 h1:q9NtHwK4qHF7yZziBPvZyv7zWAIk8ok88Gh2mR6Jpc8= +github.com/go-openapi/testify/enable/yaml/v2 v2.5.1/go.mod h1:JW0MXIotCYps/XsgJnG3a8Q7rE5xAiBwoOD5OfaIQBk= +github.com/go-openapi/testify/v2 v2.5.1 h1:TMdhCaw8fUNraVSf3Omoob1dO/AzBfhtFAPW0an6sBo= +github.com/go-openapi/testify/v2 v2.5.1/go.mod h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw= +github.com/go-openapi/validate v0.26.0 h1:dxWzQ3F+vb1SajqUxHjwb5T4mTpSHmdrtv5Bi7+ZNhw= +github.com/go-openapi/validate v0.26.0/go.mod h1:b4o00uq7fJeJA+wWhVFCJpKTctzeFwzZImGGmHsl2JA= github.com/go-resty/resty/v2 v2.17.2 h1:FQW5oHYcIlkCNrMD2lloGScxcHJ0gkjshV3qcQAyHQk= github.com/go-resty/resty/v2 v2.17.2/go.mod h1:kCKZ3wWmwJaNc7S29BRtUhJwy7iqmn+2mLtQrOyQlVA= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -452,8 +454,8 @@ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d h1:/WZ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/jedib0t/go-pretty/v6 v6.7.10 h1:B/2qW2Bkv2L6n14PP8o1kx75kWzHOQ3YTluWzg9icac= -github.com/jedib0t/go-pretty/v6 v6.7.10/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU= +github.com/jedib0t/go-pretty/v6 v6.8.1 h1:0fkCNhjrX0zPpwkWaDYU5VMrygg41Tu197mWILIJoqQ= +github.com/jedib0t/go-pretty/v6 v6.8.1/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU= github.com/jellydator/ttlcache/v3 v3.4.0 h1:YS4P125qQS0tNhtL6aeYkheEaB/m8HCqdMMP4mnWdTY= github.com/jellydator/ttlcache/v3 v3.4.0/go.mod h1:Hw9EgjymziQD3yGsQdf1FqFdpp7YjFMd4Srg5EJlgD4= github.com/jeremija/gosubmit v0.2.8 h1:mmSITBz9JxVtu8eqbN+zmmwX7Ij2RidQxhcwRVI4wqA= @@ -517,8 +519,8 @@ github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= -github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-colorable v0.1.15 h1:+u9SLTRGnXv73cEsnsmoZBom+dMU88B2M0aDcWy0/jY= +github.com/mattn/go-colorable v0.1.15/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -533,16 +535,16 @@ github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+Ei github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= -github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw= -github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= +github.com/mattn/go-runewidth v0.0.24 h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/ay2DU= +github.com/mattn/go-runewidth v0.0.24/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0= github.com/mattn/go-tty v0.0.8 h1:yxtc0Ye17/1ne/bjy993YUoyP8bJJFa9n5M9XTdwoZQ= github.com/mattn/go-tty v0.0.8/go.mod h1:f2i5ZOvXBU/tCABmLmOfzLz9azMo5wdAaElRNnJKr+k= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mdlayher/netlink v1.11.1 h1:T136gDS6Gkt+hLncaBwKdW5GpEC8Z0ykqimOebVoal0= -github.com/mdlayher/netlink v1.11.1/go.mod h1:ao4LjamyK4Uq9L8+fQzqFYpAncbeCdwbvd9Edv/pYnc= -github.com/mdlayher/socket v0.6.0 h1:ScZPaAGyO1icQnbFrhPM8mnXyMu9qukC1K4ZoM2IQKU= -github.com/mdlayher/socket v0.6.0/go.mod h1:q7vozUAnxSqnjHc12Fik5yUKIzfZ8ITCfMkhOtE9z18= +github.com/mdlayher/netlink v1.11.2 h1:HKh2jqe+omdSWcQ88nrT7INE61B0NXfiSPFdgL4YbNI= +github.com/mdlayher/netlink v1.11.2/go.mod h1:uT2Yc/QLaZubzDpZIBi9d4GoeLwtp3x1AMeqSRrK2sA= +github.com/mdlayher/socket v0.6.1 h1:M7uj2NtuujUY4mYr1C57NmfNiRHbkKpnBxO856lsc3A= +github.com/mdlayher/socket v0.6.1/go.mod h1:+/SGtqc9V+5dAuRgQsU0fGBI+oRDiW7O2Obx10OIWfg= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= @@ -613,28 +615,28 @@ github.com/openziti/channel/v4 v4.3.11 h1:ugezUhTEuSQnVFKUioN1gh6f+ZF4eBqx6mOrT5 github.com/openziti/channel/v4 v4.3.11/go.mod h1:WZpOeuPliA7mJ3m7Pal8WdYu74eHMzkM/1Z9AMLmUAg= github.com/openziti/cobra-to-md v1.0.1 h1:WRinNoIRmwWUSJm+pSNXMjOrtU48oxXDZgeCYQfVXxE= github.com/openziti/cobra-to-md v1.0.1/go.mod h1:FjCpk/yzHF7/r28oSTNr5P57yN5VolpdAtS/g7KNi2c= -github.com/openziti/edge-api v0.31.0 h1:QdaaPnKQj4B40q404+c8VZxMsoVpfGpfOhzs3LLCd/A= -github.com/openziti/edge-api v0.31.0/go.mod h1:pDtCR6Mq0h5e8ulJhmuhPshEBa39hpQy+yTtLpUSBOs= +github.com/openziti/edge-api v0.31.1 h1:0AA2g/fXVkLV5ud89gzXFbcbQF6s9B8L15k+Fi7FhbI= +github.com/openziti/edge-api v0.31.1/go.mod h1:wFExSB9pO7yEwVVuz4AatZeU++dgcjy9pkzeCFLXeno= github.com/openziti/fablab v0.6.16 h1:JVy5zQ/NXoHl2SxMZDKT7jPnUlZyBSKAZXhVD2vOMKQ= github.com/openziti/fablab v0.6.16/go.mod h1:TXrgrWWnE9yxXP5e6RYBgjgmJhT1LXBnOtfir6Av+Ko= -github.com/openziti/foundation/v2 v2.0.91 h1:gjXFu+fxKKMCs1hCkfLNI9jfdiSBW2gXAnBCy5xG/UI= -github.com/openziti/foundation/v2 v2.0.91/go.mod h1:vbAudlD59QTMR+IifKXLL9c8W/OyL8DVsbYqGXWV2dY= +github.com/openziti/foundation/v2 v2.0.95 h1:ZB6AeclGCfuI2l3c3PN7stKLp6Ck+P0wBuokY4pp7qo= +github.com/openziti/foundation/v2 v2.0.95/go.mod h1:yhdRzmEzrHxqG8frg2fMmSpR5+iZI1tL/teeaAoWl7U= github.com/openziti/go-term-markdown v1.0.1 h1:9uzMpK4tav6OtvRxRt99WwPTzAzCh+Pj9zWU2FBp3Qg= github.com/openziti/go-term-markdown v1.0.1/go.mod h1:aIhR12zlROVqr7x51DtBALaQZQ3FofBuKDWqCfaz3oo= -github.com/openziti/identity v1.0.129 h1:aGe3xHKwSUz6s7wv/t+/Td9P8C3oUVdk5ZdT876UdXw= -github.com/openziti/identity v1.0.129/go.mod h1:Tqexnphch/kLbggaB9l9VWahTk0V9B0suRG3+R6ebf4= +github.com/openziti/identity v1.0.133 h1:rOFsV+sQVpy3FJqtShF7NYQxR+678FDQfFUS3ziGNeo= +github.com/openziti/identity v1.0.133/go.mod h1:mZKgg92/dHxGytk8eRCSg2wmEFUp/ajy4KhoArP+g94= github.com/openziti/jwks v1.0.6 h1:PR+9OVaMO8oHEoVQmHqeUBExWwLWyODEGJQK2DXHaqE= github.com/openziti/jwks v1.0.6/go.mod h1:t4xxq8vlXGsPn29kiQVnZBBDDnEoOFqtJoHibkJunQQ= github.com/openziti/metrics v1.4.5 h1:p51HYSQyqaDafizPWluhYjU/rVfY52snER8/BHpfPrU= github.com/openziti/metrics v1.4.5/go.mod h1:MOLcoTxhPNla6+NWUCMVTnl1PNqTU40qrbKVa/lVVgg= github.com/openziti/runzmd v1.0.90 h1:fasGlaq9xV+zohEGDC7Q0nOLA0n8Kpfccribc+VGQVw= github.com/openziti/runzmd v1.0.90/go.mod h1:ma3b7UdVYAC9ZCVUSjevUH/7yz9asI537XPsEh7+j14= -github.com/openziti/sdk-golang v1.7.0 h1:4IzBbioToOPkb7F0+vQcXwAx7e9Ca3++TBZh4mrHc7I= -github.com/openziti/sdk-golang v1.7.0/go.mod h1:MLEH77mc/l4CT4VShw0JFCzF0g+G+Z5HmV4Ic/Baer4= -github.com/openziti/secretstream v0.1.49 h1:qfyex2w4fGtTnvIGSiVXn8prQC2IWajQ4Y76r8x9CD0= -github.com/openziti/secretstream v0.1.49/go.mod h1:wrPNC1z0rh4e3wFW4kYumU1Tx9YoXXc9Im2biyxb0P4= -github.com/openziti/transport/v2 v2.0.215 h1:JkasjdBTa8kcVsLO1fn655GJWBrp6BsMElzSxN9dcEA= -github.com/openziti/transport/v2 v2.0.215/go.mod h1:oPeiTC0UHndnK8mQDAwnqZiefoXA8GfRlvVSMSFRbLc= +github.com/openziti/sdk-golang v1.8.0 h1:Gt2QT8+bO/qq7eVU/HeMYlBvatddTJoiwE8HS+xwxVo= +github.com/openziti/sdk-golang v1.8.0/go.mod h1:2nIjYyl7fBtomYRE6kZGkA3hU7Ene+tI7jqnA4yTWnk= +github.com/openziti/secretstream v0.1.51 h1:j/rMfIzBNqZD5a1EKV8J4Z5QeaoSK56s/zxvvB08eSA= +github.com/openziti/secretstream v0.1.51/go.mod h1:YapZv2c/SyZyohn6Q0MJkl8SUuBbs9Q6XWSiboBc1jA= +github.com/openziti/transport/v2 v2.0.216 h1:/2ALqUaeDzOfvZwzGSPNtWqMu8srgA1AERF3Nk94nDQ= +github.com/openziti/transport/v2 v2.0.216/go.mod h1:Kh4dP6FtAUbiJvTmRcMJvLVCBmpQOpvUT1jMUCLDxQg= github.com/openziti/x509-claims v1.0.3 h1:HNdQ8Nf1agB3lBs1gahcO6zfkeS4S5xoQ2/PkY4HRX0= github.com/openziti/x509-claims v1.0.3/go.mod h1:Z0WIpBm6c4ecrpRKrou6Gk2wrLWxJO/+tuUwKh8VewE= github.com/openziti/xweb/v3 v3.0.4 h1:sKQJOJDQiWcTkuc37L7oc0Z0jQ5Poh2zaa5raiP0GLc= @@ -650,12 +652,12 @@ github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwp github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.3.1 h1:MYEvvGnQjeNkRF1qUuGolNtNExTDwct51yp7olPtrEc= github.com/pelletier/go-toml/v2 v2.3.1/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= -github.com/pion/dtls/v3 v3.1.2 h1:gqEdOUXLtCGW+afsBLO0LtDD8GnuBBjEy6HRtyofZTc= -github.com/pion/dtls/v3 v3.1.2/go.mod h1:Hw/igcX4pdY69z1Hgv5x7wJFrUkdgHwAn/Q/uo7YHRo= +github.com/pion/dtls/v3 v3.1.4 h1:QhvtMflMfu9Kf0RcDC5BJBle4caPskByrKQR6uuYqpY= +github.com/pion/dtls/v3 v3.1.4/go.mod h1:cr/qotLISUw/9C1m83ZPNZtj9WnXkYLpfCptPqbkInc= github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= -github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k8o= -github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= +github.com/pion/transport/v4 v4.0.2 h1:ifYlPqNwsy6aKQ9y8yzxXlHae5431ZrH2avkD/Rn6Tk= +github.com/pion/transport/v4 v4.0.2/go.mod h1:06hFI+jCFcok2X2MekVufNZ/uzNZXivGBPfviSVcjgM= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -717,6 +719,8 @@ github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9t github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= +github.com/shirou/gopsutil/v4 v4.26.5 h1:RPcBXkpz7kOj9PqGFQOlBPZHsyaPvPVQc098y9RmCNM= +github.com/shirou/gopsutil/v4 v4.26.5/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ= github.com/shoenig/go-m1cpu v0.2.1 h1:yqRB4fvOge2+FyRXFkXqsyMoqPazv14Yyy+iyccT2E4= github.com/shoenig/go-m1cpu v0.2.1/go.mod h1:KkDOw6m3ZJQAPHbrzkZki4hnx+pDRR1Lo+ldA56wD5w= github.com/shoenig/test v1.7.0 h1:eWcHtTXa6QLnBvm0jgEabMRN/uJ4DMV3M8xUGgRkZmk= @@ -822,14 +826,14 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= 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/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= -go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -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/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/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= +go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= +go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= +go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= +go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58= +go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0= +go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk= +go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= @@ -852,8 +856,8 @@ 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.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -864,8 +868,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a h1:+3jdDGGB8NGb1Zktc737jlt3/A5f6UlwSzmvqUuufxw= -golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a/go.mod h1:d2fgXJLVs4dYDHUk5lwMIfzRzSrWCfGZb0ZqeLa/Vcw= +golang.org/x/exp v0.0.0-20260603202125-055de637280b h1:v1uXiEBHo8QA0LiGCo7UgHMzHT4Kdfpl2zmtH5vaP1Q= +golang.org/x/exp v0.0.0-20260603202125-055de637280b/go.mod h1:d2fgXJLVs4dYDHUk5lwMIfzRzSrWCfGZb0ZqeLa/Vcw= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -892,8 +896,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/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.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= -golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -938,8 +942,8 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= -golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= +golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= +golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -966,8 +970,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1038,13 +1042,13 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= -golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= -golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= +golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= +golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1054,8 +1058,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1236,8 +1240,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI=