Documentation ¶
Overview ¶
Package http provides an http client for use with checking remote signed statements.
Index ¶
- Constants
- Variables
- func ContentHash(b []byte) string
- func JSON(req *Request, v interface{}) error
- func NewAuthRequest(method string, urs string, body io.Reader, contentHash string, ts time.Time, ...) (*http.Request, error)
- func NewAuthsRequest(method string, urs string, body io.Reader, contentHash string, ts time.Time, ...) (*http.Request, error)
- func NewJSONRequest(method string, urs string, i interface{}, opt ...RequestOption) (*http.Request, error)
- func SetLogger(l Logger)
- type Auth
- type AuthHeader
- type AuthRequest
- type AuthResult
- type Client
- type ClientOption
- type ContextLogger
- type Cookie
- type Err
- type ErrTemporary
- type ErrTimeout
- type Handler
- type Header
- type LogLevel
- type Logger
- type Mem
- func (m *Mem) Delete(ctx context.Context, k string) error
- func (m *Mem) Expire(ctx context.Context, k string, dt time.Duration) error
- func (m *Mem) Get(ctx context.Context, k string) (string, error)
- func (m *Mem) Increment(ctx context.Context, k string) (int64, error)
- func (m *Mem) NonceCheck(ctx context.Context, nonce string) error
- func (m *Mem) Set(ctx context.Context, k string, v string) error
- type NonceCheck
- type ProxyFn
- type ProxyResponse
- type Request
- type RequestOption
- type RequestOptions
- type Response
- type ResponseWriter
- type Transport
Examples ¶
Constants ¶
const ( StatusContinue = 100 // RFC 7231, 6.2.1 StatusSwitchingProtocols = 101 // RFC 7231, 6.2.2 StatusProcessing = 102 // RFC 2518, 10.1 StatusEarlyHints = 103 // RFC 8297 StatusOK = 200 // RFC 7231, 6.3.1 StatusCreated = 201 // RFC 7231, 6.3.2 StatusAccepted = 202 // RFC 7231, 6.3.3 StatusNonAuthoritativeInfo = 203 // RFC 7231, 6.3.4 StatusNoContent = 204 // RFC 7231, 6.3.5 StatusResetContent = 205 // RFC 7231, 6.3.6 StatusPartialContent = 206 // RFC 7233, 4.1 StatusMultiStatus = 207 // RFC 4918, 11.1 StatusAlreadyReported = 208 // RFC 5842, 7.1 StatusIMUsed = 226 // RFC 3229, 10.4.1 StatusMultipleChoices = 300 // RFC 7231, 6.4.1 StatusMovedPermanently = 301 // RFC 7231, 6.4.2 StatusFound = 302 // RFC 7231, 6.4.3 StatusSeeOther = 303 // RFC 7231, 6.4.4 StatusNotModified = 304 // RFC 7232, 4.1 StatusUseProxy = 305 // RFC 7231, 6.4.5 StatusTemporaryRedirect = 307 // RFC 7231, 6.4.7 StatusPermanentRedirect = 308 // RFC 7538, 3 StatusBadRequest = 400 // RFC 7231, 6.5.1 StatusPaymentRequired = 402 // RFC 7231, 6.5.2 StatusForbidden = 403 // RFC 7231, 6.5.3 StatusNotFound = 404 // RFC 7231, 6.5.4 StatusMethodNotAllowed = 405 // RFC 7231, 6.5.5 StatusNotAcceptable = 406 // RFC 7231, 6.5.6 StatusProxyAuthRequired = 407 // RFC 7235, 3.2 StatusRequestTimeout = 408 // RFC 7231, 6.5.7 StatusConflict = 409 // RFC 7231, 6.5.8 StatusGone = 410 // RFC 7231, 6.5.9 StatusLengthRequired = 411 // RFC 7231, 6.5.10 StatusPreconditionFailed = 412 // RFC 7232, 4.2 StatusRequestEntityTooLarge = 413 // RFC 7231, 6.5.11 StatusRequestURITooLong = 414 // RFC 7231, 6.5.12 StatusUnsupportedMediaType = 415 // RFC 7231, 6.5.13 StatusRequestedRangeNotSatisfiable = 416 // RFC 7233, 4.4 StatusExpectationFailed = 417 // RFC 7231, 6.5.14 StatusTeapot = 418 // RFC 7168, 2.3.3 StatusMisdirectedRequest = 421 // RFC 7540, 9.1.2 StatusUnprocessableEntity = 422 // RFC 4918, 11.2 StatusLocked = 423 // RFC 4918, 11.3 StatusFailedDependency = 424 // RFC 4918, 11.4 StatusTooEarly = 425 // RFC 8470, 5.2. StatusUpgradeRequired = 426 // RFC 7231, 6.5.15 StatusPreconditionRequired = 428 // RFC 6585, 3 StatusTooManyRequests = 429 // RFC 6585, 4 StatusRequestHeaderFieldsTooLarge = 431 // RFC 6585, 5 StatusInternalServerError = 500 // RFC 7231, 6.6.1 StatusNotImplemented = 501 // RFC 7231, 6.6.2 StatusBadGateway = 502 // RFC 7231, 6.6.3 StatusGatewayTimeout = 504 // RFC 7231, 6.6.5 StatusHTTPVersionNotSupported = 505 // RFC 7231, 6.6.6 StatusVariantAlsoNegotiates = 506 // RFC 2295, 8.1 StatusInsufficientStorage = 507 // RFC 4918, 11.5 StatusLoopDetected = 508 // RFC 5842, 7.2 StatusNotExtended = 510 // RFC 2774, 7 StatusNetworkAuthenticationRequired = 511 // RFC 6585, 6 )
HTTP status codes as registered with IANA. See: https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
const TimeFormat = http.TimeFormat
TimeFormat alias
Variables ¶
var NewRequest = http.NewRequest
NewRequest alias.
var NewRequestWithContext = http.NewRequestWithContext
NewRequestWithContext alias.
var NotFound = http.NotFound
NotFound alias
var Redirect = http.Redirect
Redirect alias
var SetCookie = http.SetCookie
SetCookie alias
Functions ¶
func ContentHash ¶
ContentHash returns base64 encoded sha256 hash.
func NewAuthRequest ¶
func NewAuthRequest(method string, urs string, body io.Reader, contentHash string, ts time.Time, key *keys.EdX25519Key) (*http.Request, error)
NewAuthRequest returns new authorized/signed HTTP request using auth key.
Example ¶
package main import ( "bytes" "log" "time" "github.com/keys-pub/keys" "github.com/keys-pub/keys/http" ) func main() { key := keys.GenerateEdX25519Key() // Vault POST content := []byte(`[{"data":"dGVzdGluZzE="},{"data":"dGVzdGluZzI="}]`) contentHash := http.ContentHash(content) req, err := http.NewAuthRequest("POST", "https://keys.pub/vault/"+key.ID().String(), bytes.NewReader(content), contentHash, time.Now(), key) if err != nil { log.Fatal(err) } log.Printf("curl -H \"Authorization: %s\" -d %q %q\n", req.Header["Authorization"][0], string(content), req.URL.String()) // Vault GET req, err = http.NewAuthRequest("GET", "https://keys.pub/vault/"+key.ID().String(), nil, "", time.Now(), key) if err != nil { log.Fatal(err) } log.Printf("curl -H \"Authorization: %s\" %q\n", req.Header["Authorization"][0], req.URL.String()) }
Output:
func NewAuthsRequest ¶ added in v0.1.22
func NewJSONRequest ¶ added in v0.1.20
func NewJSONRequest(method string, urs string, i interface{}, opt ...RequestOption) (*http.Request, error)
NewJSONRequest ...
Types ¶
type Auth ¶
Auth describes auth for an HTTP request.
type AuthHeader ¶ added in v0.1.22
type AuthHeader struct { Header string Key *keys.EdX25519Key }
type AuthRequest ¶ added in v0.1.18
type AuthRequest struct { Method string URL string ContentHash string KID keys.ID Auth string Now time.Time NonceCheck NonceCheck }
AuthRequest describes an auth request.
type AuthResult ¶
AuthResult is the result of an auth check.
func Authorize ¶ added in v0.1.18
func Authorize(ctx context.Context, auth *AuthRequest) (*AuthResult, error)
Authorize checks request authorization. Nonce check should fail if there is a collision across different requests.
type Client ¶
type Client interface { Request(ctx context.Context, req *Request) ([]byte, error) SetProxy(urs string, fn ProxyFn) }
Client for HTTP.
func NewClient ¶ added in v0.1.18
func NewClient(opt ...ClientOption) Client
NewClient creates a Requestor for HTTP URLs.
type ClientOption ¶ added in v0.1.21
type ClientOption func(*clientOptions)
ClientOption ...
func WithHTTPClient ¶ added in v0.1.21
func WithHTTPClient(httpClient *http.Client) ClientOption
WithHTTPClient to override http.Client.
type ContextLogger ¶ added in v0.1.18
type ContextLogger interface { Debugf(ctx context.Context, format string, args ...interface{}) Infof(ctx context.Context, format string, args ...interface{}) Warningf(ctx context.Context, format string, args ...interface{}) Errorf(ctx context.Context, format string, args ...interface{}) }
ContextLogger interface used in this package with request context.
func NewContextLogger ¶ added in v0.1.18
func NewContextLogger(lev LogLevel) ContextLogger
NewContextLogger ...
type ErrTemporary ¶ added in v0.1.18
type ErrTemporary struct {
// contains filtered or unexported fields
}
ErrTemporary means there was a temporary error
func NewErrTemporary ¶ added in v0.1.18
func NewErrTemporary(msg string) ErrTemporary
NewErrTemporary creates temporary error.
func (ErrTemporary) Error ¶ added in v0.1.18
func (e ErrTemporary) Error() string
func (ErrTemporary) Temporary ¶ added in v0.1.18
func (e ErrTemporary) Temporary() bool
Temporary returns true.
type ErrTimeout ¶ added in v0.1.18
type ErrTimeout struct {
// contains filtered or unexported fields
}
ErrTimeout is a timeout error.
type Logger ¶ added in v0.1.18
type Logger interface { Debugf(format string, args ...interface{}) Infof(format string, args ...interface{}) Warningf(format string, args ...interface{}) Errorf(format string, args ...interface{}) Fatalf(format string, args ...interface{}) }
Logger interface used in this package.
type Mem ¶ added in v0.1.18
Mem is a in memory key value store.
func (*Mem) NonceCheck ¶ added in v0.1.18
NonceCheck ...
type NonceCheck ¶ added in v0.1.18
NonceCheck checks for nonce.
type ProxyFn ¶ added in v0.1.18
type ProxyFn func(ctx context.Context, req *Request) ProxyResponse
ProxyFn for proxy.
type ProxyResponse ¶ added in v0.1.18
ProxyResponse ...
type RequestOption ¶ added in v0.1.20
type RequestOption func(*RequestOptions)
RequestOption ...
func SignedWith ¶ added in v0.1.20
func SignedWith(key *keys.EdX25519Key) RequestOption
SignedWith key.
func WithTimestamp ¶ added in v0.1.20
func WithTimestamp(ts time.Time) RequestOption
WithTimestamp to overwride timestamp.
type RequestOptions ¶ added in v0.1.20
type RequestOptions struct { Timestamp time.Time Key *keys.EdX25519Key }
RequestOptions ...
func NewRequestOptions ¶ added in v0.1.20
func NewRequestOptions(opts ...RequestOption) RequestOptions
NewRequestOptions parses RequestOption.