package routers import ( "context" "fmt" "log" "net/http" "strconv" "git.paulbsd.com/paulbsd/ipbl/src/config" "git.paulbsd.com/paulbsd/ipbl/src/models" "github.com/labstack/echo/v4" ) func RegisterRoutes(e *echo.Echo, ctx *context.Context, cfg *config.Config) { e.GET("/", func(c echo.Context) error { return c.HTML(http.StatusOK, `

Welcome to ipbl software (https://git.paulbsd.com/paulbsd/ipbl)

`) }) e.GET("/ip/:ip", func(c echo.Context) (err error) { ret, err := models.GetIP(ctx, cfg, c.Param("ip")) return Result(c, err, ret) }) e.POST("/ip", func(c echo.Context) (err error) { var ip = new(models.IP) var msg = "No IP inserted" err = c.Bind(ip) if err != nil { return Result(c, fmt.Errorf("error when parsing body"), "") } num, err := ip.InsertIP(cfg) fmt.Println(err) if err != nil { return Result(c, err, "") } if num > 0 { msg = fmt.Sprintf("Inserted %d IP", num) } return Result(c, err, msg) }) e.GET("/ips", func(c echo.Context) (err error) { limit := 50 if c.QueryParam("limit") != "" { limit, _ = strconv.Atoi(c.QueryParam("limit")) } ret, err := models.GetIPs(ctx, cfg, limit) return Result(c, err, ret) }) e.GET("/ips/last", func(c echo.Context) (err error) { interval := "30 minutes" if c.QueryParam("interval") != "" { interval = c.QueryParam("interval") } ret, err := models.GetIPsLast(ctx, cfg, interval) return Result(c, err, ret) }) e.POST("/ips", func(c echo.Context) (err error) { var ips = []models.IP{} var msg string err = c.Bind(&ips) if err != nil { return Result(c, err, ips) } numinsert, numupdate, _, _ := models.InsertIPBulk(cfg, &ips) if numinsert > 0 { msg = fmt.Sprintf("inserted %d IP", numinsert) log.Println(msg) } if numupdate > 0 { if len(msg) > 0 { msg = fmt.Sprintf("%s, updated %d IP", msg, numupdate) } else { msg = fmt.Sprintf("updated %d IP", numupdate) } log.Println(msg) } return Result(c, err, msg) }) e.GET("/config/trustlist", func(c echo.Context) (err error) { trustlists, err := models.GetTrustlists(*cfg) return Result(c, err, trustlists) }) e.POST("/config/trustlist", func(c echo.Context) (err error) { var cidr models.Trustlist err = c.Bind(&cidr) if err == nil && cidr.Verify() { err = cidr.InsertOrUpdate(*cfg) return Result(c, err, cidr) } return Result(c, err, nil) }) e.DELETE("/config/trustlist/:ip", func(c echo.Context) (err error) { var ip = c.Param("ip") var cidr models.Trustlist err = cidr.Delete(*cfg, ip) if err != nil { return c.JSON(http.StatusOK, "Deleted old CIDR") } return }) e.GET("/config/folders", func(c echo.Context) (err error) { folders, err := models.GetFolders(*cfg) return Result(c, err, folders) }) e.POST("/config/folders", func(c echo.Context) (err error) { var folders []models.Folder err = c.Bind(&folders) if err != nil { return Result(c, err, "Unable to parse JSON") } _, err = models.InsertOrUpdateFolders(*cfg, folders) return Result(c, err, folders) }) e.GET("/config/folders", func(c echo.Context) (err error) { folders, err := models.GetFolders(*cfg) return Result(c, err, folders) }) e.POST("/config/folders", func(c echo.Context) (err error) { var folders []models.Folder err = c.Bind(&folders) if err != nil { return Result(c, err, "Unable to parse JSON") } _, err = models.InsertOrUpdateFolders(*cfg, folders) return Result(c, err, folders) }) e.GET("/config/zmqps", func(c echo.Context) (err error) { folders, err := models.GetZMQ(*cfg, "ps") return Result(c, err, folders) }) e.GET("/config/zmqrr", func(c echo.Context) (err error) { folders, err := models.GetZMQ(*cfg, "rr") return Result(c, err, folders) }) e.GET("/discovery", func(c echo.Context) (err error) { disc, err := models.DiscoverURLS(*cfg, e.Routes()) return Result(c, err, disc) }) }