56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/alecthomas/kingpin"
|
|
"github.com/goji/httpauth"
|
|
)
|
|
|
|
type Configure struct {
|
|
Addr string
|
|
Root string
|
|
HttpAuth string
|
|
Cert string
|
|
Key string
|
|
}
|
|
|
|
var gcfg = Configure{}
|
|
|
|
func parseFlags() {
|
|
kingpin.HelpFlag.Short('h')
|
|
kingpin.Flag("addr", "listen address").Short('a').Default(":8000").StringVar(&gcfg.Addr)
|
|
kingpin.Flag("cert", "tls cert.pem path").StringVar(&gcfg.Cert)
|
|
kingpin.Flag("key", "tls key.pem path").StringVar(&gcfg.Key)
|
|
kingpin.Flag("httpauth", "HTTP basic auth (ex: user:pass)").Default("").StringVar(&gcfg.HttpAuth)
|
|
|
|
kingpin.Parse()
|
|
}
|
|
|
|
func main() {
|
|
parseFlags()
|
|
|
|
var hdlr http.Handler = NewHTTPStaticServer("./")
|
|
|
|
// HTTP Basic Authentication
|
|
userpass := strings.SplitN(gcfg.HttpAuth, ":", 2)
|
|
if len(userpass) == 2 {
|
|
user, pass := userpass[0], userpass[1]
|
|
hdlr = httpauth.SimpleBasicAuth(user, pass)(hdlr)
|
|
}
|
|
|
|
http.Handle("/", hdlr)
|
|
log.Printf("Listening on addr: %s\n", strconv.Quote(gcfg.Addr))
|
|
|
|
var err error
|
|
if gcfg.Key != "" && gcfg.Cert != "" {
|
|
err = http.ListenAndServeTLS(gcfg.Addr, gcfg.Cert, gcfg.Key, nil)
|
|
} else {
|
|
err = http.ListenAndServe(gcfg.Addr, nil)
|
|
}
|
|
log.Fatal(err)
|
|
}
|