Reafactor responses

This commit is contained in:
Anton Zadvorny 2024-01-07 06:09:11 +03:00
parent e34a8aa7fd
commit fe3c788fba
12 changed files with 40 additions and 54 deletions

View File

@ -28,7 +28,7 @@ var DefaultOptions = Options(
WithFindTokenFn(middleware.TokenFromAuthorizationHeader), WithFindTokenFn(middleware.TokenFromAuthorizationHeader),
WithFindTokenFn(middleware.TokenFromQuery("jwt")), WithFindTokenFn(middleware.TokenFromQuery("jwt")),
WithFindTokenFn(middleware.TokenFromCookie("jwt")), WithFindTokenFn(middleware.TokenFromCookie("jwt")),
SetResponseHandler(RespondWithUnauthorized), SetResponseHandler(middleware.RespondWithUnauthorized),
SetValidateTokenFn(allowAll), SetValidateTokenFn(allowAll),
) )
@ -160,11 +160,6 @@ func Middleware(key interface{}, alg jwa.SignatureAlgorithm, opts ...Option) fun
} }
} }
// RespondWithUnauthorized is a default response handler
func RespondWithUnauthorized(w http.ResponseWriter, _ *http.Request, _ error) {
http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
}
func allowAll(_ jwt.Token) (bool, interface{}) { func allowAll(_ jwt.Token) (bool, interface{}) {
return true, nil return true, nil
} }

View File

@ -25,7 +25,7 @@ var DefaultOptions = Options(
WithFindTokenFn(middleware.TokenFromHeader("X-Token")), WithFindTokenFn(middleware.TokenFromHeader("X-Token")),
WithFindTokenFn(middleware.TokenFromQuery("token")), WithFindTokenFn(middleware.TokenFromQuery("token")),
SetValidateTokenFn(rejectAll), SetValidateTokenFn(rejectAll),
SetResponseHandler(RespondWithUnauthorized), SetResponseHandler(middleware.RespondWithUnauthorized),
) )
// Options turns a list of option instances into an option // Options turns a list of option instances into an option
@ -113,11 +113,6 @@ func Middleware(opts ...Option) func(next http.Handler) http.Handler {
} }
} }
// RespondWithUnauthorized is a default response handler
func RespondWithUnauthorized(w http.ResponseWriter, _ *http.Request, _ error) {
http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
}
func rejectAll(_ string) (bool, interface{}) { func rejectAll(_ string) (bool, interface{}) {
return false, nil return false, nil
} }

View File

@ -1,12 +1,5 @@
package middleware package middleware
import (
"net/http"
)
// ResponseHandle is a function that middleware call in case of stop chain
type ResponseHandle func(w http.ResponseWriter, r *http.Request, err error)
// CtxKey is a key to use with context.WithValue // CtxKey is a key to use with context.WithValue
type CtxKey struct { type CtxKey struct {
Pkg string Pkg string

View File

@ -24,7 +24,7 @@ var DefaultOptions = Options(
WithFindPaginationFn(PaginationFromQuery("page", "pageSize")), WithFindPaginationFn(PaginationFromQuery("page", "pageSize")),
SetPaginationDefaults(1, 50), SetPaginationDefaults(1, 50),
SetValidatePaginationFn(allowAll), SetValidatePaginationFn(allowAll),
SetResponseHandler(RespondWithBadRequest), SetResponseHandler(middleware.RespondWithBadRequest),
) )
// Pagination represents pagination info // Pagination represents pagination info
@ -149,11 +149,6 @@ func PaginationFromQuery(pageParam string, pageSizeParam string) func(r *http.Re
} }
} }
// RespondWithBadRequest is a default response handler
func RespondWithBadRequest(w http.ResponseWriter, _ *http.Request, _ error) {
http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
}
func allowAll(_ *Pagination) error { func allowAll(_ *Pagination) error {
return nil return nil
} }

View File

@ -56,7 +56,7 @@ func Filter[T any](opts ...FilterOption[T]) func(next http.Handler) http.Handler
f := &filter[T]{ f := &filter[T]{
defaultFilter: *new(T), defaultFilter: *new(T),
parseFilterFns: []func(r *http.Request) (T, error){}, parseFilterFns: []func(r *http.Request) (T, error){},
responseHandler: RespondWithBadRequest, responseHandler: middleware.RespondWithBadRequest,
} }
for _, opt := range opts { for _, opt := range opts {

View File

@ -1,10 +0,0 @@
package query
import (
"net/http"
)
func RespondWithBadRequest(w http.ResponseWriter, _ *http.Request, err error) {
text := http.StatusText(http.StatusBadRequest) + ": " + err.Error()
http.Error(w, text, http.StatusBadRequest)
}

View File

@ -12,7 +12,7 @@ import (
var DefaultOptions = Options( var DefaultOptions = Options(
SetLogStackFn(defaultLogStackFn), SetLogStackFn(defaultLogStackFn),
SetLogRecoverFn(defaultLogRecoverFn), SetLogRecoverFn(defaultLogRecoverFn),
SetResponseHandler(RespondWithInternalServerError), SetResponseHandler(middleware.RespondWithInternalServerError),
) )
// Options turns a list of option instances into an option // Options turns a list of option instances into an option
@ -78,11 +78,6 @@ func Middleware(opts ...Option) func(next http.Handler) http.Handler {
} }
} }
// RespondWithInternalServerError is a default response handler
func RespondWithInternalServerError(w http.ResponseWriter, _ *http.Request, _ error) {
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
}
func defaultLogStackFn(stack []byte) { func defaultLogStackFn(stack []byte) {
fmt.Println(string(stack)) fmt.Println(string(stack))
} }

33
response.go Normal file
View File

@ -0,0 +1,33 @@
package middleware
import (
"net/http"
)
// ResponseHandle is a function that middleware call in case of stop chain
type ResponseHandle func(w http.ResponseWriter, r *http.Request, err error)
// RespondWithBadRequest is a default bad request response handler
func RespondWithBadRequest(w http.ResponseWriter, _ *http.Request, _ error) {
http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
}
// RespondWithUnauthorized is a default unathorized response handler
func RespondWithUnauthorized(w http.ResponseWriter, _ *http.Request, _ error) {
http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
}
// RespondWithTooManyRequests is a default too many requests response handler
func RespondWithTooManyRequests(w http.ResponseWriter, _ *http.Request, _ error) {
http.Error(w, http.StatusText(http.StatusTooManyRequests), http.StatusTooManyRequests)
}
// RespondWithInternalServerError is a default internal server error response handler
func RespondWithInternalServerError(w http.ResponseWriter, _ *http.Request, _ error) {
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
}
// RespondWithTimeout is a default gateway timeout response handler
func RespondWithGatewayTimeout(w http.ResponseWriter, _ *http.Request, _ error) {
http.Error(w, http.StatusText(http.StatusGatewayTimeout), http.StatusGatewayTimeout)
}

View File

@ -19,7 +19,7 @@ var (
// DefaultOptions represents default throttle middleware options // DefaultOptions represents default throttle middleware options
var DefaultOptions = Options( var DefaultOptions = Options(
SetLimit(100), SetLimit(100),
SetResponseHandler(RespondWithTooManyRequests), SetResponseHandler(middleware.RespondWithTooManyRequests),
) )
// Options turns a list of option instances into an option // Options turns a list of option instances into an option
@ -169,8 +169,3 @@ func Middleware(opts ...Option) func(http.Handler) http.Handler {
}) })
} }
} }
// RespondWithTooManyRequests is a default response handler
func RespondWithTooManyRequests(w http.ResponseWriter, _ *http.Request, _ error) {
http.Error(w, http.StatusText(http.StatusTooManyRequests), http.StatusTooManyRequests)
}

View File

@ -11,7 +11,7 @@ import (
// DefaultOptions represents default timeout middleware options // DefaultOptions represents default timeout middleware options
var DefaultOptions = Options( var DefaultOptions = Options(
SetTimeout(time.Second*30), SetTimeout(time.Second*30),
SetResponseHandler(RespondWithTimeout), SetResponseHandler(middleware.RespondWithGatewayTimeout),
) )
// Options turns a list of option instances into an option // Options turns a list of option instances into an option
@ -74,8 +74,3 @@ func Middleware(opts ...Option) func(next http.Handler) http.Handler {
}) })
} }
} }
// RespondWithTimeout is a default response handler
func RespondWithTimeout(w http.ResponseWriter, _ *http.Request, _ error) {
http.Error(w, http.StatusText(http.StatusGatewayTimeout), http.StatusGatewayTimeout)
}