Documentation
¶
Overview ¶
Package httpapi provides common encoding and middleware for an HTTP API.
Index ¶
- Constants
- func ErrorResponse(w http.ResponseWriter, err error)
- func GetIP(r *http.Request) string
- func GetRefreshToken(r *http.Request) string
- func GetToken(r *http.Request) *auth.Token
- func GetUserID(r *http.Request) string
- func JSONResponse(w http.ResponseWriter, v interface{}, statusCode int)
- func ToHandlerFunc(jsonHandler JSONAPIHandler, successCode int) http.HandlerFunc
- type JSONAPIHandler
- func AuthMiddleware(jsonHandler JSONAPIHandler, tokenSvc auth.TokenService, state auth.TokenState) JSONAPIHandler
- func ErrorLoggingMiddleware(jsonHandler JSONAPIHandler, log log.Logger) JSONAPIHandler
- func RateLimitMiddleware(jsonHandler JSONAPIHandler, lmt Limiter) JSONAPIHandler
- func RefreshTokenMiddleware(jsonHandler JSONAPIHandler) JSONAPIHandler
- type Limiter
- type LimiterFactory
- type MockLimiter
- type MockLimiterFactory
- type Rate
Constants ¶
const HHMM = "15:04"
HHMM formats a timestamp as HH:MM Reference: https://yourbasic.org/golang/format-parse-string-time-date-example/
const HHMMSS = "15:04:05"
HHMMSS formats a timestamp as HH:MM:SS Reference: https://yourbasic.org/golang/format-parse-string-time-date-example/
Variables ¶
This section is empty.
Functions ¶
func ErrorResponse ¶
func ErrorResponse(w http.ResponseWriter, err error)
ErrorResponse writes an error response. Domain errors are returned to the client. Any other errors, will resolve to 500 error response.
func GetRefreshToken ¶ added in v0.2.0
GetRefreshToken retrieves a Refresh Token from context.
func JSONResponse ¶
func JSONResponse(w http.ResponseWriter, v interface{}, statusCode int)
JSONResponse writes a response body. If a struct is provided and we are unable to marshal it, we return an internal error.
func ToHandlerFunc ¶
func ToHandlerFunc(jsonHandler JSONAPIHandler, successCode int) http.HandlerFunc
ToHandlerFunc adapts a JSONAPIHandler into net/http's HandlerFunc.
Types ¶
type JSONAPIHandler ¶
type JSONAPIHandler func(w http.ResponseWriter, r *http.Request) (interface{}, error)
JSONAPIHandler is an HTTP handler for a JSON API.
func AuthMiddleware ¶
func AuthMiddleware(jsonHandler JSONAPIHandler, tokenSvc auth.TokenService, state auth.TokenState) JSONAPIHandler
AuthMiddleware validates an Authorization header if available.
func ErrorLoggingMiddleware ¶
func ErrorLoggingMiddleware(jsonHandler JSONAPIHandler, log log.Logger) JSONAPIHandler
ErrorLoggingMiddleware logs any errors that are returned before being parsed to an HTTP response.
func RateLimitMiddleware ¶ added in v0.3.0
func RateLimitMiddleware(jsonHandler JSONAPIHandler, lmt Limiter) JSONAPIHandler
RateLimitMiddleware rate limits HTTP requests.
func RefreshTokenMiddleware ¶ added in v0.2.0
func RefreshTokenMiddleware(jsonHandler JSONAPIHandler) JSONAPIHandler
RefreshTokenMiddleware sets a refresh token in context.
type Limiter ¶ added in v0.4.0
type Limiter interface {
// RateLimit applies basic rate limiting to an HTTP request.
RateLimit(r *http.Request) error
}
Limiter provides rate limiting tooling
type LimiterFactory ¶ added in v0.4.0
type LimiterFactory interface {
// NewLimiter returns a new Limiter.
NewLimiter(prefix string, rate Rate, max int64) Limiter
}
LimiterFactory creates new Limiters
func NewRateLimiter ¶ added in v0.4.0
func NewRateLimiter(db rediser) LimiterFactory
NewRateLimiter returns a new Limiter.
type MockLimiter ¶ added in v0.4.0
type MockLimiter struct{}
MockLimiter is a stub for Limiter interface.
type MockLimiterFactory ¶ added in v0.4.0
type MockLimiterFactory struct{}
MockLimiterFactory is a stub for LimiterFactory interface.
func (*MockLimiterFactory) NewLimiter ¶ added in v0.4.0
func (m *MockLimiterFactory) NewLimiter(pefix string, rate Rate, max int64) Limiter
NewLimiter mock.