package api import ( "backend/database" "backend/model" "fmt" "os" "time" "github.com/gofiber/fiber/v2" "github.com/golang-jwt/jwt/v5" ) func Login(c *fiber.Ctx) error { var requestdata model.AuthRequest err := c.BodyParser(&requestdata) if err != nil { return fmt.Errorf("Error parse body, %s", err) } dbuser, e := database.GetUserByUsername(requestdata.Username) if e != nil { return fiber.ErrInternalServerError } if dbuser.Password != requestdata.Password { return fiber.ErrForbidden } claims := jwt.MapClaims{ "id": dbuser.ID, "username": dbuser.Username, "is_superuser": dbuser.IsSuperuser, "exp": time.Now().Add(time.Hour * 72).Unix(), } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) t, err := token.SignedString([]byte(os.Getenv("JWT_SECRET_KEY"))) if err != nil { return c.SendStatus(fiber.StatusInternalServerError) } return c.JSON(fiber.Map{"token": t}) }