api

package
v8.2.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 27, 2020 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterCleartextServer

func RegisterCleartextServer(s *grpc.Server, srv CleartextServer)

func RegisterEncryptionServer

func RegisterEncryptionServer(s *grpc.Server, srv EncryptionServer)

func RegisterGrantServer

func RegisterGrantServer(s *grpc.Server, srv GrantServer)

func RegisterStorageServer

func RegisterStorageServer(s *grpc.Server, srv StorageServer)

Types

type Address

type Address struct {
	Address              []byte   `protobuf:"bytes,1,opt,name=Address,proto3" json:"Address,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*Address) Descriptor

func (*Address) Descriptor() ([]byte, []int)

func (*Address) GetAddress

func (m *Address) GetAddress() []byte

func (*Address) ProtoMessage

func (*Address) ProtoMessage()

func (*Address) Reset

func (m *Address) Reset()

func (*Address) String

func (m *Address) String() string

func (*Address) XXX_DiscardUnknown

func (m *Address) XXX_DiscardUnknown()

func (*Address) XXX_Marshal

func (m *Address) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Address) XXX_Merge

func (m *Address) XXX_Merge(src proto.Message)

func (*Address) XXX_Size

func (m *Address) XXX_Size() int

func (*Address) XXX_Unmarshal

func (m *Address) XXX_Unmarshal(b []byte) error

type Ciphertext

type Ciphertext struct {
	EncryptedData        []byte   `protobuf:"bytes,1,opt,name=EncryptedData,proto3" json:"EncryptedData,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*Ciphertext) Descriptor

func (*Ciphertext) Descriptor() ([]byte, []int)

func (*Ciphertext) GetEncryptedData

func (m *Ciphertext) GetEncryptedData() []byte

func (*Ciphertext) ProtoMessage

func (*Ciphertext) ProtoMessage()

func (*Ciphertext) Reset

func (m *Ciphertext) Reset()

func (*Ciphertext) String

func (m *Ciphertext) String() string

func (*Ciphertext) XXX_DiscardUnknown

func (m *Ciphertext) XXX_DiscardUnknown()

func (*Ciphertext) XXX_Marshal

func (m *Ciphertext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Ciphertext) XXX_Merge

func (m *Ciphertext) XXX_Merge(src proto.Message)

func (*Ciphertext) XXX_Size

func (m *Ciphertext) XXX_Size() int

func (*Ciphertext) XXX_Unmarshal

func (m *Ciphertext) XXX_Unmarshal(b []byte) error

type CleartextClient

type CleartextClient interface {
	// Push some plaintext data into storage and get its deterministically
	// generated secret reference.
	Put(ctx context.Context, opts ...grpc.CallOption) (Cleartext_PutClient, error)
	// Provide a secret reference to an encrypted blob and get the plaintext
	// data back.
	Get(ctx context.Context, opts ...grpc.CallOption) (Cleartext_GetClient, error)
}

CleartextClient is the client API for Cleartext service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.

func NewCleartextClient

func NewCleartextClient(cc *grpc.ClientConn) CleartextClient

type CleartextServer

type CleartextServer interface {
	// Push some plaintext data into storage and get its deterministically
	// generated secret reference.
	Put(Cleartext_PutServer) error
	// Provide a secret reference to an encrypted blob and get the plaintext
	// data back.
	Get(Cleartext_GetServer) error
}

CleartextServer is the server API for Cleartext service.

type Cleartext_GetClient

type Cleartext_GetClient interface {
	Send(*reference.Ref) error
	Recv() (*Plaintext, error)
	grpc.ClientStream
}

type Cleartext_GetServer

type Cleartext_GetServer interface {
	Send(*Plaintext) error
	Recv() (*reference.Ref, error)
	grpc.ServerStream
}

type Cleartext_PutClient

type Cleartext_PutClient interface {
	Send(*Plaintext) error
	Recv() (*reference.Ref, error)
	grpc.ClientStream
}

type Cleartext_PutServer

type Cleartext_PutServer interface {
	Send(*reference.Ref) error
	Recv() (*Plaintext, error)
	grpc.ServerStream
}

type EncryptionClient

type EncryptionClient interface {
	// Encrypt some data and get its deterministically generated
	// secret reference including its address without storing the data.
	Encrypt(ctx context.Context, opts ...grpc.CallOption) (Encryption_EncryptClient, error)
	// Decrypt the provided data by supplying it alongside its secret
	// reference. The address is not used for decryption and may be omitted.
	Decrypt(ctx context.Context, opts ...grpc.CallOption) (Encryption_DecryptClient, error)
}

EncryptionClient is the client API for Encryption service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.

func NewEncryptionClient

func NewEncryptionClient(cc *grpc.ClientConn) EncryptionClient

type EncryptionServer

type EncryptionServer interface {
	// Encrypt some data and get its deterministically generated
	// secret reference including its address without storing the data.
	Encrypt(Encryption_EncryptServer) error
	// Decrypt the provided data by supplying it alongside its secret
	// reference. The address is not used for decryption and may be omitted.
	Decrypt(Encryption_DecryptServer) error
}

EncryptionServer is the server API for Encryption service.

type Encryption_DecryptClient

type Encryption_DecryptClient interface {
	Send(*ReferenceAndCiphertext) error
	Recv() (*Plaintext, error)
	grpc.ClientStream
}

type Encryption_DecryptServer

type Encryption_DecryptServer interface {
	Send(*Plaintext) error
	Recv() (*ReferenceAndCiphertext, error)
	grpc.ServerStream
}

type Encryption_EncryptClient

type Encryption_EncryptClient interface {
	Send(*Plaintext) error
	Recv() (*ReferenceAndCiphertext, error)
	grpc.ClientStream
}

type Encryption_EncryptServer

type Encryption_EncryptServer interface {
	Send(*ReferenceAndCiphertext) error
	Recv() (*Plaintext, error)
	grpc.ServerStream
}

type GrantAndGrantSpec

type GrantAndGrantSpec struct {
	Grant *grant.Grant `protobuf:"bytes,1,opt,name=Grant,proto3" json:"Grant,omitempty"`
	// The type of grant to output
	GrantSpec            *grant.Spec `protobuf:"bytes,2,opt,name=GrantSpec,proto3" json:"GrantSpec,omitempty"`
	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
	XXX_unrecognized     []byte      `json:"-"`
	XXX_sizecache        int32       `json:"-"`
}

func (*GrantAndGrantSpec) Descriptor

func (*GrantAndGrantSpec) Descriptor() ([]byte, []int)

func (*GrantAndGrantSpec) GetGrant

func (m *GrantAndGrantSpec) GetGrant() *grant.Grant

func (*GrantAndGrantSpec) GetGrantSpec

func (m *GrantAndGrantSpec) GetGrantSpec() *grant.Spec

func (*GrantAndGrantSpec) ProtoMessage

func (*GrantAndGrantSpec) ProtoMessage()

func (*GrantAndGrantSpec) Reset

func (m *GrantAndGrantSpec) Reset()

func (*GrantAndGrantSpec) String

func (m *GrantAndGrantSpec) String() string

func (*GrantAndGrantSpec) XXX_DiscardUnknown

func (m *GrantAndGrantSpec) XXX_DiscardUnknown()

func (*GrantAndGrantSpec) XXX_Marshal

func (m *GrantAndGrantSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*GrantAndGrantSpec) XXX_Merge

func (m *GrantAndGrantSpec) XXX_Merge(src proto.Message)

func (*GrantAndGrantSpec) XXX_Size

func (m *GrantAndGrantSpec) XXX_Size() int

func (*GrantAndGrantSpec) XXX_Unmarshal

func (m *GrantAndGrantSpec) XXX_Unmarshal(b []byte) error

type GrantClient

type GrantClient interface {
	// Seal a Reference to create a Grant
	Seal(ctx context.Context, opts ...grpc.CallOption) (Grant_SealClient, error)
	// Unseal a Grant to recover the Reference
	Unseal(ctx context.Context, in *grant.Grant, opts ...grpc.CallOption) (Grant_UnsealClient, error)
	// Convert one grant to another grant to re-share with another party or just
	// to change grant type
	Reseal(ctx context.Context, in *GrantAndGrantSpec, opts ...grpc.CallOption) (*grant.Grant, error)
	// Put a Plaintext and returned the sealed Reference as a Grant
	PutSeal(ctx context.Context, opts ...grpc.CallOption) (Grant_PutSealClient, error)
	// Unseal a Grant and follow the Reference to return a Plaintext
	UnsealGet(ctx context.Context, in *grant.Grant, opts ...grpc.CallOption) (Grant_UnsealGetClient, error)
	// Unseal a Grant and follow the Reference to delete the Plaintext
	UnsealDelete(ctx context.Context, in *grant.Grant, opts ...grpc.CallOption) (Grant_UnsealDeleteClient, error)
}

GrantClient is the client API for Grant service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.

func NewGrantClient

func NewGrantClient(cc *grpc.ClientConn) GrantClient

type GrantServer

type GrantServer interface {
	// Seal a Reference to create a Grant
	Seal(Grant_SealServer) error
	// Unseal a Grant to recover the Reference
	Unseal(*grant.Grant, Grant_UnsealServer) error
	// Convert one grant to another grant to re-share with another party or just
	// to change grant type
	Reseal(context.Context, *GrantAndGrantSpec) (*grant.Grant, error)
	// Put a Plaintext and returned the sealed Reference as a Grant
	PutSeal(Grant_PutSealServer) error
	// Unseal a Grant and follow the Reference to return a Plaintext
	UnsealGet(*grant.Grant, Grant_UnsealGetServer) error
	// Unseal a Grant and follow the Reference to delete the Plaintext
	UnsealDelete(*grant.Grant, Grant_UnsealDeleteServer) error
}

GrantServer is the server API for Grant service.

type Grant_PutSealClient

type Grant_PutSealClient interface {
	Send(*PlaintextAndGrantSpec) error
	CloseAndRecv() (*grant.Grant, error)
	grpc.ClientStream
}

type Grant_PutSealServer

type Grant_PutSealServer interface {
	SendAndClose(*grant.Grant) error
	Recv() (*PlaintextAndGrantSpec, error)
	grpc.ServerStream
}

type Grant_SealClient

type Grant_SealClient interface {
	Send(*ReferenceAndGrantSpec) error
	CloseAndRecv() (*grant.Grant, error)
	grpc.ClientStream
}

type Grant_SealServer

type Grant_SealServer interface {
	SendAndClose(*grant.Grant) error
	Recv() (*ReferenceAndGrantSpec, error)
	grpc.ServerStream
}

type Grant_UnsealClient

type Grant_UnsealClient interface {
	Recv() (*reference.Ref, error)
	grpc.ClientStream
}

type Grant_UnsealDeleteClient

type Grant_UnsealDeleteClient interface {
	Recv() (*Address, error)
	grpc.ClientStream
}

type Grant_UnsealDeleteServer

type Grant_UnsealDeleteServer interface {
	Send(*Address) error
	grpc.ServerStream
}

type Grant_UnsealGetClient

type Grant_UnsealGetClient interface {
	Recv() (*Plaintext, error)
	grpc.ClientStream
}

type Grant_UnsealGetServer

type Grant_UnsealGetServer interface {
	Send(*Plaintext) error
	grpc.ServerStream
}

type Grant_UnsealServer

type Grant_UnsealServer interface {
	Send(*reference.Ref) error
	grpc.ServerStream
}
type Header struct {
	Salt []byte `protobuf:"bytes,1,opt,name=Salt,proto3" json:"Salt,omitempty"`
	// Metadata
	Data                 []byte   `protobuf:"bytes,2,opt,name=Data,proto3" json:"Data,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*Header) Descriptor

func (*Header) Descriptor() ([]byte, []int)

func (*Header) GetData added in v8.1.0

func (m *Header) GetData() []byte

func (*Header) GetSalt

func (m *Header) GetSalt() []byte

func (*Header) ProtoMessage

func (*Header) ProtoMessage()

func (*Header) Reset

func (m *Header) Reset()

func (*Header) String

func (m *Header) String() string

func (*Header) XXX_DiscardUnknown

func (m *Header) XXX_DiscardUnknown()

func (*Header) XXX_Marshal

func (m *Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Header) XXX_Merge

func (m *Header) XXX_Merge(src proto.Message)

func (*Header) XXX_Size

func (m *Header) XXX_Size() int

func (*Header) XXX_Unmarshal

func (m *Header) XXX_Unmarshal(b []byte) error

type Plaintext

type Plaintext struct {
	Body                 []byte   `protobuf:"bytes,1,opt,name=Body,proto3" json:"Body,omitempty"`
	Head                 *Header  `protobuf:"bytes,3,opt,name=Head,proto3" json:"Head,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*Plaintext) Descriptor

func (*Plaintext) Descriptor() ([]byte, []int)

func (*Plaintext) GetBody

func (m *Plaintext) GetBody() []byte

func (*Plaintext) GetHead

func (m *Plaintext) GetHead() *Header

func (*Plaintext) ProtoMessage

func (*Plaintext) ProtoMessage()

func (*Plaintext) Reset

func (m *Plaintext) Reset()

func (*Plaintext) String

func (m *Plaintext) String() string

func (*Plaintext) XXX_DiscardUnknown

func (m *Plaintext) XXX_DiscardUnknown()

func (*Plaintext) XXX_Marshal

func (m *Plaintext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Plaintext) XXX_Merge

func (m *Plaintext) XXX_Merge(src proto.Message)

func (*Plaintext) XXX_Size

func (m *Plaintext) XXX_Size() int

func (*Plaintext) XXX_Unmarshal

func (m *Plaintext) XXX_Unmarshal(b []byte) error

type PlaintextAndGrantSpec

type PlaintextAndGrantSpec struct {
	Plaintext *Plaintext `protobuf:"bytes,1,opt,name=Plaintext,proto3" json:"Plaintext,omitempty"`
	// The type of grant to output
	GrantSpec            *grant.Spec `protobuf:"bytes,2,opt,name=GrantSpec,proto3" json:"GrantSpec,omitempty"`
	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
	XXX_unrecognized     []byte      `json:"-"`
	XXX_sizecache        int32       `json:"-"`
}

func (*PlaintextAndGrantSpec) Descriptor

func (*PlaintextAndGrantSpec) Descriptor() ([]byte, []int)

func (*PlaintextAndGrantSpec) GetGrantSpec

func (m *PlaintextAndGrantSpec) GetGrantSpec() *grant.Spec

func (*PlaintextAndGrantSpec) GetPlaintext

func (m *PlaintextAndGrantSpec) GetPlaintext() *Plaintext

func (*PlaintextAndGrantSpec) ProtoMessage

func (*PlaintextAndGrantSpec) ProtoMessage()

func (*PlaintextAndGrantSpec) Reset

func (m *PlaintextAndGrantSpec) Reset()

func (*PlaintextAndGrantSpec) String

func (m *PlaintextAndGrantSpec) String() string

func (*PlaintextAndGrantSpec) XXX_DiscardUnknown

func (m *PlaintextAndGrantSpec) XXX_DiscardUnknown()

func (*PlaintextAndGrantSpec) XXX_Marshal

func (m *PlaintextAndGrantSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*PlaintextAndGrantSpec) XXX_Merge

func (m *PlaintextAndGrantSpec) XXX_Merge(src proto.Message)

func (*PlaintextAndGrantSpec) XXX_Size

func (m *PlaintextAndGrantSpec) XXX_Size() int

func (*PlaintextAndGrantSpec) XXX_Unmarshal

func (m *PlaintextAndGrantSpec) XXX_Unmarshal(b []byte) error

type ReferenceAndCiphertext

type ReferenceAndCiphertext struct {
	Reference            *reference.Ref `protobuf:"bytes,1,opt,name=Reference,proto3" json:"Reference,omitempty"`
	Ciphertext           *Ciphertext    `protobuf:"bytes,2,opt,name=Ciphertext,proto3" json:"Ciphertext,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (*ReferenceAndCiphertext) Descriptor

func (*ReferenceAndCiphertext) Descriptor() ([]byte, []int)

func (*ReferenceAndCiphertext) GetCiphertext

func (m *ReferenceAndCiphertext) GetCiphertext() *Ciphertext

func (*ReferenceAndCiphertext) GetReference

func (m *ReferenceAndCiphertext) GetReference() *reference.Ref

func (*ReferenceAndCiphertext) ProtoMessage

func (*ReferenceAndCiphertext) ProtoMessage()

func (*ReferenceAndCiphertext) Reset

func (m *ReferenceAndCiphertext) Reset()

func (*ReferenceAndCiphertext) String

func (m *ReferenceAndCiphertext) String() string

func (*ReferenceAndCiphertext) XXX_DiscardUnknown

func (m *ReferenceAndCiphertext) XXX_DiscardUnknown()

func (*ReferenceAndCiphertext) XXX_Marshal

func (m *ReferenceAndCiphertext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*ReferenceAndCiphertext) XXX_Merge

func (m *ReferenceAndCiphertext) XXX_Merge(src proto.Message)

func (*ReferenceAndCiphertext) XXX_Size

func (m *ReferenceAndCiphertext) XXX_Size() int

func (*ReferenceAndCiphertext) XXX_Unmarshal

func (m *ReferenceAndCiphertext) XXX_Unmarshal(b []byte) error

type ReferenceAndGrantSpec

type ReferenceAndGrantSpec struct {
	Reference *reference.Ref `protobuf:"bytes,1,opt,name=Reference,proto3" json:"Reference,omitempty"`
	// The type of grant to output
	GrantSpec            *grant.Spec `protobuf:"bytes,2,opt,name=GrantSpec,proto3" json:"GrantSpec,omitempty"`
	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
	XXX_unrecognized     []byte      `json:"-"`
	XXX_sizecache        int32       `json:"-"`
}

func (*ReferenceAndGrantSpec) Descriptor

func (*ReferenceAndGrantSpec) Descriptor() ([]byte, []int)

func (*ReferenceAndGrantSpec) GetGrantSpec

func (m *ReferenceAndGrantSpec) GetGrantSpec() *grant.Spec

func (*ReferenceAndGrantSpec) GetReference

func (m *ReferenceAndGrantSpec) GetReference() *reference.Ref

func (*ReferenceAndGrantSpec) ProtoMessage

func (*ReferenceAndGrantSpec) ProtoMessage()

func (*ReferenceAndGrantSpec) Reset

func (m *ReferenceAndGrantSpec) Reset()

func (*ReferenceAndGrantSpec) String

func (m *ReferenceAndGrantSpec) String() string

func (*ReferenceAndGrantSpec) XXX_DiscardUnknown

func (m *ReferenceAndGrantSpec) XXX_DiscardUnknown()

func (*ReferenceAndGrantSpec) XXX_Marshal

func (m *ReferenceAndGrantSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*ReferenceAndGrantSpec) XXX_Merge

func (m *ReferenceAndGrantSpec) XXX_Merge(src proto.Message)

func (*ReferenceAndGrantSpec) XXX_Size

func (m *ReferenceAndGrantSpec) XXX_Size() int

func (*ReferenceAndGrantSpec) XXX_Unmarshal

func (m *ReferenceAndGrantSpec) XXX_Unmarshal(b []byte) error

type StorageClient

type StorageClient interface {
	// Insert the (presumably) encrypted data provided and get the its address.
	Push(ctx context.Context, opts ...grpc.CallOption) (Storage_PushClient, error)
	// Retrieve the (presumably) encrypted data stored at address.
	Pull(ctx context.Context, opts ...grpc.CallOption) (Storage_PullClient, error)
	// Get some information about the encrypted blob stored at an address,
	// including whether it exists.
	Stat(ctx context.Context, in *Address, opts ...grpc.CallOption) (*stores.StatInfo, error)
	// Delete the encrypted blob stored at address
	Delete(ctx context.Context, in *Address, opts ...grpc.CallOption) (*Address, error)
}

StorageClient is the client API for Storage service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.

func NewStorageClient

func NewStorageClient(cc *grpc.ClientConn) StorageClient

type StorageServer

type StorageServer interface {
	// Insert the (presumably) encrypted data provided and get the its address.
	Push(Storage_PushServer) error
	// Retrieve the (presumably) encrypted data stored at address.
	Pull(Storage_PullServer) error
	// Get some information about the encrypted blob stored at an address,
	// including whether it exists.
	Stat(context.Context, *Address) (*stores.StatInfo, error)
	// Delete the encrypted blob stored at address
	Delete(context.Context, *Address) (*Address, error)
}

StorageServer is the server API for Storage service.

type Storage_PullClient

type Storage_PullClient interface {
	Send(*Address) error
	Recv() (*Ciphertext, error)
	grpc.ClientStream
}

type Storage_PullServer

type Storage_PullServer interface {
	Send(*Ciphertext) error
	Recv() (*Address, error)
	grpc.ServerStream
}

type Storage_PushClient

type Storage_PushClient interface {
	Send(*Ciphertext) error
	Recv() (*Address, error)
	grpc.ClientStream
}

type Storage_PushServer

type Storage_PushServer interface {
	Send(*Address) error
	Recv() (*Ciphertext, error)
	grpc.ServerStream
}

type UnimplementedCleartextServer

type UnimplementedCleartextServer struct {
}

UnimplementedCleartextServer can be embedded to have forward compatible implementations.

func (*UnimplementedCleartextServer) Get

func (*UnimplementedCleartextServer) Put

type UnimplementedEncryptionServer

type UnimplementedEncryptionServer struct {
}

UnimplementedEncryptionServer can be embedded to have forward compatible implementations.

func (*UnimplementedEncryptionServer) Decrypt

func (*UnimplementedEncryptionServer) Encrypt

type UnimplementedGrantServer

type UnimplementedGrantServer struct {
}

UnimplementedGrantServer can be embedded to have forward compatible implementations.

func (*UnimplementedGrantServer) PutSeal

func (*UnimplementedGrantServer) Reseal

func (*UnimplementedGrantServer) Seal

func (*UnimplementedGrantServer) Unseal

func (*UnimplementedGrantServer) UnsealDelete

func (*UnimplementedGrantServer) UnsealGet

type UnimplementedStorageServer

type UnimplementedStorageServer struct {
}

UnimplementedStorageServer can be embedded to have forward compatible implementations.

func (*UnimplementedStorageServer) Delete

func (*UnimplementedStorageServer) Pull

func (*UnimplementedStorageServer) Push

func (*UnimplementedStorageServer) Stat

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL