|
@@ -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) {
|