Better rate limiting

This commit is contained in:
Manu Mtz-Almeida 2015-05-13 03:45:17 +02:00
parent 7e6153dc33
commit 9386d78673
2 changed files with 11 additions and 4 deletions

View File

@ -1,6 +1,10 @@
package main package main
import "github.com/gin-gonic/gin" import (
"log"
"github.com/gin-gonic/gin"
)
import "github.com/manucorporat/stats" import "github.com/manucorporat/stats"
@ -8,8 +12,11 @@ var ips = stats.New()
func ratelimit(c *gin.Context) { func ratelimit(c *gin.Context) {
ip := c.ClientIP() ip := c.ClientIP()
value := ips.Add(ip, 1) value := uint64(ips.Add(ip, 1))
if value > 400 { if value >= 400 {
if value%400 == 0 {
log.Printf("BlockedIP:%s Requests:%d\n", ip, value)
}
c.AbortWithStatus(401) c.AbortWithStatus(401)
} }
} }

View File

@ -9,7 +9,7 @@ import (
func main() { func main() {
router := gin.New() router := gin.New()
router.Use(gin.Logger(), ratelimit) router.Use(ratelimit, gin.Recovery(), gin.Logger())
router.LoadHTMLGlob("resources/*.templ.html") router.LoadHTMLGlob("resources/*.templ.html")
router.Static("/static", "resources/static") router.Static("/static", "resources/static")