-
Notifications
You must be signed in to change notification settings - Fork 3
/
uiserver.go
99 lines (78 loc) · 2.35 KB
/
uiserver.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package uiserver
import (
"net/http"
"github.com/efritz/nacelle"
basehttp "github.com/efritz/nacelle/base/http"
"github.com/efritz/nacelle/logging"
"github.com/go-chi/chi"
"github.com/aphistic/softcopy/internal/app/softcopy-server/importers"
"github.com/aphistic/softcopy/internal/app/softcopy-server/uiserver/backend"
"github.com/aphistic/softcopy/internal/app/softcopy-server/uiserver/frontend"
"github.com/aphistic/softcopy/internal/pkg/api"
)
func NewProcess() nacelle.Process {
return basehttp.NewServer(&uiServer{})
}
type uiServer struct {
Logger nacelle.Logger `service:"logger"`
API *api.Client `service:"api"`
Importers *importers.ImportRunners `service:"importers"`
tpl *backend.Template
}
func (us *uiServer) Init(config nacelle.Config, server *http.Server) error {
us.Logger = us.Logger.WithFields(logging.Fields{
"service": "uiserver",
})
backendLoader, err := backend.NewLoader(
backend.LoaderLogger(us.Logger),
)
if err != nil {
return err
}
frontendLoader, err := frontend.NewLoader(
frontend.LoaderLogger(us.Logger),
)
if err != nil {
return err
}
r := chi.NewRouter()
// Home page controller
hc := newHomeController(backendLoader, us.Logger)
r.Mount("/", hc.Router())
// Static assets controller
sc := newStaticController(frontendLoader, us.Logger)
r.Mount("/static", sc.Router())
r.HandleFunc("/importers", us.GetImporters)
for _, importer := range us.Importers.Runners() {
webImporter, ok := importer.(importers.ImporterWebHandler)
if !ok {
continue
}
us.Logger.Info("Setting up web interface for %s", importer.Name())
r.Route("/importers/"+importer.Name(), webImporter.SetupWebHandlers)
}
server.Handler = r
return nil
}
func (us *uiServer) GetImporters(w http.ResponseWriter, r *http.Request) {
t, err := us.tpl.Template("templates/importers.html.tpl")
if err != nil {
us.Logger.Error("could not find template: %s", err)
return
}
err = t.Execute(w, us.Importers.Runners())
if err != nil {
us.Logger.Error("could not execute template: %s", err)
return
}
}
// func (us *uiServer) GetImporter(w http.ResponseWriter, r *http.Request) {
// vars := mux.Vars(r)
// name, ok := vars["name"]
// if !ok {
// us.Logger.Error("could not get importer name")
// return
// }
// path := vars["path"]
// us.Logger.Debug("got name: %s, path: %s", name, path)
// }