Completed
Push — main ( c7f647...178139 )
by Yume
14s queued 13s
created

routes.IsConnectedMiddleware   B

Complexity

Conditions 5

Size

Total Lines 39
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 21
nop 0
dl 0
loc 39
rs 8.9093
c 0
b 0
f 0
1
package routes
2
3
import (
4
	"fmt"
5
	"github.com/gofiber/fiber/v2"
6
	"github.com/memnix/memnixrest/app/auth"
7
	"github.com/memnix/memnixrest/pkg/logger"
8
	"github.com/memnix/memnixrest/pkg/models"
9
	"github.com/memnix/memnixrest/pkg/queries"
10
	"strings"
11
)
12
13
func IsConnectedMiddleware() func(c *fiber.Ctx) error {
14
	return func(c *fiber.Ctx) error {
15
16
		path := strings.TrimLeft(c.Path(), "/v1")
17
		path = strings.TrimRight(path, "/")
18
19
		p := routesMap["/"+path].Permission
20
21
		if p == models.PermNone {
22
			return c.Next()
23
		}
24
25
		statusCode, response := auth.IsConnected(c) // Check if connected
26
27
		// Check statusCode
28
		if statusCode != fiber.StatusOK {
29
			c.Status(statusCode)
30
			// Return response
31
			return queries.AuthError(c, &response)
32
		}
33
34
		user := response.User // Get user from response
35
36
		// Check permission
37
		if user.Permissions < p {
38
			// Log permission error
39
			log := logger.CreateLog(fmt.Sprintf("Permission error: %s | had %s but tried %s", user.Email, user.Permissions.ToString(), p.ToString()), logger.LogPermissionForbidden).SetType(logger.LogTypeWarning).AttachIDs(user.ID, 0, 0)
40
			_ = log.SendLog()                  // Send log
41
			c.Status(fiber.StatusUnauthorized) // Unauthorized Status
42
			// Return response
43
			return queries.AuthError(c, &models.ResponseAuth{
44
				Success: false,
45
				Message: "You don't have the right permissions to perform this request.",
46
			})
47
		}
48
49
		// Validate permissions
50
		c.Locals("user", user) // Set user in locals
51
		return c.Next()
52
	}
53
}
54