51 lines
951 B
Go
51 lines
951 B
Go
package routes
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/ngn13/website/api/database"
|
|
"github.com/ngn13/website/api/util"
|
|
)
|
|
|
|
const LAST_ADDRS_MAX = 30
|
|
|
|
var last_addrs []string
|
|
|
|
func GET_Visitor(c *fiber.Ctx) error {
|
|
var (
|
|
err error
|
|
count uint64
|
|
)
|
|
|
|
db := c.Locals("database").(*database.Type)
|
|
new_addr := util.GetSHA1(util.IP(c))
|
|
|
|
for _, addr := range last_addrs {
|
|
if new_addr == addr {
|
|
if count, err = db.VisitorGet(); err != nil {
|
|
return util.ErrInternal(c, err)
|
|
}
|
|
|
|
return util.JSON(c, 200, fiber.Map{
|
|
"result": count,
|
|
})
|
|
}
|
|
}
|
|
|
|
if err = db.VisitorIncrement(); err != nil {
|
|
return util.ErrInternal(c, err)
|
|
}
|
|
|
|
if count, err = db.VisitorGet(); err != nil {
|
|
return util.ErrInternal(c, err)
|
|
}
|
|
|
|
if len(last_addrs) > LAST_ADDRS_MAX {
|
|
last_addrs = append(last_addrs[:0], last_addrs[1:]...)
|
|
last_addrs = append(last_addrs, new_addr)
|
|
}
|
|
|
|
return util.JSON(c, 200, fiber.Map{
|
|
"result": count,
|
|
})
|
|
}
|