grim/hgkeeper
Clone
Summary
Browse
Changes
Graph
Remove the explicit write access of admins to the hgkeeper repo.
23 months ago, Gary Kramlich
5389b17b4002
Remove the explicit write access of admins to the hgkeeper repo.
Fixes HGKEEPER-21
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
)
}
}