package main import ( "log" "net/http" "os" "time" "github.com/gofiber/fiber/v2" "github.com/gofiber/template/html" "github.com/robfig/cron/v3" "git.massivebox.net/ecodash/ecodash/src/ecodash" "git.massivebox.net/ecodash/ecodash/src/tools" ) func main() { config, isFirstRun, err := ecodash.LoadConfig() if err != nil { log.Fatal(err) } if !isFirstRun { cr := cron.New() _, err = cr.AddFunc("@hourly", config.UpdateHistory) if err != nil { log.Fatal(err) } cr.Start() config.UpdateHistory() } engine := html.New("./templates/"+config.Dashboard.Theme, ".html") engine.AddFunc("divide", tools.TemplateDivide) engine.AddFunc("HTMLDateFormat", tools.TemplateHTMLDateFormat) app := fiber.New(fiber.Config{ Views: engine, }) app.Static("/assets", "./templates/"+config.Dashboard.Theme+"/assets") app.Get("/", func(c *fiber.Ctx) error { if isFirstRun { c.Cookie(&fiber.Cookie{Name: "admin_username", Value: ""}) c.Cookie(&fiber.Cookie{Name: "admin_password_hash", Value: tools.Hash("")}) return config.RenderAdminPanel(c) } return config.RenderIndex(c) }) app.Get("/accuracy-notice", func(c *fiber.Ctx) error { return c.Render("accuracy-notice", config.TemplateDefaultsMap(), "base") }) app.All("/admin", config.AdminEndpoint) app.Get("/restart", func(c *fiber.Ctx) error { if config.IsAuthorized(c) { go func() { time.Sleep(time.Second) os.Exit(1) }() return c.Render("restart", config.TemplateDefaultsMap(), "base") } return c.Redirect("./", http.StatusTemporaryRedirect) }) port := os.Getenv("PORT") if port == "" { port = "80" } log.Fatal(app.Listen(":" + port)) }