handler

package
v4.0.0+incompatible Latest Latest
Warning

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

Go to latest
Published: Aug 10, 2020 License: MIT Imports: 25 Imported by: 2

Documentation

Index

Constants

View Source
const (
	// PaymentTypeHeader is a type of payment used to pay for a RPC call.
	// Supported types are: "escrow".
	// Note: "job" Payment type is deprecated
	PaymentTypeHeader = "snet-payment-type"
	//Client that calls the Daemon ( example can be "snet-cli","snet-dapp","snet-sdk")
	ClientTypeHeader = "snet-client-type"
	//Value is a user address , example "0x94d04332C4f5273feF69c4a52D24f42a3aF1F207"
	UserInfoHeader = "snet-user-info"
	//User Agent details set in on the server stream info
	UserAgentHeader = "user-agent"
	// PaymentChannelIDHeader is a MultiPartyEscrow contract payment channel
	// id. Value is a string containing a decimal number.
	PaymentChannelIDHeader = "snet-payment-channel-id"
	// PaymentChannelNonceHeader is a payment channel nonce value. Value is a
	// string containing a decimal number.
	PaymentChannelNonceHeader = "snet-payment-channel-nonce"
	// PaymentChannelAmountHeader is an amount of payment channel value
	// which server is authorized to withdraw after handling the RPC call.
	// Value is a string containing a decimal number.
	PaymentChannelAmountHeader = "snet-payment-channel-amount"
	// PaymentChannelSignatureHeader is a signature of the client to confirm
	// amount withdrawing authorization. Value is an array of bytes.
	PaymentChannelSignatureHeader = "snet-payment-channel-signature-bin"
	// This is useful information in the header sent in by the client
	// All clients will have this information and they need this to Sign anyways
	// When Daemon is running in the block chain disabled mode , it would use this
	// header to get the MPE address. The goal here is to keep the client oblivious to the
	// Daemon block chain enabled or disabled mode and also standardize the signatures.
	// id. Value is a string containing a decimal number.
	PaymentMultiPartyEscrowAddressHeader = "snet-payment-mpe-address"

	//The user Id of the person making the call
	FreeCallUserIdHeader = "snet-free-call-user-id"

	//Will be used to check if the Signature is still valid
	CurrentBlockNumberHeader = "snet-current-block-number"

	//Place holder to set the free call Auth Token issued
	FreeCallAuthTokenHeader = "snet-free-call-auth-token-bin"
	//Block number on when the Token was issued , to track the expiry of the token , which is ~ 1 Month
	FreeCallAuthTokenExpiryBlockNumberHeader = "snet-free-call-token-expiry-block"

	//Users may decide to sign upfront and make calls .Daemon generates and Auth Token
	//Users/Clients will need to use this token to make calls for the amount signed upfront.
	PrePaidAuthTokenHeader = "snet-prepaid-auth-token-bin"
)
View Source
const (
	// IncorrectNonce is returned to client when payment recieved contains
	// incorrect nonce value. Client may use PaymentChannelStateService to get
	// latest channel state and correct nonce value.
	IncorrectNonce codes.Code = 1000
)

Custom gRPC codes to return to the client

Variables

This section is empty.

Functions

func GrpcMeteringInterceptor

func GrpcMeteringInterceptor() grpc.StreamServerInterceptor

func GrpcPaymentValidationInterceptor added in v0.1.4

func GrpcPaymentValidationInterceptor(defaultPaymentHandler PaymentHandler, paymentHandler ...PaymentHandler) grpc.StreamServerInterceptor

GrpcStreamInterceptor returns gRPC interceptor to validate payment. If blockchain is disabled then noOpInterceptor is returned.

func GrpcRateLimitInterceptor added in v0.1.4

func GrpcRateLimitInterceptor(broadcast *configuration_service.MessageBroadcaster) grpc.StreamServerInterceptor

func NewGrpcHandler

func NewGrpcHandler(serviceMetadata *blockchain.ServiceMetadata) grpc.StreamHandler

func NoOpInterceptor added in v0.1.2

func NoOpInterceptor(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo,
	handler grpc.StreamHandler) error

NoOpInterceptor is a gRPC interceptor which doesn't do payment checking.

Types

type GrpcError added in v0.1.3

type GrpcError struct {
	// Status is a gRPC call status
	Status *status.Status
}

GrpcError is an error which will be returned by interceptor via gRPC protocol. Part of information will be returned as header metadata.

func GetBigInt added in v0.1.2

func GetBigInt(md metadata.MD, key string) (value *big.Int, err *GrpcError)

GetBigInt gets big.Int value from gRPC metadata

func GetBytes added in v0.1.2

func GetBytes(md metadata.MD, key string) (result []byte, err *GrpcError)

GetBytes gets bytes array value from gRPC metadata for key with '-bin' suffix, internally this data is encoded as base64

func GetBytesFromHex added in v0.1.2

func GetBytesFromHex(md metadata.MD, key string) (value []byte, err *GrpcError)

GetBytesFromHex gets bytes array value from gRPC metadata, bytes array is encoded as hex string

func GetSingleValue added in v0.1.2

func GetSingleValue(md metadata.MD, key string) (value string, err *GrpcError)

GetSingleValue gets string value from gRPC metadata

func NewGrpcError added in v0.1.3

func NewGrpcError(code codes.Code, message string) *GrpcError

NewGrpcError returns new error which contains gRPC status with provided code and message

func NewGrpcErrorf added in v0.1.3

func NewGrpcErrorf(code codes.Code, format string, args ...interface{}) *GrpcError

NewGrpcErrorf returns new error which contains gRPC status with provided code and message formed from format string and args.

func (*GrpcError) Err added in v0.1.3

func (err *GrpcError) Err() error

Err returns error to return correct gRPC error to the caller

func (*GrpcError) String added in v0.1.3

func (err *GrpcError) String() string

String converts GrpcError to string

type GrpcStreamContext added in v0.1.2

type GrpcStreamContext struct {
	MD   metadata.MD
	Info *grpc.StreamServerInfo
}

GrpcStreamContext contains information about gRPC call which is used to validate payment and pricing.

func (*GrpcStreamContext) String added in v0.1.2

func (context *GrpcStreamContext) String() string

type Payment added in v0.1.2

type Payment interface{}

Payment represents payment handler specific data which is validated and used to complete payment.

type PaymentHandler added in v0.1.2

type PaymentHandler interface {
	// Type is a content of PaymentTypeHeader field which triggers usage of the
	// payment handler.
	Type() (typ string)
	// Payment extracts payment data from gRPC request context and checks
	// validity of payment data. It returns nil if data is valid or
	// appropriate gRPC status otherwise.
	Payment(context *GrpcStreamContext) (payment Payment, err *GrpcError)
	// Complete completes payment if gRPC call was successfully proceeded by
	// service.
	Complete(payment Payment) (err *GrpcError)
	// CompleteAfterError completes payment if service returns error.
	CompleteAfterError(payment Payment, result error) (err *GrpcError)
}

PaymentHandler interface which is used by gRPC interceptor to get, validate and complete payment. There are two payment handler implementations so far: jobPaymentHandler and escrowPaymentHandler. jobPaymentHandler is depreactted.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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