blob: f5e42d0a17fdaee986458a86b2daab0ab1f0e05b [file] [log] [blame]
package main
import (
"flag"
"fmt"
"mime"
"net/http"
"strings"
"code.hackerspace.pl/hscloud/go/mirko"
"github.com/golang/glog"
"code.hackerspace.pl/hscloud/hswaw/site/static"
)
var (
flagSitePublic string
)
type service struct {
}
func main() {
flag.StringVar(&flagSitePublic, "site_public", "0.0.0.0:8080", "Address at which to serve public HTTP requests")
flag.Parse()
mi := mirko.New()
if err := mi.Listen(); err != nil {
glog.Exitf("Listen failed: %v", err)
}
s := &service{}
mux := http.NewServeMux()
s.registerHTTP(mux)
go func() {
glog.Infof("Listening for public HTTP at %v", flagSitePublic)
if err := http.ListenAndServe(flagSitePublic, mux); err != nil {
glog.Exit(err)
}
}()
if err := mi.Serve(); err != nil {
glog.Exitf("Serve failed: %v", err)
}
<-mi.Done()
}
func (s *service) handleHTTPStatic(w http.ResponseWriter, r *http.Request) {
path := strings.TrimPrefix(r.URL.Path, "/")
staticPath := fmt.Sprintf("hswaw/site/%s", path)
if data, ok := static.Data[staticPath]; ok {
parts := strings.Split(path, ".")
ext := fmt.Sprintf(".%s", parts[len(parts)-1])
t := mime.TypeByExtension(ext)
w.Header().Set("Content-Type", t)
w.Write(data)
} else {
http.NotFound(w, r)
}
}
func (s *service) registerHTTP(mux *http.ServeMux) {
mux.HandleFunc("/static/", s.handleHTTPStatic)
mux.HandleFunc("/about", s.handleAbout)
mux.HandleFunc("/about_en", s.handleAboutEn)
}