package main import ( "fmt" "github.com/eslider/superherohub/api" "github.com/eslider/superherohub/pkg/deesee" "github.com/eslider/superherohub/pkg/file" "log" "net/http" "os" "strconv" "time" ) var ( dataPath = "data/heros.json" // Heros to JSON file port = 8080 // Port to serve ) // main is the entry point of the application func main() { var ( key = 5 // DeeSee encryption key err error ) // Create logger logger := log.Default() // Get port from environment variable if os.Getenv("PORT") != "" { port, err = strconv.Atoi(os.Getenv("PORT")) if err != nil { logger.Fatalf("Invalid port number: %s", err.Error()) } if port < 1 || port > 65535 { logger.Print("Port number must be between 1 and 65535") logger.Fatalf("Invalid port number : %d", port) } } // Get key from environment variable if os.Getenv("KEY") != "" { key, err = strconv.Atoi(os.Getenv("KEY")) if err != nil { logger.Fatalf("Invalid key: %s", err.Error()) } //if key < 1 || key > 25 { // logger.Print("Key number should be between 1 and 25") // logger.Fatalf("Invalid key number : %d", key) //} } else { logger.Fatalf("Key is not set. Please set KEY environment variable.") } // Get data path from environment variable if os.Getenv("DATA_PATH") != "" { dataPath = os.Getenv("DATA_PATH") } // Check if data path exists if !file.IsExist(dataPath) { logger.Fatalf("Invalid data path: %s", dataPath) } herous, err := deesee.Load(dataPath) if err != nil { logger.Fatalf("Invalid data format: %s", dataPath) } // Create a new server srv := &http.Server{ Addr: fmt.Sprintf(":%d", port), // Define port and address to serve Handler: api.NewRouter(herous, key, logger).GetHandler(), ErrorLog: logger, ReadTimeout: 240 * time.Second, // Good practice: enforcing timeouts for serving. WriteTimeout: 240 * time.Second, // Good practice: enforcing timeouts for serving. } // Serve and handle error if err := srv.ListenAndServe(); err != nil { logger.Fatal(err) } }