package captiveportal import ( "net/http" ) type Liar interface { Handle(os OS, w http.ResponseWriter, r *http.Request) } type LiarFunc func(os OS, w http.ResponseWriter, r *http.Request) func (f LiarFunc) Handle(os OS, w http.ResponseWriter, r *http.Request) { f(os, w, r) } func HandleAndroid(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNoContent) } func HandleApple(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) // nolint: errcheck w.Write([]byte("SuccessSuccess")) } func HandleWindows(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) // nolint: errcheck w.Write([]byte("Microsoft NCSI")) } // nolint: gochecknoglobals var defaultLiars = map[OS]http.HandlerFunc{ OSAndroid: http.HandlerFunc(HandleAndroid), OSApple: http.HandlerFunc(HandleApple), OSWindows: http.HandlerFunc(HandleWindows), } func DefaultLiar(os OS, w http.ResponseWriter, r *http.Request) { liar, exists := defaultLiars[os] if !exists { w.WriteHeader(http.StatusNoContent) return } liar.ServeHTTP(w, r) }