TTime/backend/main.go

60 lines
1.6 KiB
Go

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)
}
}