package main import ( "flag" "log" "net/http" "os" "os/signal" "syscall" "git.hamburg.ccc.de/ccchh/spaceapid/config" "git.hamburg.ccc.de/ccchh/spaceapid/handlers" "git.hamburg.ccc.de/ccchh/spaceapid/persistence" "git.hamburg.ccc.de/ccchh/spaceapid/types" "git.hamburg.ccc.de/ccchh/spaceapid/util" ) var ( flagHelp bool version string ) func init() { flag.BoolVar(&flagHelp, "h", false, "Print help output") } func main() { log.Println("SpaceAPId version", version) flag.Parse() if flagHelp { flag.PrintDefaults() os.Exit(0) } // Get spaceapid configuration conf := config.ParseConfiguration() // Merge old state if present persistence.MergeOldState(&conf.Response) // Register signal handler sc := make(chan os.Signal, 1) signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM) go func(resp *types.SpaceAPIResponseV14) { <-sc log.Println("Saving state and shutting down...") persistence.SaveCurrentState(*resp) os.Exit(0) }(&conf.Response) // Root handler http.HandleFunc("GET /{$}", handlers.Root(&conf.Response), ) // state->open http.HandleFunc("PUT /state/open", handlers.StateOpen(conf.Credentials, conf.Dynamic.State.Open.AllowedCredentials, &conf.Response.State), ) // state->message 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 handlers 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], ), ) } } // Start webserver log.Println("Starting HTTP server...") log.Fatalln(http.ListenAndServe(":8080", nil)) }