From 5957096b4dffcf3d73e671a4e00247c4e24ed8b1 Mon Sep 17 00:00:00 2001 From: Joseildo M S filho Date: Sun, 18 Aug 2024 23:25:52 -0300 Subject: [PATCH 1/2] feat: adds static content serving --- pkg/web/restserver/fiber_server.go | 7 +++++++ pkg/web/restserver/route.go | 5 +++++ pkg/web/restserver/server.go | 8 ++++++++ 3 files changed, 20 insertions(+) diff --git a/pkg/web/restserver/fiber_server.go b/pkg/web/restserver/fiber_server.go index 90a36cc..e10e3ac 100644 --- a/pkg/web/restserver/fiber_server.go +++ b/pkg/web/restserver/fiber_server.go @@ -136,3 +136,10 @@ func (f *fiberWebServer) registerCustomMiddleware(m CustomMiddleware) { f.srv.Use(fn) } + +func (f *fiberWebServer) injectStaticRoutes() { + for _, staticRoute := range staticContentRoutes { + logging.Info("Registering static route on %s serving from folder %s", staticRoute.URI, staticRoute.Path) + f.srv.Static(staticRoute.URI, staticRoute.Path) + } +} diff --git a/pkg/web/restserver/route.go b/pkg/web/restserver/route.go index dacf552..e26d310 100644 --- a/pkg/web/restserver/route.go +++ b/pkg/web/restserver/route.go @@ -26,6 +26,11 @@ type Route struct { BeforeEnter func(ctx WebContext) *MiddlewareError } +type StaticRoute struct { + URI string + Path string +} + type healtCheck struct { Status string `json:"status"` } diff --git a/pkg/web/restserver/server.go b/pkg/web/restserver/server.go index 9eb55f6..028bb4a 100644 --- a/pkg/web/restserver/server.go +++ b/pkg/web/restserver/server.go @@ -15,6 +15,8 @@ var ( srv Server customAuth CustomAuthenticationMiddleware + staticContentRoutes []StaticRoute + errUserUnauthenticated = errors.New("user not authenticated") ) @@ -26,6 +28,7 @@ type Server interface { injectCustomMiddlewares() injectRoutes() listenAndServe() error + injectStaticRoutes() } // AddRoutes add list of routes in the webrest server @@ -33,6 +36,10 @@ func AddRoutes(routes []Route) { srvRoutes = append(srvRoutes, routes...) } +func AddStaticRoute(route StaticRoute) { + staticContentRoutes = append(staticContentRoutes, route) +} + func CustomAuthMiddleware(fn CustomAuthenticationMiddleware) { customAuth = fn } @@ -51,6 +58,7 @@ func ListenAndServe() { srv.injectMiddlewares() srv.injectCustomMiddlewares() srv.injectRoutes() + srv.injectStaticRoutes() observer.Attach(restObserver{}) logging.Info("Service '%s' running in %d port", "WEB-REST", config.PORT) From eb0577594b9df6d246050144c31abc1ace27f5e9 Mon Sep 17 00:00:00 2001 From: Joseildo M S filho Date: Thu, 5 Sep 2024 21:59:18 -0300 Subject: [PATCH 2/2] chore: adds a simple test to ensure that the static routes works as intended --- development-environment/rest/index.html | 4 ++ pkg/web/restserver/static_route_test.go | 53 +++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 development-environment/rest/index.html create mode 100644 pkg/web/restserver/static_route_test.go diff --git a/development-environment/rest/index.html b/development-environment/rest/index.html new file mode 100644 index 0000000..ce94339 --- /dev/null +++ b/development-environment/rest/index.html @@ -0,0 +1,4 @@ +

Minha Cozinha

+ +

Aqui você encontra receitas de pratos deliciosos e fáceis de fazer. Todos são testados e aprovados por mim. Bom apetite!

+ diff --git a/pkg/web/restserver/static_route_test.go b/pkg/web/restserver/static_route_test.go new file mode 100644 index 0000000..c8888be --- /dev/null +++ b/pkg/web/restserver/static_route_test.go @@ -0,0 +1,53 @@ +package restserver + +import ( + "fmt" + "io" + "net" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/colibri-project-io/colibri-sdk-go/pkg/base/config" + "github.com/colibri-project-io/colibri-sdk-go/pkg/base/test" +) + +func TestStartStatisRoutes(t *testing.T) { + test.InitializeBaseTest() + + AddStaticRoute(StaticRoute{ + Path: "../../../development-environment/rest", + URI: "/", + }) + + l := listener(t) + config.PORT = l.Addr().(*net.TCPAddr).Port + _ = l.Close() + + baseURL := fmt.Sprintf("http://localhost:%d/", config.PORT) + + go ListenAndServe() + + t.Run("should return the json file", func(t *testing.T) { + fmt.Println(baseURL) + response, err := http.Get(baseURL) + + assert.NoError(t, err) + assert.NotNil(t, response) + + body, err := io.ReadAll(response.Body) + + assert.NoError(t, err) + assert.Contains(t, string(body), "minha-cozinha") + }) +} + +func listener(t *testing.T) (l net.Listener) { + l, err := net.Listen("tcp", ":0") + if err != nil { + t.Error("could not get available port") + } + + return l +}