spaceapid/main.go

85 lines
2.1 KiB
Go
Raw Normal View History

2023-11-04 20:10:08 +01:00
package main
import (
"flag"
2023-11-04 20:10:08 +01:00
"log"
"net/http"
"os"
"os/signal"
"syscall"
2023-11-04 20:10:08 +01:00
2024-01-31 17:11:15 +01:00
"git.hamburg.ccc.de/ccchh/spaceapid/config"
"git.hamburg.ccc.de/ccchh/spaceapid/handlers"
2024-01-31 18:25:34 +01:00
"git.hamburg.ccc.de/ccchh/spaceapid/persistence"
2024-01-31 17:11:15 +01:00
"git.hamburg.ccc.de/ccchh/spaceapid/types"
"git.hamburg.ccc.de/ccchh/spaceapid/util"
2023-11-04 20:10:08 +01:00
)
var (
flagHelp bool
version string
)
func init() {
flag.BoolVar(&flagHelp, "h", false, "Print help output")
}
2023-11-04 20:10:08 +01:00
func main() {
log.Println("SpaceAPId version", version)
flag.Parse()
if flagHelp {
flag.PrintDefaults()
os.Exit(0)
}
// Get spaceapid configuration
conf := config.ParseConfiguration()
2023-11-04 20:10:08 +01:00
// Merge old state if present
2024-01-31 18:25:34 +01:00
persistence.MergeOldState(&conf.Response)
2023-11-10 03:49:05 +01:00
// Register signal handler
sc := make(chan os.Signal, 1)
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM)
2024-01-06 19:43:51 +01:00
go func(resp *types.SpaceAPIResponseV14) {
<-sc
2023-11-10 03:49:05 +01:00
log.Println("Saving state and shutting down...")
2024-01-31 18:25:34 +01:00
persistence.SaveCurrentState(*resp)
2023-11-10 03:49:05 +01:00
os.Exit(0)
}(&conf.Response)
2023-11-10 03:49:05 +01:00
// Register HTTP handlers
http.HandleFunc("GET /{$}",
handlers.Root(&conf.Response),
)
http.HandleFunc("PUT /state/open",
handlers.StateOpen(conf.Credentials, conf.Dynamic.State.Open.AllowedCredentials, &conf.Response.State),
)
http.HandleFunc("PUT /state/message",
handlers.StateMessagePUT(conf.Credentials, conf.Dynamic.State.Open.AllowedCredentials, &conf.Response.State),
)
http.HandleFunc("DELETE /state/message",
handlers.StateMessageDELETE(conf.Credentials, conf.Dynamic.State.Open.AllowedCredentials, &conf.Response.State),
)
// Register handler for environmental sensors
for sensorType, envSensorConfigs := range conf.Dynamic.Sensors {
for i, envSensorConfig := range envSensorConfigs {
urlPattern := "PUT " + util.GetSensorURLPath(
sensorType, envSensorConfig.SensorData.Location, envSensorConfig.SensorData.Name,
)
http.HandleFunc(
urlPattern,
handlers.EnvironmentSensor(
conf.Credentials, envSensorConfig.AllowedCredentials, &conf.Response.Sensors[sensorType][i],
),
)
}
}
2023-11-04 20:10:08 +01:00
// Start webserver
2023-11-04 20:10:08 +01:00
log.Println("Starting HTTP server...")
2023-11-10 03:49:05 +01:00
log.Fatalln(http.ListenAndServe(":8080", nil))
2023-11-04 20:10:08 +01:00
}