-
Notifications
You must be signed in to change notification settings - Fork 0
/
core.go
68 lines (56 loc) · 1.3 KB
/
core.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package npad
import (
"net/http"
"paepcke.de/logsec"
)
const (
_root = "/"
_qr = "/qr/"
_plain = "/plain/"
_magic = "/magic/"
_diag = "/diag/"
_src = "/src/"
_favicon = "/i.svg"
_download = "/download/"
_empty = ""
_linefeed = "\n"
_space = " "
)
// start ...
func start() {
// start logging
logsec.LogDaemon(c.Log)
// bind ports before priv drop
listener, err := getTLSConf()
if err != nil {
logsec.ShowErr("[fatal] unable to bind to address [" + c.ListenAddr + "] [" + err.Error() + "]")
return
}
// drop privs
if logsec.Chroot(c.Chroot) {
// setup mux
mux := http.NewServeMux()
// handler
mux.Handle(_root, getStartHandler())
mux.Handle(_download, getDownloadHandler())
mux.Handle(_qr, getQRHandler())
mux.Handle(_plain, getPlainHandler())
mux.Handle(_magic, getMagicHandler())
mux.Handle(_diag, getDiagHandler())
mux.Handle(_src, getSourceCodeHandler())
mux.Handle(_favicon, getFavIconHandler())
//
httpsrv := &http.Server{
Handler: mux,
}
// store gc
go storeAutoGC()
// setup keys, store, ux elements
configure()
// serve requestes
err = httpsrv.Serve(listener)
e := ("[shutdown] [fatal] [server error] [" + err.Error() + "]") // no recover after priv drop & crash
logsec.LogErr <- e
logsec.ShowErr(e)
}
}