mirror of
https://github.com/project-zot/zot.git
synced 2024-12-30 22:34:13 -05:00
Add an 'enable' flag in the server configuration to enable gql-based searches
"extensions": { "search": { "enable": true } }
This commit is contained in:
parent
c1dd7878e4
commit
792e82cbdf
10 changed files with 69 additions and 13 deletions
|
@ -12,6 +12,7 @@
|
|||
},
|
||||
"extensions": {
|
||||
"search": {
|
||||
"enable": true,
|
||||
"cve": {
|
||||
"updateInterval": "24h"
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
},
|
||||
"extensions": {
|
||||
"search": {
|
||||
"enable": true,
|
||||
"cve": {
|
||||
"updateInterval": "24h"
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@ func (rh *RouteHandler) SetupRoutes() {
|
|||
rh.c.Router.PathPrefix("/swagger/v2/").Methods("GET").Handler(httpSwagger.WrapHandler)
|
||||
// Setup Extensions Routes
|
||||
if rh.c.Config != nil && rh.c.Config.Extensions != nil {
|
||||
ext.SetupRoutes(rh.c.Router, rh.c.StoreController, rh.c.Log)
|
||||
ext.SetupRoutes(rh.c.Config.Extensions, rh.c.Router, rh.c.StoreController, rh.c.Log)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -308,7 +308,8 @@ func TestServerCVEResponse(t *testing.T) {
|
|||
UpdateInterval: 2,
|
||||
}
|
||||
searchConfig := &ext.SearchConfig{
|
||||
CVE: cveConfig,
|
||||
CVE: cveConfig,
|
||||
Enable: true,
|
||||
}
|
||||
c.Config.Extensions = &ext.ExtensionConfig{
|
||||
Search: searchConfig,
|
||||
|
|
|
@ -287,7 +287,7 @@ func TestServerResponse(t *testing.T) {
|
|||
config := api.NewConfig()
|
||||
config.HTTP.Port = port
|
||||
config.Extensions = &extensions.ExtensionConfig{
|
||||
Search: &extensions.SearchConfig{},
|
||||
Search: &extensions.SearchConfig{Enable: true},
|
||||
}
|
||||
c := api.NewController(config)
|
||||
dir, err := ioutil.TempDir("", "oci-repo-test")
|
||||
|
|
|
@ -8,7 +8,8 @@ type ExtensionConfig struct {
|
|||
|
||||
type SearchConfig struct {
|
||||
// CVE search
|
||||
CVE *CVEConfig
|
||||
CVE *CVEConfig
|
||||
Enable bool
|
||||
}
|
||||
|
||||
type CVEConfig struct {
|
||||
|
|
|
@ -33,7 +33,7 @@ func downloadTrivyDB(dbDir string, log log.Logger, updateInterval time.Duration)
|
|||
|
||||
// EnableExtensions ...
|
||||
func EnableExtensions(extension *ExtensionConfig, log log.Logger, rootDir string) {
|
||||
if extension.Search != nil && extension.Search.CVE != nil {
|
||||
if extension.Search != nil && extension.Search.Enable && extension.Search.CVE != nil {
|
||||
defaultUpdateInterval, _ := time.ParseDuration("2h")
|
||||
|
||||
if extension.Search.CVE.UpdateInterval < defaultUpdateInterval {
|
||||
|
@ -46,7 +46,7 @@ func EnableExtensions(extension *ExtensionConfig, log log.Logger, rootDir string
|
|||
err := downloadTrivyDB(rootDir, log,
|
||||
extension.Search.CVE.UpdateInterval)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
log.Error().Err(err).Msg("error while downloading TrivyDB")
|
||||
}
|
||||
}()
|
||||
} else {
|
||||
|
@ -55,9 +55,13 @@ func EnableExtensions(extension *ExtensionConfig, log log.Logger, rootDir string
|
|||
}
|
||||
|
||||
// SetupRoutes ...
|
||||
func SetupRoutes(router *mux.Router, storeController storage.StoreController, log log.Logger) {
|
||||
func SetupRoutes(extension *ExtensionConfig, router *mux.Router, storeController storage.StoreController,
|
||||
log log.Logger) {
|
||||
log.Info().Msg("setting up extensions routes")
|
||||
resConfig := search.GetResolverConfig(log, storeController)
|
||||
router.PathPrefix("/query").Methods("GET", "POST").
|
||||
Handler(gqlHandler.NewDefaultServer(search.NewExecutableSchema(resConfig)))
|
||||
|
||||
if extension.Search != nil && extension.Search.Enable {
|
||||
resConfig := search.GetResolverConfig(log, storeController)
|
||||
router.PathPrefix("/query").Methods("GET", "POST").
|
||||
Handler(gqlHandler.NewDefaultServer(search.NewExecutableSchema(resConfig)))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,6 @@ func EnableExtensions(extension *ExtensionConfig, log log.Logger, rootDir string
|
|||
}
|
||||
|
||||
// SetupRoutes ...
|
||||
func SetupRoutes(router *mux.Router, storeController storage.StoreController, log log.Logger) {
|
||||
func SetupRoutes(extension *ExtensionConfig, router *mux.Router, storeController storage.StoreController, log log.Logger) {
|
||||
log.Warn().Msg("skipping setting up extensions routes because given zot binary doesn't support any extensions, please build zot full binary for this feature")
|
||||
}
|
||||
|
|
|
@ -547,7 +547,8 @@ func TestCVESearch(t *testing.T) {
|
|||
UpdateInterval: updateDuration,
|
||||
}
|
||||
searchConfig := &ext.SearchConfig{
|
||||
CVE: cveConfig,
|
||||
CVE: cveConfig,
|
||||
Enable: true,
|
||||
}
|
||||
c.Config.Extensions = &ext.ExtensionConfig{
|
||||
Search: searchConfig,
|
||||
|
|
|
@ -169,7 +169,7 @@ func TestDigestSearchHTTP(t *testing.T) {
|
|||
config.HTTP.Port = Port1
|
||||
config.Storage.RootDirectory = rootDir
|
||||
config.Extensions = &ext.ExtensionConfig{
|
||||
Search: &ext.SearchConfig{},
|
||||
Search: &ext.SearchConfig{Enable: true},
|
||||
}
|
||||
|
||||
c := api.NewController(config)
|
||||
|
@ -288,3 +288,50 @@ func TestDigestSearchHTTP(t *testing.T) {
|
|||
So(len(responseStruct.Errors), ShouldEqual, 1)
|
||||
})
|
||||
}
|
||||
|
||||
func TestDigestSearchDisabled(t *testing.T) {
|
||||
Convey("Test disabling image search", t, func() {
|
||||
dir, err := ioutil.TempDir("", "digest_test")
|
||||
So(err, ShouldBeNil)
|
||||
config := api.NewConfig()
|
||||
config.HTTP.Port = Port1
|
||||
config.Storage.RootDirectory = dir
|
||||
config.Extensions = &ext.ExtensionConfig{
|
||||
Search: &ext.SearchConfig{Enable: false},
|
||||
}
|
||||
|
||||
c := api.NewController(config)
|
||||
|
||||
go func() {
|
||||
// this blocks
|
||||
if err := c.Run(); err != nil {
|
||||
return
|
||||
}
|
||||
}()
|
||||
|
||||
// wait till ready
|
||||
for {
|
||||
_, err := resty.R().Get(BaseURL1)
|
||||
if err == nil {
|
||||
break
|
||||
}
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
}
|
||||
|
||||
// shut down server
|
||||
defer func() {
|
||||
ctx := context.Background()
|
||||
_ = c.Server.Shutdown(ctx)
|
||||
}()
|
||||
|
||||
resp, err := resty.R().Get(BaseURL1 + "/v2/")
|
||||
So(resp, ShouldNotBeNil)
|
||||
So(err, ShouldBeNil)
|
||||
So(resp.StatusCode(), ShouldEqual, 200)
|
||||
|
||||
resp, err = resty.R().Get(BaseURL1 + "/query")
|
||||
So(resp, ShouldNotBeNil)
|
||||
So(err, ShouldBeNil)
|
||||
So(resp.StatusCode(), ShouldEqual, 404)
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue