package main import ( "bytes" "encoding/hex" "fmt" "io/ioutil" "math/rand" "net/http" "time" ) func init() { rand.Seed(time.Now().UnixNano()) } func Keys() chan string { keys := make(chan string) go func() { for { keys <- Key() } }() return keys } func Key() string { b := make([]byte, 16) for i := range b { b[i] = byte(rand.Int()) } return hex.EncodeToString(b[:]) } func Check(uri, key string) error { resp, err := http.Get(uri + "?key=" + key) if err != nil { return err } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { return err } body = bytes.TrimSpace(body) if string(body) != key { return fmt.Errorf("%v down", uri) } return nil }