75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"browser.local/platform/config"
|
|
"browser.local/platform/repo"
|
|
"browser.local/platform/service"
|
|
)
|
|
|
|
func NewRouter() http.Handler {
|
|
router, err := NewRouterFromConfig(config.Load())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return router
|
|
}
|
|
|
|
func NewRouterFromConfig(cfg config.Config) (http.Handler, error) {
|
|
store, err := storeFromConfig(cfg)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
logStore, err := logStoreFromConfig(cfg)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
core := service.NewCoreServiceWithLogStore(store, logStore)
|
|
if err := core.SeedLocalPlatformAdmin(); err != nil {
|
|
return nil, err
|
|
}
|
|
return NewRouterWithCore(core), nil
|
|
}
|
|
|
|
func NewRouterWithCore(core service.Core) http.Handler {
|
|
handlers := newCoreHandlers(core)
|
|
mux := http.NewServeMux()
|
|
mux.HandleFunc("/healthz", HealthHandler)
|
|
handlers.register(mux)
|
|
return mux
|
|
}
|
|
|
|
func storeFromConfig(cfg config.Config) (repo.Store, error) {
|
|
switch strings.ToLower(strings.TrimSpace(cfg.StorageBackend)) {
|
|
case "", "file":
|
|
return repo.NewFileStore(cfg.MetadataPath)
|
|
case "memory":
|
|
return repo.NewMemoryStore(), nil
|
|
case "mysql":
|
|
return repo.NewMySQLStore(cfg.MySQLDSN)
|
|
default:
|
|
return nil, fmt.Errorf("unsupported platform storage backend %q", cfg.StorageBackend)
|
|
}
|
|
}
|
|
|
|
func logStoreFromConfig(cfg config.Config) (service.LogBodyStore, error) {
|
|
backend := strings.ToLower(strings.TrimSpace(cfg.LogBodyBackend))
|
|
if backend == "" {
|
|
backend = strings.ToLower(strings.TrimSpace(cfg.StorageBackend))
|
|
if backend == "mysql" {
|
|
backend = "file"
|
|
}
|
|
}
|
|
switch backend {
|
|
case "", "file":
|
|
return service.NewFileLogBodyStore(cfg.LogDir)
|
|
case "memory":
|
|
return service.NewMemoryLogBodyStore(), nil
|
|
default:
|
|
return nil, fmt.Errorf("unsupported platform log body backend %q", backend)
|
|
}
|
|
}
|