grim/hgkeeper
Clone
Summary
Browse
Changes
Graph
Add a ChangeLog
22 months ago, Gary Kramlich
a85cd09a6ba0
Add a ChangeLog
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
)
}
}