Merge branch 'konstantinmds-refactor/bun-router-integration' into sohail/bunrouter
This commit is contained in:
		
						commit
						6e21f5ec94
					
				
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								go.mod
									
									
									
									
									
								
							@ -20,6 +20,7 @@ require (
 | 
			
		||||
	github.com/leonelquinteros/gotext v1.7.2 // indirect
 | 
			
		||||
	github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
 | 
			
		||||
	github.com/stretchr/testify v1.9.0 // indirect
 | 
			
		||||
	github.com/uptrace/bunrouter v1.0.23 // indirect
 | 
			
		||||
	github.com/x448/float16 v0.8.4 // indirect
 | 
			
		||||
	golang.org/x/crypto v0.40.0 // indirect
 | 
			
		||||
	golang.org/x/sync v0.16.0 // indirect
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.sum
									
									
									
									
									
								
							@ -33,6 +33,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
 | 
			
		||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 | 
			
		||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
 | 
			
		||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 | 
			
		||||
github.com/uptrace/bunrouter v1.0.23 h1:Bi7NKw3uCQkcA/GUCtDNPq5LE5UdR9pe+UyWbjHB/wU=
 | 
			
		||||
github.com/uptrace/bunrouter v1.0.23/go.mod h1:O3jAcl+5qgnF+ejhgkmbceEk0E/mqaK+ADOocdNpY8M=
 | 
			
		||||
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
 | 
			
		||||
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
 | 
			
		||||
golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
 | 
			
		||||
 | 
			
		||||
@ -7,6 +7,7 @@ import (
 | 
			
		||||
	"git.grassecon.net/grassrootseconomics/visedriver/errors"
 | 
			
		||||
	"git.grassecon.net/grassrootseconomics/visedriver/request"
 | 
			
		||||
	slogging "github.com/grassrootseconomics/go-vise/slog"
 | 
			
		||||
	"github.com/uptrace/bunrouter"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@ -16,6 +17,7 @@ var (
 | 
			
		||||
// HTTPRequestHandler implements the session handler for HTTP
 | 
			
		||||
type HTTPRequestHandler struct {
 | 
			
		||||
	request.RequestHandler
 | 
			
		||||
	router *bunrouter.Router
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *HTTPRequestHandler) WriteError(w http.ResponseWriter, code int, err error) {
 | 
			
		||||
@ -30,12 +32,25 @@ func (f *HTTPRequestHandler) WriteError(w http.ResponseWriter, code int, err err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewHTTPRequestHandler(h request.RequestHandler) *HTTPRequestHandler {
 | 
			
		||||
	return &HTTPRequestHandler{
 | 
			
		||||
	handler := &HTTPRequestHandler{
 | 
			
		||||
		RequestHandler: h,
 | 
			
		||||
		router:         bunrouter.New(),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Route all requests to existing vise logic
 | 
			
		||||
	handler.router.GET("/*path", handler.handleViseRequest)
 | 
			
		||||
	handler.router.POST("/*path", handler.handleViseRequest)
 | 
			
		||||
	handler.router.PUT("/*path", handler.handleViseRequest)
 | 
			
		||||
	handler.router.DELETE("/*path", handler.handleViseRequest)
 | 
			
		||||
 | 
			
		||||
	return handler
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (hh *HTTPRequestHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
 | 
			
		||||
	hh.router.ServeHTTP(w, req)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (hh *HTTPRequestHandler) handleViseRequest(w http.ResponseWriter, req bunrouter.Request) error {
 | 
			
		||||
	var code int
 | 
			
		||||
	var err error
 | 
			
		||||
	var perr error
 | 
			
		||||
@ -47,17 +62,18 @@ func (hh *HTTPRequestHandler) ServeHTTP(w http.ResponseWriter, req *http.Request
 | 
			
		||||
 | 
			
		||||
	rp := hh.GetRequestParser()
 | 
			
		||||
	cfg := hh.GetConfig()
 | 
			
		||||
	cfg.SessionId, err = rp.GetSessionId(req.Context(), req)
 | 
			
		||||
	cfg.SessionId, err = rp.GetSessionId(req.Context(), req.Request)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logg.ErrorCtxf(rqs.Ctx, "", "header processing error", err)
 | 
			
		||||
		hh.WriteError(w, 400, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	rqs.Config = cfg
 | 
			
		||||
	rqs.Input, err = rp.GetInput(req)
 | 
			
		||||
	rqs.Input, err = rp.GetInput(req.Request)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logg.ErrorCtxf(rqs.Ctx, "", "header processing error", err)
 | 
			
		||||
		hh.WriteError(w, 400, err)
 | 
			
		||||
		return
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rqs, err = hh.Process(rqs)
 | 
			
		||||
@ -74,7 +90,7 @@ func (hh *HTTPRequestHandler) ServeHTTP(w http.ResponseWriter, req *http.Request
 | 
			
		||||
 | 
			
		||||
	if code != 200 {
 | 
			
		||||
		hh.WriteError(w, 500, err)
 | 
			
		||||
		return
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	w.WriteHeader(200)
 | 
			
		||||
@ -83,10 +99,11 @@ func (hh *HTTPRequestHandler) ServeHTTP(w http.ResponseWriter, req *http.Request
 | 
			
		||||
	rqs, perr = hh.Reset(rqs.Ctx, rqs)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		hh.WriteError(w, 500, err)
 | 
			
		||||
		return
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if perr != nil {
 | 
			
		||||
		hh.WriteError(w, 500, perr)
 | 
			
		||||
		return
 | 
			
		||||
		return perr
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -99,9 +99,7 @@ func TestRequestHandler_ServeHTTP(t *testing.T) {
 | 
			
		||||
				},
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			sessionHandler := &HTTPRequestHandler{
 | 
			
		||||
				RequestHandler: mockRequestHandler,
 | 
			
		||||
			}
 | 
			
		||||
			sessionHandler := NewHTTPRequestHandler(mockRequestHandler)
 | 
			
		||||
 | 
			
		||||
			req := httptest.NewRequest(http.MethodPost, "/", bytes.NewBuffer(tt.input))
 | 
			
		||||
			req.Header.Set("X-Vise-Session", tt.sessionID)
 | 
			
		||||
@ -119,7 +117,7 @@ func TestRequestHandler_ServeHTTP(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestRequestHandler_WriteError(t *testing.T) {
 | 
			
		||||
	handler := &HTTPRequestHandler{}
 | 
			
		||||
	handler := NewHTTPRequestHandler(&httpmocks.MockRequestHandler{})
 | 
			
		||||
	mockWriter := &httpmocks.MockWriter{}
 | 
			
		||||
	err := errors.New("test error")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user