mirror of https://github.com/0xERR0R/blocky.git
refactor: switch HTTP API to Service pattern
This commit is contained in:
parent
e1c717be70
commit
1515e17f0f
|
@ -53,7 +53,7 @@ type CacheControl interface {
|
|||
FlushCaches(ctx context.Context)
|
||||
}
|
||||
|
||||
func RegisterOpenAPIEndpoints(router chi.Router, impl StrictServerInterface) {
|
||||
func registerOpenAPIEndpoints(router chi.Router, impl StrictServerInterface) {
|
||||
middleware := []StrictMiddlewareFunc{ctxWithHTTPRequestMiddleware}
|
||||
|
||||
HandlerFromMuxWithBaseURL(NewStrictHandler(impl, middleware), router, "/api")
|
||||
|
|
|
@ -105,7 +105,7 @@ var _ = Describe("API implementation tests", func() {
|
|||
Describe("RegisterOpenAPIEndpoints", func() {
|
||||
It("adds routes", func() {
|
||||
rtr := chi.NewRouter()
|
||||
RegisterOpenAPIEndpoints(rtr, sut)
|
||||
registerOpenAPIEndpoints(rtr, sut)
|
||||
|
||||
Expect(rtr.Routes()).ShouldNot(BeEmpty())
|
||||
})
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xERR0R/blocky/config"
|
||||
"github.com/0xERR0R/blocky/service"
|
||||
"github.com/0xERR0R/blocky/util"
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
|
||||
// Service implements service.HTTPService.
|
||||
type Service struct {
|
||||
service.HTTPInfo
|
||||
}
|
||||
|
||||
func NewService(cfg config.APIService, server StrictServerInterface) *Service {
|
||||
endpoints := util.ConcatSlices(
|
||||
service.EndpointsFromAddrs(service.HTTPProtocol, cfg.Addrs.HTTP),
|
||||
service.EndpointsFromAddrs(service.HTTPSProtocol, cfg.Addrs.HTTPS),
|
||||
)
|
||||
|
||||
s := &Service{
|
||||
HTTPInfo: service.HTTPInfo{
|
||||
Info: service.Info{
|
||||
Name: "API",
|
||||
Endpoints: endpoints,
|
||||
},
|
||||
|
||||
Mux: chi.NewMux(),
|
||||
},
|
||||
}
|
||||
|
||||
registerOpenAPIEndpoints(s.Mux, server)
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *Service) Merge(other service.Service) (service.Merger, error) {
|
||||
return service.MergeHTTP(s, other)
|
||||
}
|
|
@ -271,6 +271,7 @@ type Config struct {
|
|||
// The `yaml` struct tags are just for manual testing,
|
||||
// and require replacing `yaml:"-"` in Config to work.
|
||||
type Services struct {
|
||||
API APIService `yaml:"control-api"`
|
||||
DoH DoHService `yaml:"dns-over-https"`
|
||||
Metrics MetricsService `yaml:"metrics"`
|
||||
}
|
||||
|
@ -625,6 +626,7 @@ func (cfg *Config) CopyPortsToServices() {
|
|||
}
|
||||
|
||||
cfg.Services = Services{
|
||||
API: APIService{Addrs: httpAddrs},
|
||||
DoH: DoHService{Addrs: httpAddrs},
|
||||
Metrics: MetricsService{Addrs: httpAddrs},
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package config
|
||||
|
||||
type (
|
||||
APIService httpService
|
||||
DoHService httpService
|
||||
MetricsService httpService
|
||||
)
|
||||
|
|
|
@ -6,7 +6,6 @@ import (
|
|||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/0xERR0R/blocky/api"
|
||||
"github.com/0xERR0R/blocky/config"
|
||||
"github.com/0xERR0R/blocky/service"
|
||||
"github.com/0xERR0R/blocky/util"
|
||||
|
@ -23,7 +22,7 @@ type httpMiscService struct {
|
|||
service.HTTPInfo
|
||||
}
|
||||
|
||||
func newHTTPMiscService(cfg *config.Config, openAPIImpl api.StrictServerInterface) *httpMiscService {
|
||||
func newHTTPMiscService(cfg *config.Config) *httpMiscService {
|
||||
endpoints := util.ConcatSlices(
|
||||
service.EndpointsFromAddrs(service.HTTPProtocol, cfg.Ports.HTTP),
|
||||
service.EndpointsFromAddrs(service.HTTPSProtocol, cfg.Ports.HTTPS),
|
||||
|
@ -36,7 +35,7 @@ func newHTTPMiscService(cfg *config.Config, openAPIImpl api.StrictServerInterfac
|
|||
Endpoints: endpoints,
|
||||
},
|
||||
|
||||
Mux: createHTTPRouter(cfg, openAPIImpl),
|
||||
Mux: createHTTPRouter(cfg),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/0xERR0R/blocky/api"
|
||||
"github.com/0xERR0R/blocky/config"
|
||||
"github.com/0xERR0R/blocky/log"
|
||||
"github.com/0xERR0R/blocky/metrics"
|
||||
|
@ -188,8 +189,9 @@ func (s *Server) createServices() ([]service.Service, error) {
|
|||
}
|
||||
|
||||
res := []service.Service{
|
||||
newHTTPMiscService(s.cfg, openAPIImpl),
|
||||
newHTTPMiscService(s.cfg),
|
||||
newDoHService(s.cfg.Services.DoH, s.handleReq),
|
||||
api.NewService(s.cfg.Services.API, openAPIImpl),
|
||||
metrics.NewService(s.cfg.Services.Metrics, s.cfg.Prometheus),
|
||||
}
|
||||
|
||||
|
|
|
@ -60,11 +60,9 @@ func (s *Server) Query(
|
|||
return s.resolve(ctx, req)
|
||||
}
|
||||
|
||||
func createHTTPRouter(cfg *config.Config, openAPIImpl api.StrictServerInterface) *chi.Mux {
|
||||
func createHTTPRouter(cfg *config.Config) *chi.Mux {
|
||||
router := chi.NewRouter()
|
||||
|
||||
api.RegisterOpenAPIEndpoints(router, openAPIImpl)
|
||||
|
||||
configureDebugHandler(router)
|
||||
|
||||
configureDocsHandler(router)
|
||||
|
|
Loading…
Reference in New Issue