package main import ( "log" "net/http" "os" "path/filepath" "strings" "time" ) var ( port = os.Getenv("PODCAST_PORT") // Es: ":8080" baseURL = os.Getenv("PODCAST_BASE_URL") // Es: "http://mioserver.com" audioDir = os.Getenv("PODCAST_AUDIO_DIR") // Es: "/data/podcast/audio" coversDir = os.Getenv("PODCAST_COVERS_DIR") // Es: "/data/podcast/covers" podTitle = os.Getenv("PODCAST_TITLE") // Es: "Il Mio Podcast" ) func init() { // Verifica variabili d'ambiente for _, v := range []struct { name string value string }{ {"PODCAST_PORT", port}, {"PODCAST_BASE_URL", baseURL}, {"PODCAST_AUDIO_DIR", audioDir}, {"PODCAST_COVERS_DIR", coversDir}, {"PODCAST_TITLE", podTitle}, } { if v.value == "" { log.Fatalf("Variabile d'ambiente mancante: %s", v.name) } } } func main() { // Handler principale http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // Verifica se la richiesta รจ per un file audio o cover requestedFile := filepath.Clean(r.URL.Path) isAudio := strings.HasPrefix(requestedFile, "/audio/") isCover := strings.HasPrefix(requestedFile, "/covers/") // logghiamo che succede log.Println("Richiesta da: ", r.UserAgent(), " per ", r.RequestURI) if isAudio || isCover { // Servi il file richiesto http.ServeFile(w, r, filepath.Join(".", requestedFile)) return } // Altrimenti servi sempre l'RSS if err := generateRSS(); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } http.ServeFile(w, r, "feed.xml") }) // Aggiornamento periodico go func() { for { time.Sleep(5 * time.Minute) if err := generateRSS(); err != nil { log.Printf("Aggiornamento RSS fallito: %v", err) } } }() log.Printf("Server in ascolto su %s%s", baseURL, port) log.Fatal(http.ListenAndServe(port, nil)) }