MCPcopy Create free account
hub / github.com/MertJSX/folderhost / CheckAuth

Function CheckAuth

middleware/check_auth.go:17–135  ·  view source on GitHub ↗
(c *fiber.Ctx)

Source from the content-addressed store, hash-verified

15)
16
17func CheckAuth(c *fiber.Ctx) error {
18 var body map[string]interface{}
19 var controlPassword bool = false
20 var username string = ""
21 var password string = ""
22 var err error
23 var token string
24
25 _ = c.BodyParser(&body)
26 if body == nil {
27 body = make(map[string]interface{})
28 }
29
30 pathsToCheck := []string{"path", "folder", "itemName", "filepath", "oldFilepath", "newFilepath"}
31 for _, p := range pathsToCheck {
32 val := c.Query(p)
33 if val != "" && !utils.IsSafePath(val) {
34 return c.Status(403).JSON(fiber.Map{"err": "forbidden"})
35 }
36 }
37
38 authHeader := c.Get("Authorization")
39 if after, ok := strings.CutPrefix(authHeader, "Bearer "); ok {
40 token = after
41 } else {
42 token = authHeader
43 }
44
45 reqUsername, hasUsername := body["username"].(string)
46 reqPassword, hasPassword := body["password"].(string)
47
48 if token == "" && (!hasUsername || !hasPassword || reqUsername == "" || reqPassword == "") {
49 token = c.Cookies("token")
50 if token == "" {
51 return c.Status(400).JSON(fiber.Map{"err": "authorization required"})
52 }
53 }
54
55 if token != "" {
56 userIp := c.IP()
57 userUserAgent := c.Get("User-Agent")
58 tokenData, ok := cache.TokenFingerprint.Get(token)
59
60 if !ok {
61 return c.Status(401).JSON(fiber.Map{"err": "invalid token"})
62 }
63
64 // TODO: this should be a opt in feature
65 if subtle.ConstantTimeCompare([]byte(tokenData.Ip), []byte(userIp)) != 1 || tokenData.UserAgent != userUserAgent {
66 cache.TokenFingerprint.Delete(token)
67 return c.Status(401).JSON(fiber.Map{"err": "invalid token"})
68 }
69
70 username, err = utils.VerifyToken(token, config.Config.SecretJwtKey)
71 if err != nil {
72 return c.Status(401).JSON(fiber.Map{"err": "invalid token"})
73 }
74 c.Locals("username", username)

Callers

nothing calls this directly

Calls 6

IsSafePathFunction · 0.92
VerifyTokenFunction · 0.92
GetUserByUsernameFunction · 0.92
GetMethod · 0.80
DeleteMethod · 0.80
SetMethod · 0.80

Tested by

no test coverage detected