grim/hgkeeper
Clone
Summary
Browse
Changes
Graph
Remove the mercurial 6.1 pin from the container image
23 months ago, Gary Kramlich
653b933ba715
Remove the mercurial 6.1 pin from the container image
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
)
}
}