first commit
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user