grim/hgkeeper

Start of hgweb support
feature/hgweb
2019-09-17, Gary Kramlich
45b57bfc4382
Start of hgweb support
package hgweb
import (
"io/ioutil"
"net/http"
"net/http/cgi"
"os"
log "github.com/sirupsen/logrus"
)
type Server struct {
server *http.Server
cgiPath string
}
func NewServer(listenAddr string) (*Server, error) {
return &Server{
server: &http.Server{
Addr: listenAddr,
},
}, nil
}
func (s *Server) Startup() error {
cgiPath, err := ioutil.TempFile("", "hgkeeper-hgweb-*.cgi")
if err != nil {
return err
}
log.Warnf("path: %q", cgiPath.Name())
s.cgiPath = cgiPath.Name()
s.server.Handler = &cgi.Handler{Path: s.cgiPath}
return s.server.ListenAndServe()
}
func (s *Server) Shutdown() {
if err := os.Remove(s.cgiPath); err != nil {
log.Warnf("failed to remove temporary cgi file %q: %v", s.cgiPath, err)
}
if err := s.server.Close(); err != nil {
log.Warnf("failed to shutdown http server: %v", err)
}
}