Compare commits

...

2 Commits

Author SHA1 Message Date
7ed40c7afe added error wrapping to auth middleware for better stacktrace 2026-01-26 21:56:47 +11:00
596a4c0529 fixed stacktrace 2026-01-26 21:48:18 +11:00
2 changed files with 17 additions and 7 deletions

View File

@@ -29,16 +29,16 @@ func (s *Server) LogError(err HWSError) {
s.logger.logger.Warn().Err(err.Error).Msg(err.Message) s.logger.logger.Warn().Err(err.Error).Msg(err.Message)
return return
case ErrorERROR: case ErrorERROR:
s.logger.logger.Error().Str("stacktrace", fmt.Sprintf("%+v", err)).Err(err.Error).Msg(err.Message) s.logger.logger.Error().Str("stacktrace", fmt.Sprintf("%+v", err.Error)).Err(err.Error).Msg(err.Message)
return return
case ErrorFATAL: case ErrorFATAL:
s.logger.logger.Fatal().Str("stacktrace", fmt.Sprintf("%+v", err)).Err(err.Error).Msg(err.Message) s.logger.logger.Fatal().Str("stacktrace", fmt.Sprintf("%+v", err.Error)).Err(err.Error).Msg(err.Message)
return return
case ErrorPANIC: case ErrorPANIC:
s.logger.logger.Panic().Str("stacktrace", fmt.Sprintf("%+v", err)).Err(err.Error).Msg(err.Message) s.logger.logger.Panic().Str("stacktrace", fmt.Sprintf("%+v", err.Error)).Err(err.Error).Msg(err.Message)
return return
default: default:
s.logger.logger.Error().Str("stacktrace", fmt.Sprintf("%+v", err)).Err(err.Error).Msg(err.Message) s.logger.logger.Error().Str("stacktrace", fmt.Sprintf("%+v", err.Error)).Err(err.Error).Msg(err.Message)
} }
} }

View File

@@ -2,10 +2,12 @@ package hwsauth
import ( import (
"context" "context"
"git.haelnorr.com/h/golib/hws"
"net/http" "net/http"
"slices" "slices"
"time" "time"
"git.haelnorr.com/h/golib/hws"
"github.com/pkg/errors"
) )
// Authenticate returns the main authentication middleware. // Authenticate returns the main authentication middleware.
@@ -30,12 +32,20 @@ func (auth *Authenticator[T, TX]) authenticate() hws.MiddlewareFunc {
// Start the transaction // Start the transaction
tx, err := auth.beginTx(ctx) tx, err := auth.beginTx(ctx)
if err != nil { if err != nil {
return nil, &hws.HWSError{Message: "Unable to start transaction", StatusCode: http.StatusServiceUnavailable, Error: err} return nil, &hws.HWSError{
Message: "Unable to start transaction",
StatusCode: http.StatusServiceUnavailable,
Error: errors.Wrap(err, "auth.beginTx"),
}
} }
// Type assert to TX - safe because user's beginTx should return their TX type // Type assert to TX - safe because user's beginTx should return their TX type
txTyped, ok := tx.(TX) txTyped, ok := tx.(TX)
if !ok { if !ok {
return nil, &hws.HWSError{Message: "Transaction type mismatch", StatusCode: http.StatusInternalServerError, Error: err} return nil, &hws.HWSError{
Message: "Transaction type mismatch",
StatusCode: http.StatusInternalServerError,
Error: errors.Wrap(err, "TX type not ok"),
}
} }
model, err := auth.getAuthenticatedUser(txTyped, w, r) model, err := auth.getAuthenticatedUser(txTyped, w, r)
if err != nil { if err != nil {