ginpow

package module
v0.5.0 Latest Latest
Warning

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

Go to latest
Published: Sep 29, 2020 License: MIT Imports: 6 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Middleware

type Middleware struct {
	// NonceHeader is the name of the header on which to set a generated nonce.
	//   Defaults to `X-Nonce`
	NonceHeader string

	// NonceChecksumHeader is the name of the header on which to set a generated nonce.
	//   Defaults to `X-Nonce-Checksum`
	NonceChecksumHeader string

	// HashDifficultyHeader is the name of the header on which to set the difficulty.
	//   Defaults to `X-Hash-Difficulty`
	HashDifficultyHeader string

	// Pow is a gopow.Pow instance to handle proof of work implementation
	Pow *gopow.Pow

	// ExtractAll extracts all necessary data at once.
	//   Optional. If not set then uses the default methods defined in `ExtractData`,
	//   `ExtractNonce`, and `ExtractHash`. When ExtractAll is set, then `ExtractData`,
	//   `ExctractNonce`, `ExtractHash` is ignored.
	ExtractAll func(c *gin.Context) (nonce string, nonceChecksum string, data string, hash string, err error)

	// ExtractData extracts the data that the hash was generated against and
	//   passes it to do proof of work calculation.
	//   Required when `ExtractAll` isn't defined.
	ExtractData func(c *gin.Context) (string, error)

	// ExtractNonce extracts the nonce that is in the request.
	//   Defaults getting from header X-Nonce, X-Nonce-Checksum
	ExtractNonce func(c *gin.Context) (nonce string, nonceChecksum string, error error)

	// ExtractHash extracts the calculated hash calculated by the client.
	//   Defaults to getting from header X-Hash.
	ExtractHash func(c *gin.Context) (hash string, error error)

	// Difficulty sets the number of leading zeros required for a valid hash.
	//   Defaults to 0.
	Difficulty int

	// NonceLength sets the length of the nonce to be generated
	//   Defaults to 10.
	NonceLength int

	// Check is the flag to enable nonce checking
	//   Defaults to false.
	Check bool

	// Secret is a cryptographically secure random string to generate nonce checksums.
	//   only used when `Check` flag is true. Defaults to 256 bit cryptographically secure string.
	Secret string

	// the following is the keys in which to set nonces in gin.Context.
	// Defaults:
	//   NonceContextKey:          "nonce"
	//   NonceChecksumContextKey:  "nonceChecksum"
	//   HashDifficultyContextKey: "hashDifficulty"
	NonceContextKey          string
	NonceChecksumContextKey  string
	HashDifficultyContextKey string

	// the following is the keys in which to set nonces in data of Middleware.NonceHandler.
	// Defaults:
	//   NonceDataKey:          "nonce"
	//   NonceChecksumDataKey:  "nonce_checksum"
	//   HashDifficultyDataKey: "difficulty"
	NonceDataKey          string
	NonceChecksumDataKey  string
	HashDifficultyDataKey string

	// FailureStatusCode is the status code to send back to client
	//   when using default OnFailedVerification. defaults to 428.
	FailureStatusCode int

	// OnFailedVerification is called when a hash validation fails.
	//   By default request Aborts and returns with `Middleware.FailureStatusCode`.
	OnFailedVerification func(c *gin.Context, err *VerificationError)

	// Hash function for proof of work.
	//   Defaults to sha256
	Hash gopow.HashFunction

	// NonceGenerator returns a nonce.
	NonceGenerator gopow.NonceGenerator
}

Middleware provides a proof of work implementation. On failure, an error 428 response is returned. On success, the middleware passes to the next handler. Clients can request a nonce by posting a json or xml request to NonceHandler, or by reading the set headers on an endpoint that uses the NonceHeaderMiddleware

func New

func New(m *Middleware) (*Middleware, error)

New sets the config of a middleware. ExtractData definition is required.

func (*Middleware) GenerateNonceMiddleware

func (pow *Middleware) GenerateNonceMiddleware(c *gin.Context)

GenerateNonceMiddleware generates a nonce and sets it in the context. if other ginpow middleware is used after this middleware then it will use the nonce generated here.

func (*Middleware) NonceHandler

func (pow *Middleware) NonceHandler(c *gin.Context)

NonceHandler is the used by a client to get a nonce in JSON or XML depending on accept header

func (*Middleware) NonceHeaderMiddleware

func (pow *Middleware) NonceHeaderMiddleware(c *gin.Context)

NonceHeaderMiddleware is used by a client to get a nonce embedded in the header of a request

func (*Middleware) VerifyNonceMiddleware

func (pow *Middleware) VerifyNonceMiddleware(c *gin.Context)

VerifyNonceMiddleware validates a hash given a nonce, data string, difficulty, and, if `Middleware.Check == true`, nonce checksum. On failure, it will call OnVerifiedFailed method. By default will Abort response with status code 428

type VerificationError

type VerificationError struct {
	Hash          string
	Nonce         string
	NonceChecksum string
	Difficulty    int
	Reason        string
}

VerificationError reports the parameters that caused a verification to fail. Does _not_ include data parameter.

func (*VerificationError) Error

func (v *VerificationError) Error() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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