You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

49 lines
1.1 KiB

package main
import (
"log"
"net/http"
"time"
"github.com/domagojzecevic/cammonitor/internal/auth"
"github.com/domagojzecevic/cammonitor/internal/config"
"github.com/domagojzecevic/cammonitor/internal/db"
"github.com/domagojzecevic/cammonitor/internal/web"
)
func main() {
cfg, err := config.Load()
if err != nil {
log.Fatalf("load config: %v", err)
}
database, err := db.Open(cfg.DBPath)
if err != nil {
log.Fatalf("open database: %v", err)
}
defer database.Close()
authStore := auth.NewStore(database)
if err := authStore.EnsureAdmin(cfg.AdminUser, cfg.AdminPass); err != nil {
log.Fatalf("ensure admin: %v", err)
}
go purgeExpiredSessions(authStore)
router := web.NewRouter(cfg, database, nil)
log.Printf("listening on %s", cfg.ListenAddr)
if err := http.ListenAndServe(cfg.ListenAddr, router); err != nil {
log.Fatalf("server stopped: %v", err)
}
}
func purgeExpiredSessions(store *auth.Store) {
ticker := time.NewTicker(time.Hour)
defer ticker.Stop()
for range ticker.C {
if err := store.PurgeExpiredSessions(); err != nil {
log.Printf("purge expired sessions: %v", err)
}
}
}