Completed
Push — main ( c5cfaa...a2bc06 )
by Yume
25s queued 21s
created

http.registerMiddlewares   A

Complexity

Conditions 4

Size

Total Lines 26
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 15
dl 0
loc 26
rs 9.65
c 0
b 0
f 0
nop 1
1
package http
2
3
import (
4
	"github.com/gofiber/contrib/fibersentry"
5
	"github.com/gofiber/contrib/otelfiber"
6
	"github.com/gofiber/fiber/v2"
7
	"github.com/gofiber/fiber/v2/middleware/cors"
8
	"github.com/gofiber/fiber/v2/middleware/favicon"
9
	"github.com/gofiber/fiber/v2/middleware/pprof"
10
	"github.com/gofiber/swagger"
11
	"github.com/memnix/memnix-rest/config"
12
	_ "github.com/memnix/memnix-rest/docs" // Side effect import
13
)
14
15
// New returns a new Fiber instance
16
func New() *fiber.App {
17
	// Create new app
18
19
	app := fiber.New(
20
		fiber.Config{
21
			Prefork:     false,
22
			JSONDecoder: config.JSONHelper.Unmarshal,
23
			JSONEncoder: config.JSONHelper.Marshal,
24
		})
25
26
	// Register middlewares
27
	registerMiddlewares(app)
28
29
	app.Get("/", func(c *fiber.Ctx) error {
30
		return c.SendString("Hello, World 👋!")
31
	})
32
33
	// Use swagger middleware
34
	app.Get("/swagger/*", swagger.HandlerDefault) // default
35
36
	// Api group
37
	v2 := app.Group("/v2")
38
39
	v2.Get("/", func(c *fiber.Ctx) error {
40
		return fiber.NewError(fiber.StatusForbidden, "This is not a valid route") // Custom error
41
	})
42
43
	registerRoutes(&v2) // /v2
44
45
	return app
46
}
47
48
func registerMiddlewares(app *fiber.App) {
49
	// Use cors middleware
50
	app.Use(cors.New(cors.Config{
51
		AllowOrigins:     "http://localhost, *",
52
		AllowHeaders:     "Origin, Content-Type, Accept, Authorization, Cache-Control",
53
		AllowCredentials: true,
54
	}))
55
56
	// Provide a minimal config
57
	app.Use(favicon.New(favicon.Config{
58
		File: "./favicon.ico",
59
		URL:  "/favicon.ico",
60
	}))
61
62
	app.Use(fibersentry.New(fibersentry.Config{
63
		Repanic:         true,
64
		WaitForDelivery: true,
65
	}))
66
67
	app.Use(otelfiber.Middleware(otelfiber.WithNext(
68
		func(c *fiber.Ctx) bool {
69
			// Do not trace /metrics endpoint
70
			return c.Path() == "/metrics" || c.Path() == "/swagger/*" || c.Path() == "/favicon.ico"
71
		})))
72
73
	app.Use(pprof.New())
74
}
75