grim/hgkeeper

dc46af0b583b
Spit out a warning if we find a duplicated key.

We're going to continue the existing behavior of overwriting the keys to not
break potential set ups for the time being.

Fixes HGKEEPER-22
package http
import (
"net/http"
"path/filepath"
log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/hgkeeper/hg"
"keep.imfreedom.org/grim/hgkeeper/hgweb"
)
type Server struct {
listenAddr string
server *http.Server
hgw *hgweb.HGWeb
externalHostname string
externalPort string
}
func NewServer(listenAddr string, disableHGWeb bool, externalHostname, externalPort string) (*Server, error) {
s := &Server{
listenAddr: listenAddr,
server: &http.Server{
Addr: listenAddr,
},
externalHostname: externalHostname,
externalPort: externalPort,
}
if !disableHGWeb {
s.hgw = hgweb.New()
}
return s, nil
}
func (s *Server) Listen() error {
templatesDir, err := hg.TemplatesDir()
if err != nil {
return err
}
staticPath := filepath.Join(templatesDir, "static")
log.Infof("serving static files from %s", staticPath)
fileServer := http.FileServer(http.Dir(staticPath))
mux := http.NewServeMux()
mux.HandleFunc("/hgk/health", healthHandler)
if s.externalHostname != "" {
mux.Handle("/hgk/authorized_keys", authorizedKeysHandler(s.externalHostname, s.externalPort))
log.Infof("added /hgk/authorized_keys endpoint with external hostname %s and export port %s", s.externalHostname, s.externalPort)
} else {
log.Infof("no external hostname specified, not adding /hgk/authorized_keys endpoint")
}
mux.Handle("/static/", http.StripPrefix("/static", fileServer))
if s.hgw != nil {
log.Infof("enabling HGWeb CGI server")
hgwHandler, err := s.hgw.Handler()
if err != nil {
return err
}
mux.Handle("/", hgwHandler)
} else {
log.Infof("not enabling HGWeb CGI server as requested")
}
s.server.Handler = Logger(mux)
log.Infof("http listening on %s", s.listenAddr)
return s.server.ListenAndServe()
}
func (s *Server) Close() {
if s.hgw != nil {
if err := s.hgw.Close(); err != nil {
log.Warnf("failed to close hgweb: %v", err)
}
}
if err := s.server.Close(); err != nil {
log.Warnf("failed to shutdown http server: %v", err)
}
}