v0.0.483
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 3m37s

This commit is contained in:
Mike Schwörer 2024-07-16 15:08:37 +02:00
parent 6ded615723
commit bc5c61e43d
Signed by: Mikescher
GPG Key ID: D3C7172E0A70F8CF
4 changed files with 43 additions and 22 deletions

View File

@ -25,6 +25,7 @@ type PreContext struct {
header any header any
timeout *time.Duration timeout *time.Duration
persistantData *preContextData // must be a ptr, so that we can get the values back in out Wrap func persistantData *preContextData // must be a ptr, so that we can get the values back in out Wrap func
ignoreWrongContentType bool
} }
type preContextData struct { type preContextData struct {
@ -71,7 +72,12 @@ func (pctx *PreContext) WithSession(sessionObj SessionObject) *PreContext {
return pctx return pctx
} }
func (pctx PreContext) Start() (*AppContext, *gin.Context, *HTTPResponse) { func (pctx *PreContext) IgnoreWrongContentType() *PreContext {
pctx.ignoreWrongContentType = true
return pctx
}
func (pctx PreContext) Start() (*AppContext, *gin.Context, *InspectableHTTPErrorResponse) {
if pctx.uri != nil { if pctx.uri != nil {
if err := pctx.ginCtx.ShouldBindUri(pctx.uri); err != nil { if err := pctx.ginCtx.ShouldBindUri(pctx.uri); err != nil {
err = exerr.Wrap(err, "Failed to read uri"). err = exerr.Wrap(err, "Failed to read uri").
@ -102,12 +108,14 @@ func (pctx PreContext) Start() (*AppContext, *gin.Context, *HTTPResponse) {
return nil, nil, langext.Ptr(Error(err)) return nil, nil, langext.Ptr(Error(err))
} }
} else { } else {
if !pctx.ignoreWrongContentType {
err := exerr.New(exerr.TypeBindFailJSON, "missing JSON body"). err := exerr.New(exerr.TypeBindFailJSON, "missing JSON body").
Str("struct_type", fmt.Sprintf("%T", pctx.body)). Str("struct_type", fmt.Sprintf("%T", pctx.body)).
Build() Build()
return nil, nil, langext.Ptr(Error(err)) return nil, nil, langext.Ptr(Error(err))
} }
} }
}
if pctx.rawbody != nil { if pctx.rawbody != nil {
if brc, ok := pctx.ginCtx.Request.Body.(dataext.BufferedReadCloser); ok { if brc, ok := pctx.ginCtx.Request.Body.(dataext.BufferedReadCloser); ok {
@ -144,12 +152,14 @@ func (pctx PreContext) Start() (*AppContext, *gin.Context, *HTTPResponse) {
return nil, nil, langext.Ptr(Error(err)) return nil, nil, langext.Ptr(Error(err))
} }
} else { } else {
if !pctx.ignoreWrongContentType {
err := exerr.New(exerr.TypeBindFailFormData, "missing form body"). err := exerr.New(exerr.TypeBindFailFormData, "missing form body").
Str("struct_type", fmt.Sprintf("%T", pctx.form)). Str("struct_type", fmt.Sprintf("%T", pctx.form)).
Build() Build()
return nil, nil, langext.Ptr(Error(err)) return nil, nil, langext.Ptr(Error(err))
} }
} }
}
if pctx.header != nil { if pctx.header != nil {
if err := pctx.ginCtx.ShouldBindHeader(pctx.header); err != nil { if err := pctx.ginCtx.ShouldBindHeader(pctx.header); err != nil {

View File

@ -36,6 +36,13 @@ type InspectableHTTPResponse interface {
Headers() []string Headers() []string
} }
type InspectableHTTPErrorResponse interface {
HTTPResponse
InspectableHTTPResponse
Error() error
}
func NotImplemented() HTTPResponse { func NotImplemented() HTTPResponse {
return Error(exerr.New(exerr.TypeNotImplemented, "").Build()) return Error(exerr.New(exerr.TypeNotImplemented, "").Build())
} }

View File

@ -13,6 +13,10 @@ type jsonAPIErrResponse struct {
cookies []cookieval cookies []cookieval
} }
func (j jsonAPIErrResponse) Error() error {
return j.err
}
func (j jsonAPIErrResponse) Write(g *gin.Context) { func (j jsonAPIErrResponse) Write(g *gin.Context) {
for _, v := range j.headers { for _, v := range j.headers {
g.Header(v.Key, v.Val) g.Header(v.Key, v.Val)
@ -64,7 +68,7 @@ func (j jsonAPIErrResponse) Unwrap() error {
return j.err return j.err
} }
func Error(e error) HTTPResponse { func Error(e error) InspectableHTTPErrorResponse {
return &jsonAPIErrResponse{ return &jsonAPIErrResponse{
err: exerr.FromError(e), err: exerr.FromError(e),
} }

View File

@ -1,5 +1,5 @@
package goext package goext
const GoextVersion = "0.0.482" const GoextVersion = "0.0.483"
const GoextVersionTimestamp = "2024-07-12T16:33:42+0200" const GoextVersionTimestamp = "2024-07-16T15:08:37+0200"