54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
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("/js", "client/js")
|
|
router.Static("/css", "client/css")
|
|
|
|
// 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", routes.HandleGetSensorValues(server))
|
|
loginProtected.GET("/api/sensors/:sensor/config", routes.GetSensorConfig(server))
|
|
loginProtected.PUT("/api/sensors/:sensor/config/:key", routes.HandlePutSensorConfig(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.HandlePostSensorValues(server))
|
|
|
|
router.Run(fmt.Sprintf("%s:%d", server.Config.Ip, server.Config.Port))
|
|
}
|