Add entity information request to system view (#4681)

* Add entity information request to system view

* fixing a few comments

* sharing types between plugin and logical

* sharing types between plugin and logical

* fixing output directory for proto

* removing extra replacement

* adding mount type lookup

* empty entities return nil instead of error

* adding some comments
This commit is contained in:
Chris Hoffman 2018-06-03 20:48:12 -04:00 committed by GitHub
parent bacd506163
commit 51bc3d8891
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 680 additions and 308 deletions

View File

@ -127,6 +127,7 @@ proto:
protoc -I helper/forwarding -I vault -I ../../.. vault/*.proto --go_out=plugins=grpc:vault
protoc -I helper/storagepacker helper/storagepacker/types.proto --go_out=plugins=grpc:helper/storagepacker
protoc -I helper/forwarding -I vault -I ../../.. helper/forwarding/types.proto --go_out=plugins=grpc:helper/forwarding
protoc logical/*.proto --go_out=plugins=grpc:$(GOPATH)/src
protoc -I physical physical/types.proto --go_out=plugins=grpc:physical
protoc -I helper/identity -I ../../.. helper/identity/types.proto --go_out=plugins=grpc:helper/identity
protoc builtin/logical/database/dbplugin/*.proto --go_out=plugins=grpc:.

View File

@ -1,16 +0,0 @@
package logical
// Alias represents the information used by core to create implicit entity.
// Implicit entities get created when a client authenticates successfully from
// any of the authentication backends (except token backend).
type Alias struct {
// MountType is the backend mount's type to which this identity belongs
MountType string `json:"mount_type" structs:"mount_type" mapstructure:"mount_type"`
// MountAccessor is the identifier of the mount entry to which this
// identity belongs
MountAccessor string `json:"mount_accessor" structs:"mount_accessor" mapstructure:"mount_accessor"`
// Name is the identifier of this identity in its authentication source
Name string `json:"name" structs:"name" mapstructure:"name"`
}

159
logical/identity.pb.go Normal file
View File

@ -0,0 +1,159 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: logical/identity.proto
package logical // import "github.com/hashicorp/vault/logical"
import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type Entity struct {
// ID is the unique identifier for the entity
ID string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"`
// Name is the human-friendly unique identifier for the entity
Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
// Aliases contains thhe alias mappings for the given entity
Aliases []*Alias `protobuf:"bytes,3,rep,name=aliases" json:"aliases,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Entity) Reset() { *m = Entity{} }
func (m *Entity) String() string { return proto.CompactTextString(m) }
func (*Entity) ProtoMessage() {}
func (*Entity) Descriptor() ([]byte, []int) {
return fileDescriptor_identity_63bdeae5187a0ba9, []int{0}
}
func (m *Entity) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Entity.Unmarshal(m, b)
}
func (m *Entity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Entity.Marshal(b, m, deterministic)
}
func (dst *Entity) XXX_Merge(src proto.Message) {
xxx_messageInfo_Entity.Merge(dst, src)
}
func (m *Entity) XXX_Size() int {
return xxx_messageInfo_Entity.Size(m)
}
func (m *Entity) XXX_DiscardUnknown() {
xxx_messageInfo_Entity.DiscardUnknown(m)
}
var xxx_messageInfo_Entity proto.InternalMessageInfo
func (m *Entity) GetID() string {
if m != nil {
return m.ID
}
return ""
}
func (m *Entity) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *Entity) GetAliases() []*Alias {
if m != nil {
return m.Aliases
}
return nil
}
type Alias struct {
// MountType is the backend mount's type to which this identity belongs
MountType string `protobuf:"bytes,1,opt,name=mount_type,json=mountType" json:"mount_type,omitempty"`
// MountAccessor is the identifier of the mount entry to which this
// identity belongs
MountAccessor string `protobuf:"bytes,2,opt,name=mount_accessor,json=mountAccessor" json:"mount_accessor,omitempty"`
// Name is the identifier of this identity in its authentication source
Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Alias) Reset() { *m = Alias{} }
func (m *Alias) String() string { return proto.CompactTextString(m) }
func (*Alias) ProtoMessage() {}
func (*Alias) Descriptor() ([]byte, []int) {
return fileDescriptor_identity_63bdeae5187a0ba9, []int{1}
}
func (m *Alias) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Alias.Unmarshal(m, b)
}
func (m *Alias) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Alias.Marshal(b, m, deterministic)
}
func (dst *Alias) XXX_Merge(src proto.Message) {
xxx_messageInfo_Alias.Merge(dst, src)
}
func (m *Alias) XXX_Size() int {
return xxx_messageInfo_Alias.Size(m)
}
func (m *Alias) XXX_DiscardUnknown() {
xxx_messageInfo_Alias.DiscardUnknown(m)
}
var xxx_messageInfo_Alias proto.InternalMessageInfo
func (m *Alias) GetMountType() string {
if m != nil {
return m.MountType
}
return ""
}
func (m *Alias) GetMountAccessor() string {
if m != nil {
return m.MountAccessor
}
return ""
}
func (m *Alias) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func init() {
proto.RegisterType((*Entity)(nil), "logical.Entity")
proto.RegisterType((*Alias)(nil), "logical.Alias")
}
func init() { proto.RegisterFile("logical/identity.proto", fileDescriptor_identity_63bdeae5187a0ba9) }
var fileDescriptor_identity_63bdeae5187a0ba9 = []byte{
// 209 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x44, 0xcf, 0x31, 0x6b, 0x85, 0x30,
0x14, 0x05, 0x60, 0xd4, 0x56, 0xf1, 0x96, 0x3a, 0x64, 0x28, 0x2e, 0x05, 0x91, 0x16, 0x9c, 0x12,
0x68, 0x7f, 0x81, 0xc5, 0x0e, 0xae, 0x52, 0x3a, 0x74, 0x29, 0xd7, 0x34, 0x68, 0x20, 0x9a, 0x60,
0x62, 0xc1, 0x7f, 0x5f, 0x9a, 0x97, 0xf7, 0xde, 0x16, 0xbe, 0x03, 0x27, 0xe7, 0xc2, 0x83, 0xd2,
0x93, 0xe4, 0xa8, 0x98, 0xfc, 0x11, 0xab, 0x93, 0xee, 0xa0, 0x66, 0xd3, 0x4e, 0x93, 0x2c, 0x78,
0xfd, 0x09, 0xe9, 0xbb, 0x0f, 0x48, 0x01, 0x71, 0xdf, 0x95, 0x51, 0x15, 0x35, 0xf9, 0x10, 0xf7,
0x1d, 0x21, 0x70, 0xb3, 0xe2, 0x22, 0xca, 0xd8, 0x8b, 0x7f, 0x93, 0x06, 0x32, 0x54, 0x12, 0xad,
0xb0, 0x65, 0x52, 0x25, 0xcd, 0xdd, 0x4b, 0x41, 0x43, 0x11, 0x6d, 0xff, 0x7d, 0x38, 0xc7, 0x35,
0xc2, 0xad, 0x17, 0xf2, 0x08, 0xb0, 0xe8, 0x7d, 0x75, 0xdf, 0xee, 0x30, 0x22, 0xd4, 0xe7, 0x5e,
0x3e, 0x0e, 0x23, 0xc8, 0x33, 0x14, 0xa7, 0x18, 0x39, 0x17, 0xd6, 0xea, 0x2d, 0xfc, 0x77, 0xef,
0xb5, 0x0d, 0x78, 0x19, 0x93, 0x5c, 0xc7, 0xbc, 0x3d, 0x7d, 0xd5, 0x93, 0x74, 0xf3, 0x3e, 0x52,
0xae, 0x17, 0x36, 0xa3, 0x9d, 0x25, 0xd7, 0x9b, 0x61, 0xbf, 0xb8, 0x2b, 0xc7, 0xc2, 0xae, 0x31,
0xf5, 0x07, 0xbf, 0xfe, 0x05, 0x00, 0x00, 0xff, 0xff, 0x53, 0x90, 0x60, 0xf6, 0x0a, 0x01, 0x00,
0x00,
}

29
logical/identity.proto Normal file
View File

@ -0,0 +1,29 @@
syntax = "proto3";
option go_package = "github.com/hashicorp/vault/logical";
package logical;
message Entity {
// ID is the unique identifier for the entity
string ID = 1;
// Name is the human-friendly unique identifier for the entity
string name = 2;
// Aliases contains thhe alias mappings for the given entity
repeated Alias aliases = 3;
}
message Alias {
// MountType is the backend mount's type to which this identity belongs
string mount_type = 1;
// MountAccessor is the identifier of the mount entry to which this
// identity belongs
string mount_accessor = 2;
// Name is the identifier of this identity in its authentication source
string name = 3;
}

View File

@ -132,6 +132,20 @@ func (s *gRPCSystemViewClient) LocalMount() bool {
return reply.Local
}
func (s *gRPCSystemViewClient) EntityInfo(entityID string) (*logical.Entity, error) {
reply, err := s.client.EntityInfo(context.Background(), &pb.EntityInfoArgs{
EntityID: entityID,
})
if err != nil {
return nil, err
}
if reply.Err != "" {
return nil, errors.New(reply.Err)
}
return reply.Entity, nil
}
type gRPCSystemViewServer struct {
impl logical.SystemView
}
@ -216,3 +230,15 @@ func (s *gRPCSystemViewServer) LocalMount(ctx context.Context, _ *pb.Empty) (*pb
Local: local,
}, nil
}
func (s *gRPCSystemViewServer) EntityInfo(ctx context.Context, args *pb.EntityInfoArgs) (*pb.EntityInfoReply, error) {
entity, err := s.impl.EntityInfo(args.EntityID)
if err != nil {
return &pb.EntityInfoReply{
Err: pb.ErrToString(err),
}, nil
}
return &pb.EntityInfoReply{
Entity: entity,
}, nil
}

View File

@ -164,3 +164,26 @@ func TestSystem_GRPC_mlockEnabled(t *testing.T) {
t.Fatalf("expected: %v, got: %v", expected, actual)
}
}
func TestSystem_GRPC_entityInfo(t *testing.T) {
sys := logical.TestSystemView()
sys.EntityVal = &logical.Entity{
ID: "id",
Name: "name",
}
client, _ := plugin.TestGRPCConn(t, func(s *grpc.Server) {
pb.RegisterSystemViewServer(s, &gRPCSystemViewServer{
impl: sys,
})
})
defer client.Close()
testSystemView := newGRPCSystemView(client)
actual, err := testSystemView.EntityInfo("")
if err != nil {
t.Fatal(err)
}
if sys.EntityVal.ID != actual.ID || sys.EntityVal.Name != actual.Name {
t.Fatalf("expected: %v, got: %v", sys.EntityVal, actual)
}
}

View File

@ -7,6 +7,7 @@ import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import timestamp "github.com/golang/protobuf/ptypes/timestamp"
import logical "github.com/hashicorp/vault/logical"
import (
context "golang.org/x/net/context"
@ -34,7 +35,7 @@ func (m *Empty) Reset() { *m = Empty{} }
func (m *Empty) String() string { return proto.CompactTextString(m) }
func (*Empty) ProtoMessage() {}
func (*Empty) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{0}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{0}
}
func (m *Empty) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Empty.Unmarshal(m, b)
@ -65,7 +66,7 @@ func (m *Header) Reset() { *m = Header{} }
func (m *Header) String() string { return proto.CompactTextString(m) }
func (*Header) ProtoMessage() {}
func (*Header) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{1}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{1}
}
func (m *Header) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Header.Unmarshal(m, b)
@ -116,7 +117,7 @@ func (m *ProtoError) Reset() { *m = ProtoError{} }
func (m *ProtoError) String() string { return proto.CompactTextString(m) }
func (*ProtoError) ProtoMessage() {}
func (*ProtoError) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{2}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{2}
}
func (m *ProtoError) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ProtoError.Unmarshal(m, b)
@ -179,7 +180,7 @@ func (m *Paths) Reset() { *m = Paths{} }
func (m *Paths) String() string { return proto.CompactTextString(m) }
func (*Paths) ProtoMessage() {}
func (*Paths) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{3}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{3}
}
func (m *Paths) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Paths.Unmarshal(m, b)
@ -303,7 +304,7 @@ func (m *Request) Reset() { *m = Request{} }
func (m *Request) String() string { return proto.CompactTextString(m) }
func (*Request) ProtoMessage() {}
func (*Request) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{4}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{4}
}
func (m *Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Request.Unmarshal(m, b)
@ -463,64 +464,6 @@ func (m *Request) GetConnection() *Connection {
return nil
}
type Alias struct {
// MountType is the backend mount's type to which this identity belongs
MountType string `sentinel:"" protobuf:"bytes,1,opt,name=mount_type,json=mountType" json:"mount_type,omitempty"`
// MountAccessor is the identifier of the mount entry to which this
// identity belongs
MountAccessor string `sentinel:"" protobuf:"bytes,2,opt,name=mount_accessor,json=mountAccessor" json:"mount_accessor,omitempty"`
// Name is the identifier of this identity in its authentication source
Name string `sentinel:"" protobuf:"bytes,3,opt,name=name" json:"name,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Alias) Reset() { *m = Alias{} }
func (m *Alias) String() string { return proto.CompactTextString(m) }
func (*Alias) ProtoMessage() {}
func (*Alias) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{5}
}
func (m *Alias) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Alias.Unmarshal(m, b)
}
func (m *Alias) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Alias.Marshal(b, m, deterministic)
}
func (dst *Alias) XXX_Merge(src proto.Message) {
xxx_messageInfo_Alias.Merge(dst, src)
}
func (m *Alias) XXX_Size() int {
return xxx_messageInfo_Alias.Size(m)
}
func (m *Alias) XXX_DiscardUnknown() {
xxx_messageInfo_Alias.DiscardUnknown(m)
}
var xxx_messageInfo_Alias proto.InternalMessageInfo
func (m *Alias) GetMountType() string {
if m != nil {
return m.MountType
}
return ""
}
func (m *Alias) GetMountAccessor() string {
if m != nil {
return m.MountAccessor
}
return ""
}
func (m *Alias) GetName() string {
if m != nil {
return m.Name
}
return ""
}
type Auth struct {
LeaseOptions *LeaseOptions `sentinel:"" protobuf:"bytes,1,opt,name=lease_options,json=leaseOptions" json:"lease_options,omitempty"`
// InternalData is a JSON object that is stored with the auth struct.
@ -562,12 +505,12 @@ type Auth struct {
EntityID string `sentinel:"" protobuf:"bytes,10,opt,name=entity_id,json=entityId" json:"entity_id,omitempty"`
// Alias is the information about the authenticated client returned by
// the auth backend
Alias *Alias `sentinel:"" protobuf:"bytes,11,opt,name=alias" json:"alias,omitempty"`
Alias *logical.Alias `sentinel:"" protobuf:"bytes,11,opt,name=alias" json:"alias,omitempty"`
// GroupAliases are the informational mappings of external groups which an
// authenticated user belongs to. This is used to check if there are
// mappings groups for the group aliases in identity store. For all the
// matching groups, the entity ID of the user will be added.
GroupAliases []*Alias `sentinel:"" protobuf:"bytes,12,rep,name=group_aliases,json=groupAliases" json:"group_aliases,omitempty"`
GroupAliases []*logical.Alias `sentinel:"" protobuf:"bytes,12,rep,name=group_aliases,json=groupAliases" json:"group_aliases,omitempty"`
// If set, restricts usage of the certificates to client IPs falling within
// the range of the specified CIDR(s).
BoundCidrs []string `sentinel:"" protobuf:"bytes,13,rep,name=bound_cidrs,json=boundCidrs" json:"bound_cidrs,omitempty"`
@ -580,7 +523,7 @@ func (m *Auth) Reset() { *m = Auth{} }
func (m *Auth) String() string { return proto.CompactTextString(m) }
func (*Auth) ProtoMessage() {}
func (*Auth) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{6}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{5}
}
func (m *Auth) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Auth.Unmarshal(m, b)
@ -670,14 +613,14 @@ func (m *Auth) GetEntityID() string {
return ""
}
func (m *Auth) GetAlias() *Alias {
func (m *Auth) GetAlias() *logical.Alias {
if m != nil {
return m.Alias
}
return nil
}
func (m *Auth) GetGroupAliases() []*Alias {
func (m *Auth) GetGroupAliases() []*logical.Alias {
if m != nil {
return m.GroupAliases
}
@ -706,7 +649,7 @@ func (m *LeaseOptions) Reset() { *m = LeaseOptions{} }
func (m *LeaseOptions) String() string { return proto.CompactTextString(m) }
func (*LeaseOptions) ProtoMessage() {}
func (*LeaseOptions) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{7}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{6}
}
func (m *LeaseOptions) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LeaseOptions.Unmarshal(m, b)
@ -780,7 +723,7 @@ func (m *Secret) Reset() { *m = Secret{} }
func (m *Secret) String() string { return proto.CompactTextString(m) }
func (*Secret) ProtoMessage() {}
func (*Secret) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{8}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{7}
}
func (m *Secret) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Secret.Unmarshal(m, b)
@ -851,7 +794,7 @@ func (m *Response) Reset() { *m = Response{} }
func (m *Response) String() string { return proto.CompactTextString(m) }
func (*Response) ProtoMessage() {}
func (*Response) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{9}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{8}
}
func (m *Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Response.Unmarshal(m, b)
@ -946,7 +889,7 @@ func (m *ResponseWrapInfo) Reset() { *m = ResponseWrapInfo{} }
func (m *ResponseWrapInfo) String() string { return proto.CompactTextString(m) }
func (*ResponseWrapInfo) ProtoMessage() {}
func (*ResponseWrapInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{10}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{9}
}
func (m *ResponseWrapInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseWrapInfo.Unmarshal(m, b)
@ -1048,7 +991,7 @@ func (m *RequestWrapInfo) Reset() { *m = RequestWrapInfo{} }
func (m *RequestWrapInfo) String() string { return proto.CompactTextString(m) }
func (*RequestWrapInfo) ProtoMessage() {}
func (*RequestWrapInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{11}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{10}
}
func (m *RequestWrapInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RequestWrapInfo.Unmarshal(m, b)
@ -1102,7 +1045,7 @@ func (m *HandleRequestArgs) Reset() { *m = HandleRequestArgs{} }
func (m *HandleRequestArgs) String() string { return proto.CompactTextString(m) }
func (*HandleRequestArgs) ProtoMessage() {}
func (*HandleRequestArgs) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{12}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{11}
}
func (m *HandleRequestArgs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_HandleRequestArgs.Unmarshal(m, b)
@ -1149,7 +1092,7 @@ func (m *HandleRequestReply) Reset() { *m = HandleRequestReply{} }
func (m *HandleRequestReply) String() string { return proto.CompactTextString(m) }
func (*HandleRequestReply) ProtoMessage() {}
func (*HandleRequestReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{13}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{12}
}
func (m *HandleRequestReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_HandleRequestReply.Unmarshal(m, b)
@ -1195,7 +1138,7 @@ func (m *SpecialPathsReply) Reset() { *m = SpecialPathsReply{} }
func (m *SpecialPathsReply) String() string { return proto.CompactTextString(m) }
func (*SpecialPathsReply) ProtoMessage() {}
func (*SpecialPathsReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{14}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{13}
}
func (m *SpecialPathsReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SpecialPathsReply.Unmarshal(m, b)
@ -1235,7 +1178,7 @@ func (m *HandleExistenceCheckArgs) Reset() { *m = HandleExistenceCheckAr
func (m *HandleExistenceCheckArgs) String() string { return proto.CompactTextString(m) }
func (*HandleExistenceCheckArgs) ProtoMessage() {}
func (*HandleExistenceCheckArgs) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{15}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{14}
}
func (m *HandleExistenceCheckArgs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_HandleExistenceCheckArgs.Unmarshal(m, b)
@ -1283,7 +1226,7 @@ func (m *HandleExistenceCheckReply) Reset() { *m = HandleExistenceCheckR
func (m *HandleExistenceCheckReply) String() string { return proto.CompactTextString(m) }
func (*HandleExistenceCheckReply) ProtoMessage() {}
func (*HandleExistenceCheckReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{16}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{15}
}
func (m *HandleExistenceCheckReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_HandleExistenceCheckReply.Unmarshal(m, b)
@ -1338,7 +1281,7 @@ func (m *SetupArgs) Reset() { *m = SetupArgs{} }
func (m *SetupArgs) String() string { return proto.CompactTextString(m) }
func (*SetupArgs) ProtoMessage() {}
func (*SetupArgs) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{17}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{16}
}
func (m *SetupArgs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetupArgs.Unmarshal(m, b)
@ -1391,7 +1334,7 @@ func (m *SetupReply) Reset() { *m = SetupReply{} }
func (m *SetupReply) String() string { return proto.CompactTextString(m) }
func (*SetupReply) ProtoMessage() {}
func (*SetupReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{18}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{17}
}
func (m *SetupReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetupReply.Unmarshal(m, b)
@ -1430,7 +1373,7 @@ func (m *TypeReply) Reset() { *m = TypeReply{} }
func (m *TypeReply) String() string { return proto.CompactTextString(m) }
func (*TypeReply) ProtoMessage() {}
func (*TypeReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{19}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{18}
}
func (m *TypeReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TypeReply.Unmarshal(m, b)
@ -1468,7 +1411,7 @@ func (m *InvalidateKeyArgs) Reset() { *m = InvalidateKeyArgs{} }
func (m *InvalidateKeyArgs) String() string { return proto.CompactTextString(m) }
func (*InvalidateKeyArgs) ProtoMessage() {}
func (*InvalidateKeyArgs) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{20}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{19}
}
func (m *InvalidateKeyArgs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InvalidateKeyArgs.Unmarshal(m, b)
@ -1508,7 +1451,7 @@ func (m *StorageEntry) Reset() { *m = StorageEntry{} }
func (m *StorageEntry) String() string { return proto.CompactTextString(m) }
func (*StorageEntry) ProtoMessage() {}
func (*StorageEntry) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{21}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{20}
}
func (m *StorageEntry) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StorageEntry.Unmarshal(m, b)
@ -1560,7 +1503,7 @@ func (m *StorageListArgs) Reset() { *m = StorageListArgs{} }
func (m *StorageListArgs) String() string { return proto.CompactTextString(m) }
func (*StorageListArgs) ProtoMessage() {}
func (*StorageListArgs) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{22}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{21}
}
func (m *StorageListArgs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StorageListArgs.Unmarshal(m, b)
@ -1599,7 +1542,7 @@ func (m *StorageListReply) Reset() { *m = StorageListReply{} }
func (m *StorageListReply) String() string { return proto.CompactTextString(m) }
func (*StorageListReply) ProtoMessage() {}
func (*StorageListReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{23}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{22}
}
func (m *StorageListReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StorageListReply.Unmarshal(m, b)
@ -1644,7 +1587,7 @@ func (m *StorageGetArgs) Reset() { *m = StorageGetArgs{} }
func (m *StorageGetArgs) String() string { return proto.CompactTextString(m) }
func (*StorageGetArgs) ProtoMessage() {}
func (*StorageGetArgs) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{24}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{23}
}
func (m *StorageGetArgs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StorageGetArgs.Unmarshal(m, b)
@ -1683,7 +1626,7 @@ func (m *StorageGetReply) Reset() { *m = StorageGetReply{} }
func (m *StorageGetReply) String() string { return proto.CompactTextString(m) }
func (*StorageGetReply) ProtoMessage() {}
func (*StorageGetReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{25}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{24}
}
func (m *StorageGetReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StorageGetReply.Unmarshal(m, b)
@ -1728,7 +1671,7 @@ func (m *StoragePutArgs) Reset() { *m = StoragePutArgs{} }
func (m *StoragePutArgs) String() string { return proto.CompactTextString(m) }
func (*StoragePutArgs) ProtoMessage() {}
func (*StoragePutArgs) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{26}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{25}
}
func (m *StoragePutArgs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StoragePutArgs.Unmarshal(m, b)
@ -1766,7 +1709,7 @@ func (m *StoragePutReply) Reset() { *m = StoragePutReply{} }
func (m *StoragePutReply) String() string { return proto.CompactTextString(m) }
func (*StoragePutReply) ProtoMessage() {}
func (*StoragePutReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{27}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{26}
}
func (m *StoragePutReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StoragePutReply.Unmarshal(m, b)
@ -1804,7 +1747,7 @@ func (m *StorageDeleteArgs) Reset() { *m = StorageDeleteArgs{} }
func (m *StorageDeleteArgs) String() string { return proto.CompactTextString(m) }
func (*StorageDeleteArgs) ProtoMessage() {}
func (*StorageDeleteArgs) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{28}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{27}
}
func (m *StorageDeleteArgs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StorageDeleteArgs.Unmarshal(m, b)
@ -1842,7 +1785,7 @@ func (m *StorageDeleteReply) Reset() { *m = StorageDeleteReply{} }
func (m *StorageDeleteReply) String() string { return proto.CompactTextString(m) }
func (*StorageDeleteReply) ProtoMessage() {}
func (*StorageDeleteReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{29}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{28}
}
func (m *StorageDeleteReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StorageDeleteReply.Unmarshal(m, b)
@ -1880,7 +1823,7 @@ func (m *TTLReply) Reset() { *m = TTLReply{} }
func (m *TTLReply) String() string { return proto.CompactTextString(m) }
func (*TTLReply) ProtoMessage() {}
func (*TTLReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{30}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{29}
}
func (m *TTLReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TTLReply.Unmarshal(m, b)
@ -1919,7 +1862,7 @@ func (m *SudoPrivilegeArgs) Reset() { *m = SudoPrivilegeArgs{} }
func (m *SudoPrivilegeArgs) String() string { return proto.CompactTextString(m) }
func (*SudoPrivilegeArgs) ProtoMessage() {}
func (*SudoPrivilegeArgs) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{31}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{30}
}
func (m *SudoPrivilegeArgs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SudoPrivilegeArgs.Unmarshal(m, b)
@ -1964,7 +1907,7 @@ func (m *SudoPrivilegeReply) Reset() { *m = SudoPrivilegeReply{} }
func (m *SudoPrivilegeReply) String() string { return proto.CompactTextString(m) }
func (*SudoPrivilegeReply) ProtoMessage() {}
func (*SudoPrivilegeReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{32}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{31}
}
func (m *SudoPrivilegeReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SudoPrivilegeReply.Unmarshal(m, b)
@ -2002,7 +1945,7 @@ func (m *TaintedReply) Reset() { *m = TaintedReply{} }
func (m *TaintedReply) String() string { return proto.CompactTextString(m) }
func (*TaintedReply) ProtoMessage() {}
func (*TaintedReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{33}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{32}
}
func (m *TaintedReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaintedReply.Unmarshal(m, b)
@ -2040,7 +1983,7 @@ func (m *CachingDisabledReply) Reset() { *m = CachingDisabledReply{} }
func (m *CachingDisabledReply) String() string { return proto.CompactTextString(m) }
func (*CachingDisabledReply) ProtoMessage() {}
func (*CachingDisabledReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{34}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{33}
}
func (m *CachingDisabledReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CachingDisabledReply.Unmarshal(m, b)
@ -2078,7 +2021,7 @@ func (m *ReplicationStateReply) Reset() { *m = ReplicationStateReply{} }
func (m *ReplicationStateReply) String() string { return proto.CompactTextString(m) }
func (*ReplicationStateReply) ProtoMessage() {}
func (*ReplicationStateReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{35}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{34}
}
func (m *ReplicationStateReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReplicationStateReply.Unmarshal(m, b)
@ -2118,7 +2061,7 @@ func (m *ResponseWrapDataArgs) Reset() { *m = ResponseWrapDataArgs{} }
func (m *ResponseWrapDataArgs) String() string { return proto.CompactTextString(m) }
func (*ResponseWrapDataArgs) ProtoMessage() {}
func (*ResponseWrapDataArgs) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{36}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{35}
}
func (m *ResponseWrapDataArgs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseWrapDataArgs.Unmarshal(m, b)
@ -2171,7 +2114,7 @@ func (m *ResponseWrapDataReply) Reset() { *m = ResponseWrapDataReply{} }
func (m *ResponseWrapDataReply) String() string { return proto.CompactTextString(m) }
func (*ResponseWrapDataReply) ProtoMessage() {}
func (*ResponseWrapDataReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{37}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{36}
}
func (m *ResponseWrapDataReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseWrapDataReply.Unmarshal(m, b)
@ -2216,7 +2159,7 @@ func (m *MlockEnabledReply) Reset() { *m = MlockEnabledReply{} }
func (m *MlockEnabledReply) String() string { return proto.CompactTextString(m) }
func (*MlockEnabledReply) ProtoMessage() {}
func (*MlockEnabledReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{38}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{37}
}
func (m *MlockEnabledReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MlockEnabledReply.Unmarshal(m, b)
@ -2254,7 +2197,7 @@ func (m *LocalMountReply) Reset() { *m = LocalMountReply{} }
func (m *LocalMountReply) String() string { return proto.CompactTextString(m) }
func (*LocalMountReply) ProtoMessage() {}
func (*LocalMountReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{39}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{38}
}
func (m *LocalMountReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LocalMountReply.Unmarshal(m, b)
@ -2281,6 +2224,90 @@ func (m *LocalMountReply) GetLocal() bool {
return false
}
type EntityInfoArgs struct {
EntityID string `sentinel:"" protobuf:"bytes,1,opt,name=entity_id,json=entityId" json:"entity_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *EntityInfoArgs) Reset() { *m = EntityInfoArgs{} }
func (m *EntityInfoArgs) String() string { return proto.CompactTextString(m) }
func (*EntityInfoArgs) ProtoMessage() {}
func (*EntityInfoArgs) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{39}
}
func (m *EntityInfoArgs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_EntityInfoArgs.Unmarshal(m, b)
}
func (m *EntityInfoArgs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_EntityInfoArgs.Marshal(b, m, deterministic)
}
func (dst *EntityInfoArgs) XXX_Merge(src proto.Message) {
xxx_messageInfo_EntityInfoArgs.Merge(dst, src)
}
func (m *EntityInfoArgs) XXX_Size() int {
return xxx_messageInfo_EntityInfoArgs.Size(m)
}
func (m *EntityInfoArgs) XXX_DiscardUnknown() {
xxx_messageInfo_EntityInfoArgs.DiscardUnknown(m)
}
var xxx_messageInfo_EntityInfoArgs proto.InternalMessageInfo
func (m *EntityInfoArgs) GetEntityID() string {
if m != nil {
return m.EntityID
}
return ""
}
type EntityInfoReply struct {
Entity *logical.Entity `sentinel:"" protobuf:"bytes,1,opt,name=entity" json:"entity,omitempty"`
Err string `sentinel:"" protobuf:"bytes,2,opt,name=err" json:"err,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *EntityInfoReply) Reset() { *m = EntityInfoReply{} }
func (m *EntityInfoReply) String() string { return proto.CompactTextString(m) }
func (*EntityInfoReply) ProtoMessage() {}
func (*EntityInfoReply) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{40}
}
func (m *EntityInfoReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_EntityInfoReply.Unmarshal(m, b)
}
func (m *EntityInfoReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_EntityInfoReply.Marshal(b, m, deterministic)
}
func (dst *EntityInfoReply) XXX_Merge(src proto.Message) {
xxx_messageInfo_EntityInfoReply.Merge(dst, src)
}
func (m *EntityInfoReply) XXX_Size() int {
return xxx_messageInfo_EntityInfoReply.Size(m)
}
func (m *EntityInfoReply) XXX_DiscardUnknown() {
xxx_messageInfo_EntityInfoReply.DiscardUnknown(m)
}
var xxx_messageInfo_EntityInfoReply proto.InternalMessageInfo
func (m *EntityInfoReply) GetEntity() *logical.Entity {
if m != nil {
return m.Entity
}
return nil
}
func (m *EntityInfoReply) GetErr() string {
if m != nil {
return m.Err
}
return ""
}
type Connection struct {
// RemoteAddr is the network address that sent the request.
RemoteAddr string `sentinel:"" protobuf:"bytes,1,opt,name=remote_addr,json=remoteAddr" json:"remote_addr,omitempty"`
@ -2293,7 +2320,7 @@ func (m *Connection) Reset() { *m = Connection{} }
func (m *Connection) String() string { return proto.CompactTextString(m) }
func (*Connection) ProtoMessage() {}
func (*Connection) Descriptor() ([]byte, []int) {
return fileDescriptor_backend_a4dea436a6c1c127, []int{40}
return fileDescriptor_backend_5a7f5d2f43604fb6, []int{41}
}
func (m *Connection) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Connection.Unmarshal(m, b)
@ -2327,7 +2354,6 @@ func init() {
proto.RegisterType((*Paths)(nil), "pb.Paths")
proto.RegisterType((*Request)(nil), "pb.Request")
proto.RegisterMapType((map[string]*Header)(nil), "pb.Request.HeadersEntry")
proto.RegisterType((*Alias)(nil), "pb.Alias")
proto.RegisterType((*Auth)(nil), "pb.Auth")
proto.RegisterMapType((map[string]string)(nil), "pb.Auth.MetadataEntry")
proto.RegisterType((*LeaseOptions)(nil), "pb.LeaseOptions")
@ -2364,6 +2390,8 @@ func init() {
proto.RegisterType((*ResponseWrapDataReply)(nil), "pb.ResponseWrapDataReply")
proto.RegisterType((*MlockEnabledReply)(nil), "pb.MlockEnabledReply")
proto.RegisterType((*LocalMountReply)(nil), "pb.LocalMountReply")
proto.RegisterType((*EntityInfoArgs)(nil), "pb.EntityInfoArgs")
proto.RegisterType((*EntityInfoReply)(nil), "pb.EntityInfoReply")
proto.RegisterType((*Connection)(nil), "pb.Connection")
}
@ -2886,6 +2914,8 @@ type SystemViewClient interface {
// LocalMount, when run from a system view attached to a request, indicates
// whether the request is affecting a local mount or not
LocalMount(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*LocalMountReply, error)
// EntityInfo returns the basic entity information for the given entity id
EntityInfo(ctx context.Context, in *EntityInfoArgs, opts ...grpc.CallOption) (*EntityInfoReply, error)
}
type systemViewClient struct {
@ -2977,6 +3007,15 @@ func (c *systemViewClient) LocalMount(ctx context.Context, in *Empty, opts ...gr
return out, nil
}
func (c *systemViewClient) EntityInfo(ctx context.Context, in *EntityInfoArgs, opts ...grpc.CallOption) (*EntityInfoReply, error) {
out := new(EntityInfoReply)
err := c.cc.Invoke(ctx, "/pb.SystemView/EntityInfo", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// SystemViewServer is the server API for SystemView service.
type SystemViewServer interface {
// DefaultLeaseTTL returns the default lease TTL set in Vault configuration
@ -3011,6 +3050,8 @@ type SystemViewServer interface {
// LocalMount, when run from a system view attached to a request, indicates
// whether the request is affecting a local mount or not
LocalMount(context.Context, *Empty) (*LocalMountReply, error)
// EntityInfo returns the basic entity information for the given entity id
EntityInfo(context.Context, *EntityInfoArgs) (*EntityInfoReply, error)
}
func RegisterSystemViewServer(s *grpc.Server, srv SystemViewServer) {
@ -3179,6 +3220,24 @@ func _SystemView_LocalMount_Handler(srv interface{}, ctx context.Context, dec fu
return interceptor(ctx, in, info, handler)
}
func _SystemView_EntityInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(EntityInfoArgs)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(SystemViewServer).EntityInfo(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/pb.SystemView/EntityInfo",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(SystemViewServer).EntityInfo(ctx, req.(*EntityInfoArgs))
}
return interceptor(ctx, in, info, handler)
}
var _SystemView_serviceDesc = grpc.ServiceDesc{
ServiceName: "pb.SystemView",
HandlerType: (*SystemViewServer)(nil),
@ -3219,149 +3278,155 @@ var _SystemView_serviceDesc = grpc.ServiceDesc{
MethodName: "LocalMount",
Handler: _SystemView_LocalMount_Handler,
},
{
MethodName: "EntityInfo",
Handler: _SystemView_EntityInfo_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "logical/plugin/pb/backend.proto",
}
func init() {
proto.RegisterFile("logical/plugin/pb/backend.proto", fileDescriptor_backend_a4dea436a6c1c127)
proto.RegisterFile("logical/plugin/pb/backend.proto", fileDescriptor_backend_5a7f5d2f43604fb6)
}
var fileDescriptor_backend_a4dea436a6c1c127 = []byte{
// 2134 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x5f, 0x6f, 0xdb, 0xc8,
0x11, 0x87, 0x24, 0x4b, 0xa2, 0x46, 0x92, 0xff, 0x6c, 0x7c, 0x29, 0xa3, 0xcb, 0xd5, 0x2a, 0x0f,
0xc9, 0xf9, 0x82, 0x46, 0x49, 0xd4, 0x7f, 0xb9, 0x16, 0x77, 0x85, 0xeb, 0xf8, 0x72, 0xee, 0xc5,
0x77, 0x06, 0xed, 0xf4, 0x5a, 0xb4, 0x80, 0x6e, 0x4d, 0x8e, 0x65, 0xc2, 0x14, 0xc9, 0x2e, 0x97,
0x49, 0xf4, 0xd4, 0x0f, 0x51, 0xa0, 0x5f, 0xa3, 0xaf, 0x7d, 0xeb, 0x6b, 0x81, 0x3e, 0xf7, 0x13,
0xf4, 0xbd, 0x9f, 0xa1, 0xd8, 0xd9, 0x25, 0x45, 0x4a, 0x72, 0x93, 0x02, 0xed, 0x1b, 0xe7, 0x37,
0xb3, 0x3b, 0xbb, 0xb3, 0x33, 0xbf, 0xd9, 0x25, 0xec, 0x85, 0xf1, 0x34, 0xf0, 0x78, 0xf8, 0x28,
0x09, 0xb3, 0x69, 0x10, 0x3d, 0x4a, 0x2e, 0x1e, 0x5d, 0x70, 0xef, 0x1a, 0x23, 0x7f, 0x94, 0x88,
0x58, 0xc6, 0xac, 0x9e, 0x5c, 0x0c, 0xf6, 0xa6, 0x71, 0x3c, 0x0d, 0xf1, 0x11, 0x21, 0x17, 0xd9,
0xe5, 0x23, 0x19, 0xcc, 0x30, 0x95, 0x7c, 0x96, 0x68, 0x23, 0xa7, 0x0d, 0xcd, 0xa3, 0x59, 0x22,
0xe7, 0xce, 0x10, 0x5a, 0x5f, 0x20, 0xf7, 0x51, 0xb0, 0xdb, 0xd0, 0xba, 0xa2, 0x2f, 0xbb, 0x36,
0x6c, 0xec, 0x77, 0x5c, 0x23, 0x39, 0xbf, 0x05, 0x38, 0x55, 0x63, 0x8e, 0x84, 0x88, 0x05, 0xbb,
0x03, 0x16, 0x0a, 0x31, 0x91, 0xf3, 0x04, 0xed, 0xda, 0xb0, 0xb6, 0xdf, 0x77, 0xdb, 0x28, 0xc4,
0xf9, 0x3c, 0x41, 0xf6, 0x1d, 0x50, 0x9f, 0x93, 0x59, 0x3a, 0xb5, 0xeb, 0xc3, 0x9a, 0x9a, 0x01,
0x85, 0x38, 0x49, 0xa7, 0xf9, 0x18, 0x2f, 0xf6, 0xd1, 0x6e, 0x0c, 0x6b, 0xfb, 0x0d, 0x1a, 0x73,
0x18, 0xfb, 0xe8, 0xfc, 0xa9, 0x06, 0xcd, 0x53, 0x2e, 0xaf, 0x52, 0xc6, 0x60, 0x43, 0xc4, 0xb1,
0x34, 0xce, 0xe9, 0x9b, 0xed, 0xc3, 0x56, 0x16, 0xf1, 0x4c, 0x5e, 0x61, 0x24, 0x03, 0x8f, 0x4b,
0xf4, 0xed, 0x3a, 0xa9, 0x97, 0x61, 0xf6, 0x21, 0xf4, 0xc3, 0xd8, 0xe3, 0xe1, 0x24, 0x95, 0xb1,
0xe0, 0x53, 0xe5, 0x47, 0xd9, 0xf5, 0x08, 0x3c, 0xd3, 0x18, 0x7b, 0x00, 0x3b, 0x29, 0xf2, 0x70,
0xf2, 0x5a, 0xf0, 0xa4, 0x30, 0xdc, 0xd0, 0x13, 0x2a, 0xc5, 0x37, 0x82, 0x27, 0xc6, 0xd6, 0xf9,
0x6b, 0x0b, 0xda, 0x2e, 0xfe, 0x3e, 0xc3, 0x54, 0xb2, 0x4d, 0xa8, 0x07, 0x3e, 0xed, 0xb6, 0xe3,
0xd6, 0x03, 0x9f, 0x8d, 0x80, 0xb9, 0x98, 0x84, 0xca, 0x75, 0x10, 0x47, 0x87, 0x61, 0x96, 0x4a,
0x14, 0x66, 0xcf, 0x6b, 0x34, 0xec, 0x2e, 0x74, 0xe2, 0x04, 0x05, 0x61, 0x14, 0x80, 0x8e, 0xbb,
0x00, 0xd4, 0xc6, 0x13, 0x2e, 0xaf, 0xec, 0x0d, 0x52, 0xd0, 0xb7, 0xc2, 0x7c, 0x2e, 0xb9, 0xdd,
0xd4, 0x98, 0xfa, 0x66, 0x0e, 0xb4, 0x52, 0xf4, 0x04, 0x4a, 0xbb, 0x35, 0xac, 0xed, 0x77, 0xc7,
0x30, 0x4a, 0x2e, 0x46, 0x67, 0x84, 0xb8, 0x46, 0xc3, 0xee, 0xc2, 0x86, 0x8a, 0x8b, 0xdd, 0x26,
0x0b, 0x4b, 0x59, 0x1c, 0x64, 0xf2, 0xca, 0x25, 0x94, 0x8d, 0xa1, 0xad, 0xcf, 0x34, 0xb5, 0xad,
0x61, 0x63, 0xbf, 0x3b, 0xb6, 0x95, 0x81, 0xd9, 0xe5, 0x48, 0xa7, 0x41, 0x7a, 0x14, 0x49, 0x31,
0x77, 0x73, 0x43, 0xf6, 0x3d, 0xe8, 0x79, 0x61, 0x80, 0x91, 0x9c, 0xc8, 0xf8, 0x1a, 0x23, 0xbb,
0x43, 0x2b, 0xea, 0x6a, 0xec, 0x5c, 0x41, 0x6c, 0x0c, 0xef, 0x95, 0x4d, 0x26, 0xdc, 0xf3, 0x30,
0x4d, 0x63, 0x61, 0x03, 0xd9, 0xde, 0x2a, 0xd9, 0x1e, 0x18, 0x95, 0x9a, 0xd6, 0x0f, 0xd2, 0x24,
0xe4, 0xf3, 0x49, 0xc4, 0x67, 0x68, 0x77, 0xf5, 0xb4, 0x06, 0xfb, 0x8a, 0xcf, 0x90, 0xed, 0x41,
0x77, 0x16, 0x67, 0x91, 0x9c, 0x24, 0x71, 0x10, 0x49, 0xbb, 0x47, 0x16, 0x40, 0xd0, 0xa9, 0x42,
0xd8, 0x07, 0xa0, 0x25, 0x9d, 0x8c, 0x7d, 0x1d, 0x57, 0x42, 0x28, 0x1d, 0xef, 0xc1, 0xa6, 0x56,
0x17, 0xeb, 0xd9, 0x24, 0x93, 0x3e, 0xa1, 0xc5, 0x4a, 0x1e, 0x43, 0x87, 0xf2, 0x21, 0x88, 0x2e,
0x63, 0x7b, 0x8b, 0xe2, 0x76, 0xab, 0x14, 0x16, 0x95, 0x13, 0xc7, 0xd1, 0x65, 0xec, 0x5a, 0xaf,
0xcd, 0x17, 0xfb, 0x14, 0xde, 0xaf, 0xec, 0x57, 0xe0, 0x8c, 0x07, 0x51, 0x10, 0x4d, 0x27, 0x59,
0x8a, 0xa9, 0xbd, 0x4d, 0x19, 0x6e, 0x97, 0x76, 0xed, 0xe6, 0x06, 0x2f, 0x53, 0x4c, 0xd9, 0xfb,
0xd0, 0x51, 0x79, 0x2b, 0xe7, 0x93, 0xc0, 0xb7, 0x77, 0x68, 0x49, 0x96, 0x06, 0x8e, 0x7d, 0xf6,
0x11, 0x6c, 0x25, 0x71, 0x18, 0x78, 0xf3, 0x49, 0xfc, 0x0a, 0x85, 0x08, 0x7c, 0xb4, 0xd9, 0xb0,
0xb6, 0x6f, 0xb9, 0x9b, 0x1a, 0xfe, 0xda, 0xa0, 0xeb, 0x4a, 0xe3, 0x16, 0x19, 0xae, 0x94, 0xc6,
0x08, 0xc0, 0x8b, 0xa3, 0x08, 0x3d, 0x4a, 0xbf, 0x5d, 0xda, 0xe1, 0xa6, 0xda, 0xe1, 0x61, 0x81,
0xba, 0x25, 0x8b, 0xc1, 0xe7, 0xd0, 0x2b, 0xa7, 0x02, 0xdb, 0x86, 0xc6, 0x35, 0xce, 0x4d, 0xfa,
0xab, 0x4f, 0x36, 0x84, 0xe6, 0x2b, 0x1e, 0x66, 0x48, 0x29, 0x6f, 0x12, 0x51, 0x0f, 0x71, 0xb5,
0xe2, 0xa7, 0xf5, 0xa7, 0x35, 0x87, 0x43, 0xf3, 0x20, 0x0c, 0x78, 0xba, 0x74, 0x4e, 0xb5, 0xb7,
0x9f, 0x53, 0x7d, 0xdd, 0x39, 0x31, 0xd8, 0xa0, 0x4c, 0xd1, 0xf5, 0x43, 0xdf, 0xce, 0x1f, 0x37,
0x60, 0x43, 0xe5, 0x37, 0xfb, 0x11, 0xf4, 0x43, 0xe4, 0x29, 0x4e, 0xe2, 0x44, 0xed, 0x21, 0x25,
0x2f, 0xdd, 0xf1, 0xb6, 0x5a, 0xd9, 0x0b, 0xa5, 0xf8, 0x5a, 0xe3, 0x6e, 0x2f, 0x2c, 0x49, 0x8a,
0x35, 0x82, 0x48, 0xa2, 0x88, 0x78, 0x38, 0xa1, 0x7a, 0xd3, 0x9e, 0x7b, 0x39, 0xf8, 0x4c, 0xd5,
0xdd, 0x72, 0xaa, 0x36, 0x56, 0x53, 0x75, 0x00, 0x16, 0x1d, 0x4f, 0x80, 0xa9, 0xe1, 0x93, 0x42,
0x66, 0x63, 0xb0, 0x66, 0x28, 0xb9, 0x29, 0x67, 0x55, 0x75, 0xb7, 0xf3, 0xb2, 0x1c, 0x9d, 0x18,
0x85, 0xae, 0xb9, 0xc2, 0x6e, 0xa5, 0xe8, 0x5a, 0xab, 0x45, 0x37, 0x00, 0xab, 0x88, 0x57, 0x5b,
0x27, 0x51, 0x2e, 0x2b, 0x26, 0x4f, 0x50, 0x04, 0xb1, 0x6f, 0x5b, 0x94, 0x8b, 0x46, 0x52, 0x3c,
0x1c, 0x65, 0x33, 0x9d, 0xa5, 0x1d, 0xcd, 0xc3, 0x51, 0x36, 0x5b, 0x4d, 0x4a, 0x58, 0x4a, 0xca,
0x3d, 0x68, 0x72, 0x75, 0x92, 0x54, 0xa5, 0xdd, 0x71, 0x87, 0xd6, 0xaf, 0x00, 0x57, 0xe3, 0x6c,
0x04, 0xfd, 0xa9, 0x88, 0xb3, 0x64, 0x42, 0x22, 0xa6, 0x76, 0x8f, 0x36, 0x5a, 0x32, 0xec, 0x91,
0xfe, 0x40, 0xab, 0x55, 0x69, 0x5f, 0xc4, 0x59, 0xe4, 0x4f, 0xbc, 0xc0, 0x17, 0xa9, 0xdd, 0xa7,
0x90, 0x01, 0x41, 0x87, 0x0a, 0x19, 0xfc, 0x0c, 0xfa, 0x95, 0xd8, 0xac, 0x49, 0xc2, 0xdd, 0x72,
0x12, 0x76, 0xca, 0x89, 0xf7, 0xe7, 0x1a, 0xf4, 0xca, 0x87, 0xae, 0x06, 0x9f, 0x9f, 0xbf, 0xa0,
0xc1, 0x0d, 0x57, 0x7d, 0x2a, 0x46, 0x16, 0x18, 0xe1, 0x6b, 0x7e, 0x11, 0xea, 0x09, 0x2c, 0x77,
0x01, 0x28, 0x6d, 0x10, 0x79, 0x02, 0x67, 0x18, 0x49, 0xd3, 0xb0, 0x16, 0x00, 0xfb, 0x04, 0x20,
0x48, 0xd3, 0x0c, 0x27, 0xaa, 0xa7, 0x12, 0x6b, 0x77, 0xc7, 0x83, 0x91, 0x6e, 0xb8, 0xa3, 0xbc,
0xe1, 0x8e, 0xce, 0xf3, 0x86, 0xeb, 0x76, 0xc8, 0x5a, 0xc9, 0xea, 0x60, 0x4e, 0xf8, 0x1b, 0xb5,
0x96, 0xa6, 0x3e, 0x18, 0x2d, 0x39, 0x7f, 0x80, 0x96, 0x26, 0xf2, 0xff, 0x6b, 0x22, 0xdf, 0x01,
0x4b, 0xcf, 0x1d, 0xf8, 0x26, 0x89, 0xdb, 0x24, 0x1f, 0xfb, 0xce, 0xdf, 0x6b, 0x60, 0xb9, 0x98,
0x26, 0x71, 0x94, 0x62, 0xa9, 0xd1, 0xd4, 0xde, 0xda, 0x68, 0xea, 0x6b, 0x1b, 0x4d, 0xde, 0xbe,
0x1a, 0xa5, 0xf6, 0x35, 0x00, 0x4b, 0xa0, 0x1f, 0x08, 0xf4, 0xa4, 0x69, 0x75, 0x85, 0xac, 0x74,
0xaf, 0xb9, 0x50, 0x0c, 0x99, 0x52, 0x8d, 0x74, 0xdc, 0x42, 0x66, 0x4f, 0xca, 0xfc, 0xac, 0x3b,
0xdf, 0xae, 0xe6, 0x67, 0xbd, 0xdc, 0x55, 0x82, 0x76, 0xfe, 0x56, 0x87, 0xed, 0x65, 0xf5, 0x9a,
0x24, 0xd8, 0x85, 0xa6, 0x2e, 0x2f, 0x93, 0x41, 0x72, 0xa5, 0xb0, 0x1a, 0x4b, 0x85, 0xf5, 0x73,
0xe8, 0x7b, 0x02, 0xa9, 0x6d, 0xbf, 0xeb, 0xe9, 0xf7, 0xf2, 0x01, 0x94, 0x00, 0x1f, 0xc3, 0xb6,
0x5a, 0x65, 0x82, 0xfe, 0x82, 0xed, 0x74, 0x8f, 0xdf, 0x32, 0x78, 0xc1, 0x77, 0x0f, 0x60, 0x27,
0x37, 0x5d, 0x54, 0x66, 0xab, 0x62, 0x7b, 0x94, 0x17, 0xe8, 0x6d, 0x68, 0x5d, 0xc6, 0x62, 0xc6,
0xa5, 0xa1, 0x02, 0x23, 0xa9, 0xb4, 0x28, 0xd6, 0x4b, 0x77, 0x0c, 0x4b, 0xa7, 0x45, 0x0e, 0xaa,
0x9b, 0x97, 0x2a, 0xfd, 0xe2, 0x56, 0x44, 0xb4, 0x60, 0xb9, 0x56, 0x7e, 0x1b, 0x72, 0x7e, 0x0d,
0x5b, 0x4b, 0x8d, 0x70, 0x4d, 0x20, 0x17, 0xee, 0xeb, 0x15, 0xf7, 0x95, 0x99, 0x1b, 0x4b, 0x33,
0xff, 0x06, 0x76, 0xbe, 0xe0, 0x91, 0x1f, 0xa2, 0x99, 0xff, 0x40, 0x4c, 0xa9, 0x55, 0x98, 0x7b,
0xd9, 0xc4, 0xdc, 0xb8, 0xfa, 0x6e, 0xc7, 0x20, 0xc7, 0x3e, 0xbb, 0x07, 0x6d, 0xa1, 0xad, 0x4d,
0xe2, 0x75, 0x4b, 0x9d, 0xda, 0xcd, 0x75, 0xce, 0xb7, 0xc0, 0x2a, 0x53, 0xab, 0x2b, 0xd9, 0x9c,
0xed, 0xab, 0x04, 0xd4, 0x49, 0x61, 0x12, 0xbb, 0x57, 0xce, 0x23, 0xb7, 0xd0, 0xb2, 0x21, 0x34,
0x50, 0x08, 0xe3, 0x82, 0x5a, 0xe5, 0xe2, 0x02, 0xec, 0x2a, 0x95, 0xf3, 0x43, 0xd8, 0x39, 0x4b,
0xd0, 0x0b, 0x78, 0x48, 0x97, 0x57, 0xed, 0x60, 0x0f, 0x9a, 0x2a, 0xc8, 0x79, 0xcd, 0x12, 0xfb,
0x69, 0xb5, 0xc6, 0x9d, 0x6f, 0xc1, 0xd6, 0xeb, 0x3a, 0x7a, 0x13, 0xa4, 0x12, 0x23, 0x0f, 0x0f,
0xaf, 0xd0, 0xbb, 0xfe, 0x1f, 0xee, 0xfc, 0x15, 0xdc, 0x59, 0xe7, 0x21, 0x5f, 0x5f, 0xd7, 0x53,
0xd2, 0xe4, 0x52, 0x11, 0x2d, 0xf9, 0xb0, 0x5c, 0x20, 0xe8, 0x73, 0x85, 0xa8, 0x73, 0x44, 0x35,
0x2e, 0x35, 0x94, 0x68, 0xa4, 0x3c, 0x1e, 0x8d, 0x9b, 0xe3, 0xf1, 0x97, 0x1a, 0x74, 0xce, 0x50,
0x66, 0x09, 0xed, 0xe5, 0x7d, 0xe8, 0x5c, 0x88, 0xf8, 0x1a, 0xc5, 0x62, 0x2b, 0x96, 0x06, 0x8e,
0x7d, 0xf6, 0x04, 0x5a, 0x87, 0x71, 0x74, 0x19, 0x4c, 0xe9, 0x2a, 0xdf, 0x1d, 0xdf, 0xd1, 0xec,
0x62, 0xc6, 0x8e, 0xb4, 0x4e, 0x37, 0x44, 0x63, 0xc8, 0x86, 0xd0, 0x35, 0x4f, 0x9c, 0x97, 0x2f,
0x8f, 0x9f, 0xe5, 0x0d, 0xb8, 0x04, 0x0d, 0x3e, 0x81, 0x6e, 0x69, 0xe0, 0x7f, 0xd5, 0x2d, 0xbe,
0x0b, 0x40, 0xde, 0x75, 0x8c, 0xb6, 0xf5, 0x56, 0xcd, 0x48, 0xb5, 0xb5, 0x3d, 0xe8, 0xa8, 0x6b,
0x8a, 0x56, 0x33, 0xd8, 0x28, 0xbd, 0x7c, 0xe8, 0xdb, 0xb9, 0x07, 0x3b, 0xc7, 0xd1, 0x2b, 0x1e,
0x06, 0x3e, 0x97, 0xf8, 0x25, 0xce, 0x29, 0x04, 0x2b, 0x2b, 0x70, 0xce, 0xa0, 0x67, 0xde, 0x16,
0xef, 0xb4, 0xc6, 0x9e, 0x59, 0xe3, 0x7f, 0x2e, 0xa2, 0x8f, 0x61, 0xcb, 0x4c, 0xfa, 0x22, 0x30,
0x25, 0xa4, 0x9a, 0xbf, 0xc0, 0xcb, 0xe0, 0x8d, 0x99, 0xda, 0x48, 0xce, 0x53, 0xd8, 0x2e, 0x99,
0x16, 0xdb, 0xb9, 0xc6, 0x79, 0x9a, 0xbf, 0xb9, 0xd4, 0x77, 0x1e, 0x81, 0xfa, 0x22, 0x02, 0x0e,
0x6c, 0x9a, 0x91, 0xcf, 0x51, 0xde, 0xb0, 0xbb, 0x2f, 0x8b, 0x85, 0x3c, 0x47, 0x33, 0xf9, 0x7d,
0x68, 0xa2, 0xda, 0x69, 0xb9, 0x85, 0x95, 0x23, 0xe0, 0x6a, 0xf5, 0x1a, 0x87, 0x4f, 0x0b, 0x87,
0xa7, 0x99, 0x76, 0xf8, 0x8e, 0x73, 0x39, 0x1f, 0x16, 0xcb, 0x38, 0xcd, 0xe4, 0x4d, 0x27, 0x7a,
0x0f, 0x76, 0x8c, 0xd1, 0x33, 0x0c, 0x51, 0xe2, 0x0d, 0x5b, 0xba, 0x0f, 0xac, 0x62, 0x76, 0xd3,
0x74, 0x77, 0xc1, 0x3a, 0x3f, 0x7f, 0x51, 0x68, 0xab, 0xdc, 0xe8, 0x7c, 0x0a, 0x3b, 0x67, 0x99,
0x1f, 0x9f, 0x8a, 0xe0, 0x55, 0x10, 0xe2, 0x54, 0x3b, 0xcb, 0x9f, 0x7c, 0xb5, 0xd2, 0x93, 0x6f,
0x6d, 0x37, 0x72, 0xf6, 0x81, 0x55, 0x86, 0x17, 0xe7, 0x96, 0x66, 0x7e, 0x6c, 0x4a, 0x98, 0xbe,
0x9d, 0x7d, 0xe8, 0x9d, 0x73, 0xd5, 0xef, 0x7d, 0x6d, 0x63, 0x43, 0x5b, 0x6a, 0xd9, 0x98, 0xe5,
0xa2, 0x33, 0x86, 0xdd, 0x43, 0xee, 0x5d, 0x05, 0xd1, 0xf4, 0x59, 0x90, 0xaa, 0x0b, 0x8f, 0x19,
0x31, 0x00, 0xcb, 0x37, 0x80, 0x19, 0x52, 0xc8, 0xce, 0x43, 0x78, 0xaf, 0xf4, 0xb0, 0x3d, 0x93,
0x3c, 0x8f, 0xc7, 0x2e, 0x34, 0x53, 0x25, 0xd1, 0x88, 0xa6, 0xab, 0x05, 0xe7, 0x2b, 0xd8, 0x2d,
0x37, 0x60, 0x75, 0xfd, 0xc8, 0x37, 0x4e, 0x17, 0x83, 0x5a, 0xe9, 0x62, 0x60, 0x62, 0x56, 0x5f,
0xf4, 0x93, 0x6d, 0x68, 0xfc, 0xf2, 0x9b, 0x73, 0x93, 0xec, 0xea, 0xd3, 0xf9, 0x9d, 0x72, 0x5f,
0x9d, 0x4f, 0xbb, 0xaf, 0xdc, 0x0e, 0x6a, 0xef, 0x72, 0x3b, 0x58, 0x93, 0x6f, 0x0f, 0x61, 0xe7,
0x24, 0x8c, 0xbd, 0xeb, 0xa3, 0xa8, 0x14, 0x0d, 0x1b, 0xda, 0x18, 0x95, 0x83, 0x91, 0x8b, 0xce,
0x47, 0xb0, 0xf5, 0x22, 0xf6, 0x78, 0x78, 0xa2, 0xde, 0x27, 0x45, 0x14, 0xe8, 0x4f, 0x83, 0x31,
0xd5, 0x82, 0xf3, 0x10, 0x60, 0xf1, 0xc6, 0x52, 0xf4, 0x2b, 0x70, 0x16, 0x4b, 0x9c, 0x70, 0xdf,
0xcf, 0x33, 0x08, 0x34, 0x74, 0xe0, 0xfb, 0x62, 0xfc, 0xaf, 0x3a, 0xb4, 0x7f, 0xa1, 0x49, 0x8d,
0x7d, 0x06, 0xfd, 0x4a, 0x0b, 0x63, 0xef, 0xd1, 0x23, 0x6b, 0xb9, 0x61, 0x0e, 0x6e, 0xaf, 0xc0,
0x7a, 0x41, 0x8f, 0xa1, 0x57, 0x6e, 0x50, 0x8c, 0x9a, 0x11, 0xfd, 0xf1, 0x19, 0xd0, 0x4c, 0xab,
0xdd, 0xeb, 0x0c, 0x76, 0xd7, 0xb5, 0x0e, 0x76, 0x77, 0xe1, 0x61, 0xb5, 0x6d, 0x0d, 0x3e, 0xb8,
0x49, 0x9b, 0xb7, 0x9c, 0xf6, 0x61, 0x88, 0x3c, 0xca, 0x92, 0xf2, 0x0a, 0x16, 0x9f, 0xec, 0x09,
0xf4, 0x2b, 0xe4, 0xa9, 0xf7, 0xb9, 0xc2, 0xa7, 0xe5, 0x21, 0xf7, 0xa1, 0x49, 0x84, 0xcd, 0xfa,
0x95, 0xce, 0x31, 0xd8, 0x2c, 0x44, 0xed, 0x7b, 0x08, 0x1b, 0xf4, 0xbe, 0x2c, 0x39, 0xa6, 0x11,
0x05, 0x9b, 0x8f, 0xff, 0x51, 0x83, 0x76, 0xfe, 0x6f, 0xe8, 0x09, 0x6c, 0x28, 0x5e, 0x64, 0xb7,
0x4a, 0xd4, 0x92, 0x73, 0xea, 0x60, 0x77, 0x09, 0xd4, 0x0e, 0x46, 0xd0, 0x78, 0x8e, 0x92, 0xb1,
0x92, 0xd2, 0x10, 0xe4, 0xe0, 0x56, 0x15, 0x2b, 0xec, 0x4f, 0xb3, 0xaa, 0xbd, 0xe1, 0xb7, 0x8a,
0x7d, 0xc1, 0x5c, 0x3f, 0x81, 0x96, 0x66, 0x1e, 0x1d, 0x94, 0x15, 0xce, 0xd2, 0x87, 0xbf, 0xca,
0x51, 0xe3, 0x7f, 0x36, 0x00, 0xce, 0xe6, 0xa9, 0xc4, 0xd9, 0xaf, 0x02, 0x7c, 0xcd, 0x1e, 0xc0,
0xd6, 0x33, 0xbc, 0xe4, 0x59, 0x28, 0xe9, 0x05, 0xa1, 0x2a, 0xac, 0x14, 0x13, 0xba, 0x04, 0x15,
0x04, 0x76, 0x1f, 0xba, 0x27, 0xfc, 0xcd, 0xdb, 0xed, 0x3e, 0x83, 0x7e, 0x85, 0x97, 0xcc, 0x12,
0x97, 0x99, 0xce, 0x2c, 0x71, 0x95, 0xc1, 0xee, 0x43, 0xdb, 0xb0, 0x55, 0xd9, 0x07, 0xf1, 0x7a,
0x85, 0xc5, 0x7e, 0x0c, 0x5b, 0x4b, 0x5c, 0x55, 0xb6, 0xa7, 0xff, 0x57, 0x6b, 0xb9, 0xec, 0xa9,
0x7a, 0x01, 0x54, 0xf9, 0xaa, 0x3c, 0xf0, 0x8e, 0xe6, 0x88, 0x75, 0x84, 0xf6, 0xbc, 0xfa, 0x76,
0xa0, 0x97, 0x93, 0xbd, 0x4c, 0x29, 0x39, 0xa1, 0xe5, 0x13, 0xad, 0xa3, 0xa6, 0xc7, 0xd0, 0x2b,
0xb3, 0xca, 0x4a, 0x09, 0xae, 0x52, 0xce, 0xf7, 0x01, 0x16, 0xc4, 0x52, 0xb6, 0xa7, 0xf4, 0x58,
0xe2, 0x9c, 0x8b, 0x16, 0xbd, 0x36, 0x7e, 0xf0, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x48,
0x91, 0x8a, 0x11, 0x16, 0x00, 0x00,
var fileDescriptor_backend_5a7f5d2f43604fb6 = []byte{
// 2171 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x5f, 0x73, 0xe3, 0x48,
0x11, 0x2f, 0xff, 0x97, 0xdb, 0x76, 0x9c, 0xcc, 0x66, 0x83, 0xe2, 0xdd, 0x23, 0x46, 0xc7, 0x66,
0x7d, 0x5b, 0xac, 0xb3, 0xeb, 0xe3, 0x60, 0x0f, 0xea, 0x8e, 0x0a, 0x49, 0x6e, 0x2f, 0x5c, 0x72,
0x97, 0x52, 0xb2, 0x1c, 0x14, 0x54, 0xf9, 0x26, 0x52, 0xc7, 0x51, 0x45, 0x96, 0xc4, 0x68, 0x94,
0xac, 0x9f, 0xf8, 0x16, 0x3c, 0x50, 0xc5, 0x67, 0xe0, 0x95, 0x37, 0x5e, 0xa9, 0xe2, 0x99, 0xaf,
0xc1, 0x67, 0xa0, 0xe6, 0x8f, 0x64, 0xc9, 0x76, 0xb8, 0xa5, 0x8a, 0x7b, 0x9b, 0xfe, 0x37, 0x3d,
0xdd, 0xea, 0xfe, 0xf5, 0x8c, 0x60, 0xc7, 0x0f, 0x27, 0x9e, 0x43, 0xfd, 0xbd, 0xc8, 0x4f, 0x26,
0x5e, 0xb0, 0x17, 0x5d, 0xee, 0x5d, 0x52, 0xe7, 0x06, 0x03, 0x77, 0x18, 0xb1, 0x90, 0x87, 0xa4,
0x1c, 0x5d, 0xf6, 0x76, 0x26, 0x61, 0x38, 0xf1, 0x71, 0x4f, 0x72, 0x2e, 0x93, 0xab, 0x3d, 0xee,
0x4d, 0x31, 0xe6, 0x74, 0x1a, 0x29, 0xa5, 0xde, 0x56, 0xba, 0x8b, 0xe7, 0x62, 0xc0, 0x3d, 0x3e,
0x53, 0x7c, 0xab, 0x01, 0xb5, 0xa3, 0x69, 0xc4, 0x67, 0x56, 0x1f, 0xea, 0x9f, 0x23, 0x75, 0x91,
0x91, 0x2d, 0xa8, 0x5f, 0xcb, 0x95, 0x59, 0xea, 0x57, 0x06, 0x4d, 0x5b, 0x53, 0xd6, 0xef, 0x00,
0xce, 0x84, 0xcd, 0x11, 0x63, 0x21, 0x23, 0xdb, 0x60, 0x20, 0x63, 0x63, 0x3e, 0x8b, 0xd0, 0x2c,
0xf5, 0x4b, 0x83, 0x8e, 0xdd, 0x40, 0xc6, 0x2e, 0x66, 0x11, 0x92, 0xef, 0x81, 0x58, 0x8e, 0xa7,
0xf1, 0xc4, 0x2c, 0xf7, 0x4b, 0x62, 0x07, 0x64, 0xec, 0x34, 0x9e, 0xa4, 0x36, 0x4e, 0xe8, 0xa2,
0x59, 0xe9, 0x97, 0x06, 0x15, 0x69, 0x73, 0x10, 0xba, 0x68, 0xfd, 0xa9, 0x04, 0xb5, 0x33, 0xca,
0xaf, 0x63, 0x42, 0xa0, 0xca, 0xc2, 0x90, 0x6b, 0xe7, 0x72, 0x4d, 0x06, 0xd0, 0x4d, 0x02, 0x9a,
0xf0, 0x6b, 0x71, 0x76, 0x87, 0x72, 0x74, 0xcd, 0xb2, 0x14, 0x2f, 0xb2, 0xc9, 0xfb, 0xd0, 0xf1,
0x43, 0x87, 0xfa, 0xe3, 0x98, 0x87, 0x8c, 0x4e, 0x84, 0x1f, 0xa1, 0xd7, 0x96, 0xcc, 0x73, 0xc5,
0x23, 0xcf, 0x60, 0x23, 0x46, 0xea, 0x8f, 0xef, 0x18, 0x8d, 0x32, 0xc5, 0xaa, 0xda, 0x50, 0x08,
0xbe, 0x66, 0x34, 0xd2, 0xba, 0xd6, 0xdf, 0xeb, 0xd0, 0xb0, 0xf1, 0x0f, 0x09, 0xc6, 0x9c, 0xac,
0x41, 0xd9, 0x73, 0x65, 0xb4, 0x4d, 0xbb, 0xec, 0xb9, 0x64, 0x08, 0xc4, 0xc6, 0xc8, 0x17, 0xae,
0xbd, 0x30, 0x38, 0xf0, 0x93, 0x98, 0x23, 0xd3, 0x31, 0xaf, 0x90, 0x90, 0xc7, 0xd0, 0x0c, 0x23,
0x64, 0x92, 0x27, 0x13, 0xd0, 0xb4, 0xe7, 0x0c, 0x11, 0x78, 0x44, 0xf9, 0xb5, 0x59, 0x95, 0x02,
0xb9, 0x16, 0x3c, 0x97, 0x72, 0x6a, 0xd6, 0x14, 0x4f, 0xac, 0x89, 0x05, 0xf5, 0x18, 0x1d, 0x86,
0xdc, 0xac, 0xf7, 0x4b, 0x83, 0xd6, 0x08, 0x86, 0xd1, 0xe5, 0xf0, 0x5c, 0x72, 0x6c, 0x2d, 0x21,
0x8f, 0xa1, 0x2a, 0xf2, 0x62, 0x36, 0xa4, 0x86, 0x21, 0x34, 0xf6, 0x13, 0x7e, 0x6d, 0x4b, 0x2e,
0x19, 0x41, 0x43, 0x7d, 0xd3, 0xd8, 0x34, 0xfa, 0x95, 0x41, 0x6b, 0x64, 0x0a, 0x05, 0x1d, 0xe5,
0x50, 0x95, 0x41, 0x7c, 0x14, 0x70, 0x36, 0xb3, 0x53, 0x45, 0xf2, 0x03, 0x68, 0x3b, 0xbe, 0x87,
0x01, 0x1f, 0xf3, 0xf0, 0x06, 0x03, 0xb3, 0x29, 0x4f, 0xd4, 0x52, 0xbc, 0x0b, 0xc1, 0x22, 0x23,
0x78, 0x98, 0x57, 0x19, 0x53, 0xc7, 0xc1, 0x38, 0x0e, 0x99, 0x09, 0x52, 0xf7, 0x41, 0x4e, 0x77,
0x5f, 0x8b, 0xc4, 0xb6, 0xae, 0x17, 0x47, 0x3e, 0x9d, 0x8d, 0x03, 0x3a, 0x45, 0xb3, 0xa5, 0xb6,
0xd5, 0xbc, 0x2f, 0xe9, 0x14, 0xc9, 0x0e, 0xb4, 0xa6, 0x61, 0x12, 0xf0, 0x71, 0x14, 0x7a, 0x01,
0x37, 0xdb, 0x52, 0x03, 0x24, 0xeb, 0x4c, 0x70, 0xc8, 0x7b, 0xa0, 0x28, 0x55, 0x8c, 0x1d, 0x95,
0x57, 0xc9, 0x91, 0xe5, 0xf8, 0x04, 0xd6, 0x94, 0x38, 0x3b, 0xcf, 0x9a, 0x54, 0xe9, 0x48, 0x6e,
0x76, 0x92, 0x17, 0xd0, 0x94, 0xf5, 0xe0, 0x05, 0x57, 0xa1, 0xd9, 0x95, 0x79, 0x7b, 0x90, 0x4b,
0x8b, 0xa8, 0x89, 0xe3, 0xe0, 0x2a, 0xb4, 0x8d, 0x3b, 0xbd, 0x22, 0x9f, 0xc0, 0xa3, 0x42, 0xbc,
0x0c, 0xa7, 0xd4, 0x0b, 0xbc, 0x60, 0x32, 0x4e, 0x62, 0x8c, 0xcd, 0x75, 0x59, 0xe1, 0x66, 0x2e,
0x6a, 0x3b, 0x55, 0x78, 0x13, 0x63, 0x4c, 0x1e, 0x41, 0x53, 0xb5, 0xe2, 0xd8, 0x73, 0xcd, 0x0d,
0x79, 0x24, 0x43, 0x31, 0x8e, 0x5d, 0xf2, 0x14, 0xba, 0x51, 0xe8, 0x7b, 0xce, 0x6c, 0x1c, 0xde,
0x22, 0x63, 0x9e, 0x8b, 0x26, 0xe9, 0x97, 0x06, 0x86, 0xbd, 0xa6, 0xd8, 0x5f, 0x69, 0xee, 0xaa,
0xd6, 0x78, 0x20, 0x15, 0x97, 0x5a, 0x63, 0x08, 0xe0, 0x84, 0x41, 0x80, 0x8e, 0x2c, 0xbf, 0x4d,
0x19, 0xe1, 0x9a, 0x88, 0xf0, 0x20, 0xe3, 0xda, 0x39, 0x8d, 0xde, 0x67, 0xd0, 0xce, 0x97, 0x02,
0x59, 0x87, 0xca, 0x0d, 0xce, 0x74, 0xf9, 0x8b, 0x25, 0xe9, 0x43, 0xed, 0x96, 0xfa, 0x09, 0xca,
0x92, 0xd7, 0x85, 0xa8, 0x4c, 0x6c, 0x25, 0xf8, 0x59, 0xf9, 0x55, 0xc9, 0xfa, 0x4b, 0x15, 0xaa,
0xa2, 0xf8, 0xc8, 0x47, 0xd0, 0xf1, 0x91, 0xc6, 0x38, 0x0e, 0x23, 0xe1, 0x20, 0x96, 0x5b, 0xb5,
0x46, 0xeb, 0xc2, 0xec, 0x44, 0x08, 0xbe, 0x52, 0x7c, 0xbb, 0xed, 0xe7, 0x28, 0xd1, 0xd2, 0x5e,
0xc0, 0x91, 0x05, 0xd4, 0x1f, 0xcb, 0x66, 0x50, 0x0d, 0xd6, 0x4e, 0x99, 0x87, 0xa2, 0x29, 0x16,
0xeb, 0xa8, 0xb2, 0x5c, 0x47, 0x3d, 0x30, 0x64, 0xee, 0x3c, 0x8c, 0x75, 0xb3, 0x67, 0x34, 0x19,
0x81, 0x31, 0x45, 0x4e, 0x75, 0xaf, 0x89, 0x96, 0xd8, 0x4a, 0x7b, 0x66, 0x78, 0xaa, 0x05, 0xaa,
0x21, 0x32, 0xbd, 0xa5, 0x8e, 0xa8, 0x2f, 0x77, 0x44, 0x0f, 0x8c, 0xac, 0xe8, 0x1a, 0xea, 0x0b,
0xa7, 0xb4, 0x80, 0xd9, 0x08, 0x99, 0x17, 0xba, 0xa6, 0x21, 0x0b, 0x45, 0x53, 0x02, 0x24, 0x83,
0x64, 0xaa, 0x4a, 0xa8, 0xa9, 0x40, 0x32, 0x48, 0xa6, 0xcb, 0x15, 0x03, 0x0b, 0x15, 0xf3, 0x43,
0xa8, 0x51, 0xdf, 0xa3, 0xb1, 0x6c, 0x21, 0xf1, 0x65, 0x35, 0xe2, 0x0f, 0xf7, 0x05, 0xd7, 0x56,
0x42, 0xf2, 0x21, 0x74, 0x26, 0x2c, 0x4c, 0xa2, 0xb1, 0x24, 0x31, 0x36, 0xdb, 0x32, 0xda, 0x45,
0xed, 0xb6, 0x54, 0xda, 0x57, 0x3a, 0xa2, 0x03, 0x2f, 0xc3, 0x24, 0x70, 0xc7, 0x8e, 0xe7, 0xb2,
0xd8, 0xec, 0xc8, 0xe4, 0x81, 0x64, 0x1d, 0x08, 0x4e, 0xef, 0xe7, 0xd0, 0x29, 0x64, 0x69, 0x45,
0xad, 0x6c, 0xe6, 0x6b, 0xa5, 0x99, 0xaf, 0x8f, 0xbf, 0x96, 0xa0, 0x9d, 0xff, 0xfc, 0xc2, 0xf8,
0xe2, 0xe2, 0x44, 0x1a, 0x57, 0x6c, 0xb1, 0x14, 0xc0, 0xc9, 0x30, 0xc0, 0x3b, 0x7a, 0xe9, 0xab,
0x0d, 0x0c, 0x7b, 0xce, 0x10, 0x52, 0x2f, 0x70, 0x18, 0x4e, 0x31, 0xe0, 0x7a, 0xae, 0xcc, 0x19,
0xe4, 0x63, 0x00, 0x2f, 0x8e, 0x13, 0x1c, 0x8b, 0x91, 0x28, 0xc1, 0xb5, 0x35, 0xea, 0x0d, 0xd5,
0xbc, 0x1c, 0xa6, 0xf3, 0x72, 0x78, 0x91, 0xce, 0x4b, 0xbb, 0x29, 0xb5, 0x05, 0x2d, 0x3e, 0xd1,
0x29, 0x7d, 0x2b, 0xce, 0x52, 0x53, 0x9f, 0x48, 0x51, 0xd6, 0x1f, 0xa1, 0xae, 0xf0, 0xf6, 0x3b,
0x2d, 0xe9, 0x6d, 0x30, 0xd4, 0xde, 0x9e, 0xab, 0xcb, 0xb9, 0x21, 0xe9, 0x63, 0xd7, 0xfa, 0x67,
0x09, 0x0c, 0x1b, 0xe3, 0x28, 0x0c, 0x62, 0xcc, 0xcd, 0x83, 0xd2, 0xb7, 0xce, 0x83, 0xf2, 0xca,
0x79, 0x90, 0x4e, 0x99, 0x4a, 0x6e, 0xca, 0xf4, 0xc0, 0x60, 0xe8, 0x7a, 0x0c, 0x1d, 0xae, 0x27,
0x52, 0x46, 0x0b, 0xd9, 0x1d, 0x65, 0x02, 0xc8, 0x62, 0xd9, 0x2d, 0x4d, 0x3b, 0xa3, 0xc9, 0xcb,
0x3c, 0x8c, 0xaa, 0x01, 0xb5, 0xa9, 0x60, 0x54, 0x1d, 0x77, 0x19, 0x47, 0xad, 0x7f, 0x94, 0x61,
0x7d, 0x51, 0xbc, 0xa2, 0x08, 0x36, 0xa1, 0xa6, 0x1a, 0x4d, 0x57, 0x10, 0x5f, 0x6a, 0xb1, 0xca,
0x42, 0x8b, 0xfd, 0x02, 0x3a, 0x0e, 0x43, 0x39, 0x5d, 0xdf, 0xf5, 0xeb, 0xb7, 0x53, 0x03, 0x59,
0x00, 0x1f, 0xc0, 0xba, 0x38, 0x65, 0x84, 0xee, 0x7c, 0x78, 0xa8, 0x51, 0xdc, 0xd5, 0xfc, 0x6c,
0x7c, 0x3c, 0x83, 0x8d, 0x54, 0x75, 0xde, 0xa3, 0xf5, 0x82, 0xee, 0x51, 0xda, 0xaa, 0x5b, 0x50,
0xbf, 0x0a, 0xd9, 0x94, 0x72, 0x0d, 0x0a, 0x9a, 0x12, 0x65, 0x91, 0x9d, 0x57, 0x5e, 0x05, 0x0c,
0x55, 0x16, 0x29, 0x53, 0x5c, 0x90, 0x04, 0x08, 0x64, 0x97, 0x17, 0x09, 0x10, 0x86, 0x6d, 0xa4,
0x97, 0x16, 0xeb, 0x37, 0xd0, 0x5d, 0x98, 0x57, 0x2b, 0x12, 0x39, 0x77, 0x5f, 0x2e, 0xb8, 0x2f,
0xec, 0x5c, 0x59, 0xd8, 0xf9, 0xb7, 0xb0, 0xf1, 0x39, 0x0d, 0x5c, 0x1f, 0xf5, 0xfe, 0xfb, 0x6c,
0x12, 0x8b, 0xc9, 0xab, 0xaf, 0x4f, 0x63, 0x7d, 0x31, 0xea, 0xd8, 0x4d, 0xcd, 0x39, 0x76, 0xc9,
0x13, 0x68, 0x30, 0xa5, 0xad, 0x0b, 0xaf, 0x95, 0x1b, 0xa8, 0x76, 0x2a, 0xb3, 0xbe, 0x01, 0x52,
0xd8, 0x5a, 0xdc, 0x9c, 0x66, 0x64, 0x20, 0x0a, 0x50, 0x15, 0x85, 0x2e, 0xec, 0x76, 0xbe, 0x8e,
0xec, 0x4c, 0x4a, 0xfa, 0x50, 0x41, 0xc6, 0xb4, 0x0b, 0x39, 0xd1, 0xe6, 0xf7, 0x54, 0x5b, 0x88,
0xac, 0x1f, 0xc3, 0xc6, 0x79, 0x84, 0x8e, 0x47, 0x7d, 0x79, 0xc7, 0x54, 0x0e, 0x76, 0xa0, 0x26,
0x92, 0x9c, 0xf6, 0x6c, 0x53, 0x1a, 0x4a, 0xb1, 0xe2, 0x5b, 0xdf, 0x80, 0xa9, 0xce, 0x75, 0xf4,
0xd6, 0x8b, 0x39, 0x06, 0x0e, 0x1e, 0x5c, 0xa3, 0x73, 0xf3, 0x7f, 0x8c, 0xfc, 0x16, 0xb6, 0x57,
0x79, 0x48, 0xcf, 0xd7, 0x72, 0x04, 0x35, 0xbe, 0x12, 0x40, 0x2b, 0x7d, 0x18, 0x36, 0x48, 0xd6,
0x67, 0x82, 0x23, 0xbe, 0x23, 0x0a, 0xbb, 0x58, 0x43, 0xa2, 0xa6, 0xd2, 0x7c, 0x54, 0xee, 0xcf,
0xc7, 0xdf, 0x4a, 0xd0, 0x3c, 0x47, 0x9e, 0x44, 0x32, 0x96, 0x47, 0xd0, 0xbc, 0x64, 0xe1, 0x0d,
0xb2, 0x79, 0x28, 0x86, 0x62, 0x1c, 0xbb, 0xe4, 0x25, 0xd4, 0x0f, 0xc2, 0xe0, 0xca, 0x9b, 0xc8,
0x1b, 0x77, 0x6b, 0xb4, 0xad, 0xd0, 0x45, 0xdb, 0x0e, 0x95, 0x4c, 0x8d, 0x46, 0xad, 0x48, 0xfa,
0xd0, 0xd2, 0x2f, 0x94, 0x37, 0x6f, 0x8e, 0x0f, 0xd3, 0x51, 0x9c, 0x63, 0xf5, 0x3e, 0x86, 0x56,
0xce, 0xf0, 0x7f, 0x9a, 0x16, 0xdf, 0x07, 0x90, 0xde, 0x55, 0x8e, 0xd6, 0x55, 0xa8, 0xda, 0x52,
0x84, 0xb6, 0x03, 0x4d, 0x71, 0xeb, 0x53, 0x62, 0x02, 0xd5, 0xdc, 0x03, 0x45, 0xae, 0xad, 0x27,
0xb0, 0x71, 0x1c, 0xdc, 0x52, 0xdf, 0x73, 0x29, 0xc7, 0x2f, 0x70, 0x26, 0x53, 0xb0, 0x74, 0x02,
0xeb, 0x1c, 0xda, 0xfa, 0x09, 0xf0, 0x4e, 0x67, 0x6c, 0xeb, 0x33, 0xfe, 0xf7, 0x26, 0xfa, 0x00,
0xba, 0x7a, 0xd3, 0x13, 0x4f, 0xb7, 0x90, 0xb8, 0x06, 0x30, 0xbc, 0xf2, 0xde, 0xea, 0xad, 0x35,
0x65, 0xbd, 0x82, 0xf5, 0x9c, 0x6a, 0x16, 0xce, 0x0d, 0xce, 0xe2, 0xf4, 0x69, 0x24, 0xd6, 0x69,
0x06, 0xca, 0xf3, 0x0c, 0x58, 0xb0, 0xa6, 0x2d, 0x5f, 0x23, 0xbf, 0x27, 0xba, 0x2f, 0xb2, 0x83,
0xbc, 0x46, 0xbd, 0xf9, 0x2e, 0xd4, 0x50, 0x44, 0x9a, 0x1f, 0x61, 0xf9, 0x0c, 0xd8, 0x4a, 0xbc,
0xc2, 0xe1, 0xab, 0xcc, 0xe1, 0x59, 0xa2, 0x1c, 0xbe, 0xe3, 0x5e, 0xd6, 0xfb, 0xd9, 0x31, 0xce,
0x12, 0x7e, 0xdf, 0x17, 0x7d, 0x02, 0x1b, 0x5a, 0xe9, 0x10, 0x7d, 0xe4, 0x78, 0x4f, 0x48, 0xbb,
0x40, 0x0a, 0x6a, 0xf7, 0x6d, 0xf7, 0x18, 0x8c, 0x8b, 0x8b, 0x93, 0x4c, 0x5a, 0xc4, 0x46, 0xeb,
0x13, 0xd8, 0x38, 0x4f, 0xdc, 0xf0, 0x8c, 0x79, 0xb7, 0x9e, 0x8f, 0x13, 0xe5, 0x2c, 0x7d, 0x99,
0x95, 0x72, 0x2f, 0xb3, 0x95, 0xd3, 0xc8, 0x1a, 0x00, 0x29, 0x98, 0x67, 0xdf, 0x2d, 0x4e, 0xdc,
0x50, 0xb7, 0xb0, 0x5c, 0x5b, 0x03, 0x68, 0x5f, 0x50, 0x31, 0xef, 0x5d, 0xa5, 0x63, 0x42, 0x83,
0x2b, 0x5a, 0xab, 0xa5, 0xa4, 0x35, 0x82, 0xcd, 0x03, 0xea, 0x5c, 0x7b, 0xc1, 0xe4, 0xd0, 0x8b,
0xc5, 0x85, 0x47, 0x5b, 0xf4, 0xc0, 0x70, 0x35, 0x43, 0x9b, 0x64, 0xb4, 0xf5, 0x1c, 0x1e, 0xe6,
0xde, 0x9f, 0xe7, 0x9c, 0xa6, 0xf9, 0xd8, 0x84, 0x5a, 0x2c, 0x28, 0x69, 0x51, 0xb3, 0x15, 0x61,
0x7d, 0x09, 0x9b, 0xf9, 0x01, 0x2c, 0xae, 0x1f, 0x69, 0xe0, 0xf2, 0x62, 0x50, 0xca, 0x5d, 0x0c,
0x74, 0xce, 0xca, 0xf3, 0x79, 0xb2, 0x0e, 0x95, 0x5f, 0x7d, 0x7d, 0xa1, 0x8b, 0x5d, 0x2c, 0xad,
0xdf, 0x0b, 0xf7, 0xc5, 0xfd, 0x94, 0xfb, 0xc2, 0xed, 0xa0, 0xf4, 0x2e, 0xb7, 0x83, 0x15, 0xf5,
0xf6, 0x1c, 0x36, 0x4e, 0xfd, 0xd0, 0xb9, 0x39, 0x0a, 0x72, 0xd9, 0x30, 0xa1, 0x81, 0x41, 0x3e,
0x19, 0x29, 0x69, 0x3d, 0x85, 0xee, 0x89, 0x78, 0xfd, 0x9f, 0x8a, 0xe7, 0x5e, 0x96, 0x05, 0xf9,
0x43, 0x40, 0xab, 0x2a, 0xc2, 0x7a, 0x0e, 0x6b, 0x7a, 0x44, 0x07, 0x57, 0x61, 0x8a, 0x8c, 0xf3,
0x61, 0x5e, 0x2a, 0x5e, 0xb8, 0xad, 0x13, 0xe8, 0xce, 0xd5, 0xd5, 0xbe, 0x4f, 0xa1, 0xae, 0xc4,
0x3a, 0xb6, 0x6e, 0x76, 0xad, 0x56, 0x9a, 0xb6, 0x16, 0xaf, 0x0c, 0x0a, 0xe6, 0xef, 0x30, 0x81,
0xfd, 0x0c, 0xa7, 0x21, 0xc7, 0x31, 0x75, 0xdd, 0xb4, 0x7c, 0x41, 0xb1, 0xf6, 0x5d, 0x97, 0x8d,
0xfe, 0x5d, 0x86, 0xc6, 0x2f, 0x15, 0xa2, 0x92, 0x4f, 0xa1, 0x53, 0x98, 0x9f, 0xe4, 0xa1, 0x7c,
0x88, 0x2d, 0x4e, 0xeb, 0xde, 0xd6, 0x12, 0x5b, 0x9d, 0xfa, 0x05, 0xb4, 0xf3, 0xd3, 0x91, 0xc8,
0x49, 0x28, 0xff, 0x0a, 0xf5, 0xe4, 0x4e, 0xcb, 0xa3, 0xf3, 0x1c, 0x36, 0x57, 0xcd, 0x2d, 0xf2,
0x78, 0xee, 0x61, 0x79, 0x66, 0xf6, 0xde, 0xbb, 0x4f, 0x9a, 0xce, 0xbb, 0xc6, 0x81, 0x8f, 0x34,
0x48, 0xa2, 0xfc, 0x09, 0xe6, 0x4b, 0xf2, 0x12, 0x3a, 0x05, 0xe4, 0x56, 0x71, 0x2e, 0x81, 0x79,
0xde, 0x64, 0x17, 0x6a, 0x72, 0x5a, 0x90, 0x4e, 0x61, 0x6c, 0xf5, 0xd6, 0x32, 0x52, 0xf9, 0xee,
0x43, 0x55, 0xfe, 0x2b, 0xc8, 0x39, 0x96, 0x16, 0xd9, 0x28, 0x19, 0xfd, 0xab, 0x04, 0x8d, 0xf4,
0xff, 0xd1, 0x4b, 0xa8, 0x0a, 0x50, 0x26, 0x0f, 0x72, 0xb8, 0x96, 0x02, 0x7a, 0x6f, 0x73, 0x81,
0xa9, 0x1c, 0x0c, 0xa1, 0xf2, 0x1a, 0x39, 0x21, 0x39, 0xa1, 0x46, 0xe7, 0xde, 0x83, 0x22, 0x2f,
0xd3, 0x3f, 0x4b, 0x8a, 0xfa, 0x1a, 0x5c, 0x0b, 0xfa, 0x19, 0x6c, 0xfe, 0x14, 0xea, 0x0a, 0xf6,
0x54, 0x52, 0x96, 0x00, 0x53, 0x7d, 0xfc, 0x65, 0x80, 0x1c, 0xfd, 0xb9, 0x0a, 0x70, 0x3e, 0x8b,
0x39, 0x4e, 0x7f, 0xed, 0xe1, 0x1d, 0x79, 0x06, 0xdd, 0x43, 0xbc, 0xa2, 0x89, 0xcf, 0xe5, 0xf3,
0x45, 0xb4, 0x77, 0x2e, 0x27, 0xf2, 0x06, 0x96, 0xa1, 0xe7, 0x2e, 0xb4, 0x4e, 0xe9, 0xdb, 0x6f,
0xd7, 0xfb, 0x14, 0x3a, 0x05, 0x50, 0xd4, 0x47, 0x5c, 0x84, 0x59, 0x7d, 0xc4, 0x65, 0xf8, 0xdc,
0x85, 0x86, 0x86, 0xca, 0xbc, 0x0f, 0x39, 0x54, 0x0a, 0x10, 0xfa, 0x13, 0xe8, 0x2e, 0x00, 0x65,
0x5e, 0x5f, 0xfe, 0xe3, 0x5a, 0x09, 0xa4, 0xaf, 0xc4, 0xf3, 0xa3, 0x08, 0x96, 0x79, 0xc3, 0x6d,
0x05, 0x50, 0xab, 0xd0, 0xf4, 0x75, 0xf1, 0xe1, 0x22, 0x9f, 0x6d, 0xe6, 0x22, 0x9e, 0xa5, 0x68,
0x9a, 0x6e, 0xb4, 0x0a, 0x17, 0x5f, 0x40, 0x3b, 0x0f, 0x69, 0x4b, 0x2d, 0xb8, 0x8c, 0x77, 0x3f,
0x02, 0x98, 0xa3, 0x5a, 0x5e, 0x5f, 0x96, 0xc7, 0x22, 0xe0, 0x7d, 0x04, 0x30, 0xc7, 0x2a, 0x55,
0x55, 0x45, 0xa8, 0x53, 0x66, 0x0b, 0x78, 0x76, 0x59, 0x97, 0x2f, 0xa4, 0x0f, 0xff, 0x13, 0x00,
0x00, 0xff, 0xff, 0x12, 0xa9, 0x06, 0x18, 0x84, 0x16, 0x00, 0x00,
}

View File

@ -2,6 +2,7 @@ syntax = "proto3";
package pb;
import "google/protobuf/timestamp.proto";
import "logical/identity.proto";
message Empty {}
@ -132,18 +133,6 @@ message Request {
Connection connection = 20;
}
message Alias {
// MountType is the backend mount's type to which this identity belongs
string mount_type = 1;
// MountAccessor is the identifier of the mount entry to which this
// identity belongs
string mount_accessor = 2;
// Name is the identifier of this identity in its authentication source
string name = 3;
}
message Auth {
LeaseOptions lease_options = 1;
@ -195,13 +184,13 @@ message Auth {
// Alias is the information about the authenticated client returned by
// the auth backend
Alias alias = 11;
logical.Alias alias = 11;
// GroupAliases are the informational mappings of external groups which an
// authenticated user belongs to. This is used to check if there are
// mappings groups for the group aliases in identity store. For all the
// matching groups, the entity ID of the user will be added.
repeated Alias group_aliases = 12;
repeated logical.Alias group_aliases = 12;
// If set, restricts usage of the certificates to client IPs falling within
// the range of the specified CIDR(s).
@ -498,6 +487,15 @@ message LocalMountReply {
bool local = 1;
}
message EntityInfoArgs {
string entity_id = 1;
}
message EntityInfoReply {
logical.Entity entity = 1;
string err = 2;
}
// SystemView exposes system configuration information in a safe way for plugins
// to consume. Plugins should implement the client for this service.
service SystemView {
@ -541,6 +539,9 @@ service SystemView {
// LocalMount, when run from a system view attached to a request, indicates
// whether the request is affecting a local mount or not
rpc LocalMount(Empty) returns (LocalMountReply);
// EntityInfo returns the basic entity information for the given entity id
rpc EntityInfo(EntityInfoArgs) returns (EntityInfoReply);
}
message Connection {

View File

@ -464,30 +464,6 @@ func LogicalResponseToProtoResponse(r *logical.Response) (*Response, error) {
}, nil
}
func LogicalAliasToProtoAlias(a *logical.Alias) *Alias {
if a == nil {
return nil
}
return &Alias{
MountType: a.MountType,
MountAccessor: a.MountAccessor,
Name: a.Name,
}
}
func ProtoAliasToLogicalAlias(a *Alias) *logical.Alias {
if a == nil {
return nil
}
return &logical.Alias{
MountType: a.MountType,
MountAccessor: a.MountAccessor,
Name: a.Name,
}
}
func LogicalAuthToProtoAuth(a *logical.Auth) (*Auth, error) {
if a == nil {
return nil, nil
@ -498,11 +474,6 @@ func LogicalAuthToProtoAuth(a *logical.Auth) (*Auth, error) {
return nil, err
}
groupAliases := make([]*Alias, len(a.GroupAliases))
for i, al := range a.GroupAliases {
groupAliases[i] = LogicalAliasToProtoAlias(al)
}
lo, err := LogicalLeaseOptionsToProtoLeaseOptions(a.LeaseOptions)
if err != nil {
return nil, err
@ -524,8 +495,8 @@ func LogicalAuthToProtoAuth(a *logical.Auth) (*Auth, error) {
Period: int64(a.Period),
NumUses: int64(a.NumUses),
EntityID: a.EntityID,
Alias: LogicalAliasToProtoAlias(a.Alias),
GroupAliases: groupAliases,
Alias: a.Alias,
GroupAliases: a.GroupAliases,
BoundCidrs: boundCIDRs,
}, nil
}
@ -541,11 +512,6 @@ func ProtoAuthToLogicalAuth(a *Auth) (*logical.Auth, error) {
return nil, err
}
groupAliases := make([]*logical.Alias, len(a.GroupAliases))
for i, al := range a.GroupAliases {
groupAliases[i] = ProtoAliasToLogicalAlias(al)
}
lo, err := ProtoLeaseOptionsToLogicalLeaseOptions(a.LeaseOptions)
if err != nil {
return nil, err
@ -572,8 +538,8 @@ func ProtoAuthToLogicalAuth(a *Auth) (*logical.Auth, error) {
Period: time.Duration(a.Period),
NumUses: int(a.NumUses),
EntityID: a.EntityID,
Alias: ProtoAliasToLogicalAlias(a.Alias),
GroupAliases: groupAliases,
Alias: a.Alias,
GroupAliases: a.GroupAliases,
BoundCIDRs: boundCIDRs,
}, nil
}

View File

@ -129,6 +129,23 @@ func (s *SystemViewClient) LocalMount() bool {
return reply.Local
}
func (s *SystemViewClient) EntityInfo(entityID string) (*logical.Entity, error) {
var reply EntityInfoReply
args := &EntityInfoArgs{
EntityID: entityID,
}
err := s.client.Call("Plugin.EntityInfo", args, &reply)
if err != nil {
return nil, err
}
if reply.Error != nil {
return nil, reply.Error
}
return reply.Entity, nil
}
type SystemViewServer struct {
impl logical.SystemView
}
@ -221,6 +238,21 @@ func (s *SystemViewServer) LocalMount(_ interface{}, reply *LocalMountReply) err
return nil
}
func (s *SystemViewServer) EntityInfo(args *EntityInfoArgs, reply *EntityInfoReply) error {
entity, err := s.impl.EntityInfo(args.EntityID)
if err != nil {
*reply = EntityInfoReply{
Error: wrapError(err),
}
return nil
}
*reply = EntityInfoReply{
Entity: entity,
}
return nil
}
type DefaultLeaseTTLReply struct {
DefaultLeaseTTL time.Duration
}
@ -268,3 +300,12 @@ type MlockEnabledReply struct {
type LocalMountReply struct {
Local bool
}
type EntityInfoArgs struct {
EntityID string
}
type EntityInfoReply struct {
Entity *logical.Entity
Error error
}

View File

@ -174,3 +174,28 @@ func TestSystem_mlockEnabled(t *testing.T) {
t.Fatalf("expected: %v, got: %v", expected, actual)
}
}
func TestSystem_entityInfo(t *testing.T) {
client, server := plugin.TestRPCConn(t)
defer client.Close()
sys := logical.TestSystemView()
sys.EntityVal = &logical.Entity{
ID: "test",
Name: "name",
}
server.RegisterName("Plugin", &SystemViewServer{
impl: sys,
})
testSystemView := &SystemViewClient{client: client}
actual, err := testSystemView.EntityInfo("")
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(sys.EntityVal, actual) {
t.Fatalf("expected: %v, got: %v", sys.EntityVal, actual)
}
}

View File

@ -57,6 +57,10 @@ type SystemView interface {
// MlockEnabled returns the configuration setting for enabling mlock on
// plugins.
MlockEnabled() bool
// EntityInfo returns a subset of information related to the identity entity
// for the given entity id
EntityInfo(entityID string) (*Entity, error)
}
type StaticSystemView struct {
@ -69,6 +73,7 @@ type StaticSystemView struct {
EnableMlock bool
LocalMountVal bool
ReplicationStateVal consts.ReplicationState
EntityVal *Entity
}
func (d StaticSystemView) DefaultLeaseTTL() time.Duration {
@ -110,3 +115,7 @@ func (d StaticSystemView) LookupPlugin(_ context.Context, name string) (*pluginu
func (d StaticSystemView) MlockEnabled() bool {
return d.EnableMlock
}
func (d StaticSystemView) EntityInfo(entityID string) (*Entity, error) {
return d.EntityVal, nil
}

View File

@ -145,3 +145,46 @@ func (d dynamicSystemView) LookupPlugin(ctx context.Context, name string) (*plug
func (d dynamicSystemView) MlockEnabled() bool {
return d.core.enableMlock
}
func (d dynamicSystemView) EntityInfo(entityID string) (*logical.Entity, error) {
// Requests from token created from the token backend will not have entity information.
// Return missing entity instead of error when requesting from MemDB.
if entityID == "" {
return nil, nil
}
if d.core == nil {
return nil, fmt.Errorf("system view core is nil")
}
if d.core.identityStore == nil {
return nil, fmt.Errorf("system view identity store is nil")
}
// Retrieve the entity from MemDB
entity, err := d.core.identityStore.MemDBEntityByID(entityID, false)
if err != nil {
return nil, err
}
if entity == nil {
return nil, nil
}
aliases := make([]*logical.Alias, len(entity.Aliases))
for i, alias := range entity.Aliases {
aliases[i] = &logical.Alias{
MountAccessor: alias.MountAccessor,
Name: alias.Name,
}
// MountType is not stored with the entity and must be looked up
if mount := d.core.router.validateMountByAccessor(alias.MountAccessor); mount != nil {
aliases[i].MountType = mount.MountType
}
}
// Only returning a subset of the data
return &logical.Entity{
ID: entity.ID,
Name: entity.Name,
Aliases: aliases,
}, nil
}