forked from tildetown/bbj2
serve HTTP
parent
a87c941bb3
commit
9b3ef7dc34
|
@ -4,6 +4,7 @@ import (
|
|||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
)
|
||||
|
||||
|
@ -15,16 +16,26 @@ type iostreams struct {
|
|||
type Opts struct {
|
||||
ConfigPath string
|
||||
IO iostreams
|
||||
Log func(string)
|
||||
Logf func(string, ...interface{})
|
||||
}
|
||||
|
||||
func main() {
|
||||
var configFlag = flag.String("config", "config.yml", "A path to a config file.")
|
||||
flag.Parse()
|
||||
opts := Opts{
|
||||
ConfigPath: *configFlag,
|
||||
IO: iostreams{
|
||||
io := iostreams{
|
||||
Err: os.Stderr,
|
||||
Out: os.Stdout,
|
||||
}
|
||||
opts := Opts{
|
||||
ConfigPath: *configFlag,
|
||||
IO: io,
|
||||
// TODO use real logger
|
||||
Log: func(s string) {
|
||||
fmt.Fprintln(io.Out, s)
|
||||
},
|
||||
Logf: func(s string, args ...interface{}) {
|
||||
fmt.Fprintf(io.Out, s, args...)
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -41,7 +52,27 @@ func _main(opts Opts) error {
|
|||
os.Exit(1)
|
||||
}
|
||||
|
||||
fmt.Printf("DBG %#v\n", cfg.InstanceName)
|
||||
setupAPI(opts, *cfg)
|
||||
|
||||
// TODO TLS or SSL or something
|
||||
opts.Logf("starting server at %s:%d\n", cfg.Host, cfg.Port)
|
||||
if err := http.ListenAndServe(fmt.Sprintf("%s:%d", cfg.Host, cfg.Port), nil); err != nil {
|
||||
return fmt.Errorf("http server exited with error: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func handler(opts Opts, cfg Config, f http.HandlerFunc) http.HandlerFunc {
|
||||
// TODO make this more real
|
||||
return func(w http.ResponseWriter, req *http.Request) {
|
||||
opts.Log(req.URL.Path)
|
||||
f(w, req)
|
||||
}
|
||||
}
|
||||
|
||||
func setupAPI(opts Opts, cfg Config) {
|
||||
http.HandleFunc("/instance", handler(opts, cfg, func(w http.ResponseWriter, req *http.Request) {
|
||||
io.WriteString(w, cfg.InstanceName)
|
||||
}))
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue