diff --git a/main.go b/main.go index eaf6be3..3ffce20 100644 --- a/main.go +++ b/main.go @@ -16,7 +16,7 @@ func main() { db := SetupDatabase() SetupRsvpsTable(db) - visits := SetupVisitHandler(&VisitHandlerArgs{baseUrl: "http://ip-api.com", rateLimitAmount: 45, rateLimitDurationSeconds: 60}) + visits := SetupVisitHandler(&VisitHandlerArgs{baseUrl: "http://ip-api.com", rateLimitAmount: 45, rateLimitDurationSeconds: 60, cacheDurationSeconds: 60 * 60}) SetupAuth() hnd := &Handler{db, ntfy, visits} diff --git a/visits.go b/visits.go index ca29734..ee90f0b 100644 --- a/visits.go +++ b/visits.go @@ -26,6 +26,7 @@ type VisitHandler struct { pastRequests []int64 rateLimitAmount int rateLimitDurationSeconds int + cacheDurationSeconds int } func (v *VisitHandler) buildUrl(ipAddress string) string { @@ -110,7 +111,7 @@ func (v *VisitHandler) HandleVisit(remoteAddr string) *Visit { v.visitsCache = make(map[string]int64) } - if v.visitsCache[remoteAddr] == 0 || time.Since(time.Unix(v.visitsCache[remoteAddr], 0)) > time.Duration(v.rateLimitDurationSeconds) { + if v.visitsCache[remoteAddr] == 0 || time.Since(time.Unix(v.visitsCache[remoteAddr], 0)).Seconds() > float64(v.cacheDurationSeconds) { visit := v.createVisit(remoteAddr) if visit == nil { return nil @@ -126,6 +127,7 @@ type VisitHandlerArgs struct { baseUrl string rateLimitAmount int rateLimitDurationSeconds int + cacheDurationSeconds int } func SetupVisitHandler(args *VisitHandlerArgs) *VisitHandler { @@ -135,5 +137,6 @@ func SetupVisitHandler(args *VisitHandlerArgs) *VisitHandler { pastRequests: make([]int64, 0), rateLimitAmount: args.rateLimitAmount, rateLimitDurationSeconds: args.rateLimitDurationSeconds, + cacheDurationSeconds: args.cacheDurationSeconds, } } diff --git a/visits_test.go b/visits_test.go index 0d7fbbb..25d49aa 100644 --- a/visits_test.go +++ b/visits_test.go @@ -152,7 +152,7 @@ func TestHandleVisit_Cache(t *testing.T) { })) defer server.Close() - v := SetupVisitHandler(&VisitHandlerArgs{baseUrl: server.URL, rateLimitDurationSeconds: 1}) + v := SetupVisitHandler(&VisitHandlerArgs{baseUrl: server.URL, cacheDurationSeconds: 1}) visit := v.HandleVisit("home.collinduncan.com") if visit == nil {