Jelajahi Sumber

Provide the list over HTTP

Signed-off-by: Antoine Tenart <antoine.tenart@ack.tf>
Antoine Tenart 6 tahun lalu
induk
melakukan
a3db43d591
1 mengubah file dengan 18 tambahan dan 14 penghapusan
  1. 18 14
      main.go

+ 18 - 14
main.go

@@ -2,11 +2,11 @@ package main
 
 import (
 	"errors"
+	"fmt"
 	"io/ioutil"
 	"log"
 	"net"
 	"net/http"
-	"os"
 	"strings"
 )
 
@@ -31,30 +31,34 @@ var (
 )
 
 func main() {
-	// Open the zone file, and create it if needed
-	f, err := os.OpenFile(zone_file, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
+	http.HandleFunc("/", handler)
+	log.Fatal(http.ListenAndServe(":8080", nil))
+}
+
+func handler(w http.ResponseWriter, r *http.Request) {
+	list, err := generateList()
 	if err != nil {
-		log.Fatal(err)
+		// Use a non-HTTP error so that the consumer do not use a
+		// malformed list.
+		log.Print(err.Error())
+		return
 	}
-	defer f.Close()
 
-	// Override the current content
-	if err := f.Truncate(0); err != nil {
-		log.Fatal(err)
-	}
+	fmt.Fprint(w, list)
+}
 
-	// Fetch and parse the zone content from lists
+func generateList() (string, error) {
 	c := make(chan string)
 	for _, list := range lists {
 		go handle(list, c)
 	}
 
-	// Write the zones
+	var zones []string
 	for range lists {
-		if _, err = f.WriteString(<-c); err != nil {
-			log.Fatal(err)
-		}
+		zones = append(zones, <-c)
 	}
+
+	return strings.Join(zones, "\n"), nil
 }
 
 func handle(url string, zone chan string) {