github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/filegen/httpd/api.go (about) 1 package httpd 2 3 import ( 4 "fmt" 5 "io" 6 "net" 7 "net/http" 8 9 "github.com/Cloud-Foundations/Dominator/lib/filegen" 10 "github.com/Cloud-Foundations/Dominator/lib/html" 11 ) 12 13 type HtmlWriter interface { 14 WriteHtml(writer io.Writer) 15 } 16 17 var htmlWriters []HtmlWriter 18 19 type state struct { 20 manager *filegen.Manager 21 } 22 23 func StartServer(portNum uint, manager *filegen.Manager, daemon bool) error { 24 listener, err := net.Listen("tcp", fmt.Sprintf(":%d", portNum)) 25 if err != nil { 26 return err 27 } 28 myState := &state{manager} 29 html.HandleFunc("/", myState.statusHandler) 30 html.HandleFunc("/listGenerators", myState.listGeneratorsHandler) 31 if daemon { 32 go http.Serve(listener, nil) 33 } else { 34 http.Serve(listener, nil) 35 } 36 return nil 37 } 38 39 func AddHtmlWriter(htmlWriter HtmlWriter) { 40 htmlWriters = append(htmlWriters, htmlWriter) 41 }