package routes import ( "math" "strconv" "strings" "git.matterlinux.xyz/matter/security/lib" "git.matterlinux.xyz/matter/security/log" "github.com/gofiber/fiber/v2" ) var PAGE_SIZE = 32 func GetPage(c *fiber.Ctx) (int, int, int) { page, err := strconv.Atoi(c.Query("p")) if err != nil || page <= 0 { page = 1 } return page, page * PAGE_SIZE, (page * PAGE_SIZE) - PAGE_SIZE } func GET_Details(c *fiber.Ctx) error { id := c.Params("id") if id == "" || !strings.HasPrefix(id, "MPSI-") { return lib.RenderError(c, 404) } v, suc := lib.FindVuln(id) if !suc { return lib.RenderError(c, 404) } return c.Render("details", &v) } func GET_Index(c *fiber.Ctx) error { cur, max, min := GetPage(c) search_qu := c.Query("q") search_in := c.Query("i") vulns, err := lib.LoadVulns() if err != nil { log.Error("Failed to load vulns: %s", err.Error()) return lib.RenderError(c, 500) } results := []lib.Vuln{} for i := len(vulns) - 1; i >= 0; i-- { if i >= max || i < min { continue } switch search_in { case "desc": if !lib.ContainsCase(vulns[i].Desc, search_qu) { continue } case "id": if !lib.ContainsCase(vulns[i].ID, search_qu) { continue } case "pkg": if !lib.ContainsCase(vulns[i].Package, search_qu) { continue } case "status": if !lib.ContainsCase(vulns[i].Status, search_qu) { continue } } results = append(results, vulns[i]) } pages := int64(math.Ceil(float64(len(results)) / float64(PAGE_SIZE))) return c.Render("index", fiber.Map{ "pages": pages, "current": cur, "next": cur + 1, "prev": cur - 1, "vulns": results, "query": search_qu, "in": search_in, }) }