diff --git a/main.go b/main.go index 7a669d0..a7ea0e6 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "log" "net/http" + "time" "github.com/google/uuid" "github.com/yxzzy-wtf/gin-gonic-prepack/config" @@ -10,6 +11,7 @@ import ( "github.com/yxzzy-wtf/gin-gonic-prepack/controllers/core" "github.com/yxzzy-wtf/gin-gonic-prepack/database" "github.com/yxzzy-wtf/gin-gonic-prepack/models" + "github.com/yxzzy-wtf/gin-gonic-prepack/scheduled" "github.com/gin-gonic/gin" "gorm.io/gorm" @@ -27,6 +29,15 @@ func main() { db := database.Init() Migrate(db) + // Scheduled tasks + scheduled.Schedule(func() (string, time.Duration) { + err := database.Db.Where("used < ?", time.Now().Add(-24*time.Hour)).Delete(&models.TotpUsage{}).Error + if err != nil { + return "purge failed: " + err.Error(), time.Hour + } + return "purged old TOTP usages", time.Hour * 24 + }) + r := gin.Default() // Fresh admin functionality diff --git a/scheduled/scheduled.go b/scheduled/scheduled.go new file mode 100644 index 0000000..76728a8 --- /dev/null +++ b/scheduled/scheduled.go @@ -0,0 +1,18 @@ +package scheduled + +import ( + "fmt" + "time" +) + +type Scheduled func() (string, time.Duration) + +func Schedule(f Scheduled) { + print, wait := f() + fmt.Println(print) + + go func(w time.Duration) { + time.Sleep(w) + Schedule(f) + }(wait) +}