ipbl/src/routers/funcs.go
2022-03-10 19:56:03 +01:00

148 lines
3.9 KiB
Go

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, `<html>
<body style="background-color: black">
<p style="color:trust">Welcome to ipbl software (<a href="https://git.paulbsd.com/paulbsd/ipbl">https://git.paulbsd.com/paulbsd/ipbl</a>)</p>
</body>
</html>`)
})
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 := "10 minutes"
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)
return Result(c, err, disc)
})
e.Logger.Fatal(
e.Start(
fmt.Sprintf(":%d",
cfg.Switchs.Port)))
}