package main import ( "basic-sensor-receiver/app" "basic-sensor-receiver/middleware" "basic-sensor-receiver/routes" "fmt" "log" "github.com/gin-gonic/gin" "github.com/joho/godotenv" _ "github.com/mattn/go-sqlite3" ) func main() { err := godotenv.Load() if err != nil { log.Println("Error loading .env file") } server := app.InitializeServer() gin.SetMode(server.Config.Mode) router := gin.Default() // Front-end resources router.StaticFile("/", "client/index.html") router.Static("/assets", "client/assets") // Only allow CORS in development mode if server.Config.Mode == "development" { router.Use(middleware.CorsMiddleware()) } // User login route router.POST("/api/login", routes.Login(server)) // Routes that are only accessible after logging in loginProtected := router.Group("/", middleware.LoginAuthMiddleware(server)) loginProtected.GET("/api/sensors", routes.GetSensors(server)) loginProtected.GET("/api/sensors/:sensor/values/latest", routes.GetSensorLatestValue(server)) loginProtected.GET("/api/sensors/:sensor/values", routes.GetSensorValues(server)) loginProtected.GET("/api/sensors/:sensor/config", routes.GetSensorConfig(server)) loginProtected.PUT("/api/sensors/:sensor/config/:key", routes.PutSensorConfig(server)) loginProtected.GET("/api/dashboards", routes.GetDashboards(server)) loginProtected.POST("/api/dashboards", routes.PostDashboard(server)) loginProtected.GET("/api/dashboards/:id", routes.GetDashboardById(server)) loginProtected.PUT("/api/dashboards/:id", routes.PutDashboard(server)) loginProtected.POST("/api/logout", routes.Logout(server)) // Routes accessible using auth key keyProtected := router.Group("/", middleware.KeyAuthMiddleware(server)) keyProtected.POST("/api/sensors/:sensor/values", routes.PostSensorValues(server)) // Starts session cleanup goroutine server.StartCleaner() // Run the server router.Run(fmt.Sprintf("%s:%d", server.Config.Ip, server.Config.Port)) }