Adds rate limiting

This commit is contained in:
Manu Mtz-Almeida 2015-05-14 20:25:55 +02:00
parent eed6d93095
commit 3f48e0d45c
3 changed files with 15 additions and 1 deletions

View File

@ -26,7 +26,8 @@ func StartWorkers() {
func StartGin() {
gin.SetMode(gin.ReleaseMode)
router := gin.Default()
router := gin.New()
router.Use(rateLimit, gin.Recovery(), gin.Logger())
router.LoadHTMLGlob("resources/*.templ.html")
router.Static("/static", "resources/static")
router.GET("/", index)

View File

@ -3,12 +3,24 @@ package main
import (
"html"
"io"
"log"
"strings"
"time"
"github.com/gin-gonic/gin"
)
func rateLimit(c *gin.Context) {
ip := c.ClientIP()
value := ips.Add(ip, 1)
if value > 800 {
if int(value)%700 == 0 {
log.Printf("ip block: %s, count: %f\n", ip, value)
}
c.AbortWithStatus(503)
}
}
func index(c *gin.Context) {
c.Redirect(301, "/room/hn")
}

View File

@ -8,6 +8,7 @@ import (
"github.com/manucorporat/stats"
)
var ips = stats.New()
var messages = stats.New()
var users = stats.New()
var mutexStats sync.RWMutex