all repos

onasty @ bf8dc57251dbc6827d93ef4bb0e5461f6084a099

a one-time notes service

onasty/internal/transport/http/middlewares.go (view raw)

Olexandr Smirnov Olexandr Smirnov
ss2316544@gmail.com
docs: add missing code comments (#185)..., 9 months ago
1
package http
2
3
import (
4
	"log/slog"
5
	"time"
6
7
	"github.com/gin-contrib/cors"
8
	"github.com/gin-gonic/gin"
9
)
10
11
func (t *Transport) corsMiddleware() gin.HandlerFunc {
12
	return cors.New(cors.Config{
13
		AllowOrigins:     t.corsAllowedOrigins,
14
		AllowMethods:     []string{"GET", "POST", "PUT", "PATCH", "DELETE"},
15
		AllowHeaders:     []string{"Authorization", "Content-Type"},
16
		AllowCredentials: true,
17
		MaxAge:           t.corsMaxAge,
18
	})
19
}
20
21
func (t *Transport) loggerMiddleware() gin.HandlerFunc {
22
	return func(c *gin.Context) {
23
		start := time.Now()
24
		path := c.Request.URL.Path
25
		raw := c.Request.URL.RawQuery
26
27
		c.Next()
28
		latency := time.Since(start)
29
30
		if raw != "" {
31
			path = path + "?" + raw
32
		}
33
34
		lvl := slog.LevelInfo
35
		if c.Writer.Status() >= 400 {
36
			lvl = slog.LevelError
37
		}
38
39
		slog.LogAttrs(
40
			c.Request.Context(),
41
			lvl,
42
			c.Errors.ByType(gin.ErrorTypePrivate).String(),
43
			slog.String("latency", latency.String()),
44
			slog.String("method", c.Request.Method),
45
			slog.Int("status_code", c.Writer.Status()),
46
			slog.String("path", path),
47
			slog.String("client_ip", c.ClientIP()),
48
			slog.Int("body_size", c.Writer.Size()),
49
		)
50
	}
51
}