diff --git a/index.go b/index.go index a14bbe7..cff39a0 100644 --- a/index.go +++ b/index.go @@ -2,6 +2,7 @@ package main import ( "net/http" + "strconv" "github.com/gin-gonic/gin" ) @@ -11,20 +12,85 @@ var Resp []Result // 数据存储在全局切片中 func Index() { r := gin.Default() - // 初始化数据 - // initData() - // 提供前端静态文件服务 - r.LoadHTMLFiles("index.html") // 加载前端页面 + r.LoadHTMLFiles("index.html") // 加载前端页面 + r.Static("/static", "./static") // 为前端静态资源提供服务 + r.GET("/", func(c *gin.Context) { c.HTML(http.StatusOK, "index.html", nil) }) - // 提供 API 接口 + // 分页数据接口 r.GET("/data", func(c *gin.Context) { - c.JSON(http.StatusOK, Resp) + // 获取分页参数 + page, err1 := strconv.Atoi(c.Query("page")) + pageSize, err2 := strconv.Atoi(c.Query("pageSize")) + resultFilter := c.Query("result") + + if err1 != nil || page < 1 { + page = 1 + } + if err2 != nil || pageSize < 1 { + pageSize = 10 + } + + // 应用筛选条件 + var filteredData []Result + for _, item := range Resp { + if resultFilter == "" || item.Result == resultFilter { + filteredData = append(filteredData, item) + } + } + + // 计算分页数据 + total := len(filteredData) + offset := (page - 1) * pageSize + var data []Result + if offset < total { + if offset+pageSize > total { + data = filteredData[offset:] + } else { + data = filteredData[offset : offset+pageSize] + } + } + + // 返回响应 + c.JSON(http.StatusOK, gin.H{ + "data": data, + "total": total, + "currentPage": page, + "pageSize": pageSize, + "totalPages": (total + pageSize - 1) / pageSize, + }) }) + // 统计数据接口 + r.GET("/stats", func(c *gin.Context) { + total := len(Resp) + vulnerable := 0 + unknown := 0 + safe := 0 + + for _, item := range Resp { + switch item.Result { + case "true": + vulnerable++ + case "unknown": + unknown++ + case "false": + safe++ + } + } + + c.JSON(http.StatusOK, gin.H{ + "total": total, + "vulnerable": vulnerable, + "unknown": unknown, + "safe": safe, + }) + }) + + // 添加数据接口 r.POST("/update", func(c *gin.Context) { var newData Result if err := c.ShouldBindJSON(&newData); err != nil { @@ -35,23 +101,6 @@ func Index() { c.JSON(http.StatusOK, gin.H{"message": "Data updated successfully"}) }) - r.POST("/filter", func(c *gin.Context) { - var filterData struct { - Result string `json:"result"` - } - if err := c.ShouldBindJSON(&filterData); err != nil { - c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) - return - } - filteredData := []Result{} - for _, item := range Resp { - if item.Result == filterData.Result { - filteredData = append(filteredData, item) - } - } - c.JSON(http.StatusOK, filteredData) - }) - // 启动服务 r.Run(":8222") }