package main import ( "encoding/json" "fmt" "ttime/internal/config" "ttime/internal/database" "ttime/internal/handlers" "github.com/gofiber/fiber/v2" _ "github.com/mattn/go-sqlite3" jwtware "github.com/gofiber/contrib/jwt" ) func main() { conf, err := config.ReadConfigFromFile("config.toml") if err != nil { conf = config.NewConfig() _ = conf.WriteConfigToFile("config.toml") } // Pretty print the current config str, _ := json.MarshalIndent(conf, "", " ") fmt.Println(string(str)) // Connect to the database db := database.DbConnect(conf.DbPath) // Get our global state gs := handlers.NewGlobalState(db) // Create the server server := fiber.New() // Mount our static files (Beware of the security implications of this!) // This will likely be replaced by an embedded filesystem in the future server.Static("/", "./static") // Register our unprotected routes server.Post("/api/register", gs.Register) // Register handlers for example button count server.Get("/api/button", gs.GetButtonCount) server.Post("/api/button", gs.IncrementButtonCount) server.Post("/api/login", gs.Login) // Every route from here on will require a valid JWT server.Use(jwtware.New(jwtware.Config{ SigningKey: jwtware.SigningKey{Key: []byte("secret")}, })) server.Post("/api/loginrenew", gs.LoginRenew) server.Delete("/api/userdelete", gs.UserDelete) // Perhaps just use POST to avoid headaches // Announce the port we are listening on and start the server err = server.Listen(fmt.Sprintf(":%d", conf.Port)) if err != nil { fmt.Println("Error starting server: ", err) } }