diff --git a/registry/handlers/app.go b/registry/handlers/app.go index a40a4df3..76c63080 100644 --- a/registry/handlers/app.go +++ b/registry/handlers/app.go @@ -58,10 +58,11 @@ type App struct { Config *configuration.Configuration - router *mux.Router // main application router, configured with dispatchers - driver storagedriver.StorageDriver // driver maintains the app global storage driver instance. - registry distribution.Namespace // registry is the primary registry backend for the app instance. - accessController auth.AccessController // main access controller for application + router *mux.Router // main application router, configured with dispatchers + driver storagedriver.StorageDriver // driver maintains the app global storage driver instance. + registry distribution.Namespace // registry is the primary registry backend for the app instance. + repoRemover distribution.RepositoryRemover // repoRemover provides ability to delete repos + accessController auth.AccessController // main access controller for application // httpHost is a parsed representation of the http.host parameter from // the configuration. Only the Scheme and Host fields are used. @@ -320,6 +321,11 @@ func NewApp(ctx context.Context, config *configuration.Configuration) *App { app.isCache = true dcontext.GetLogger(app).Info("Registry configured as a proxy cache to ", config.Proxy.RemoteURL) } + var ok bool + app.repoRemover, ok = app.registry.(distribution.RepositoryRemover) + if !ok { + dcontext.GetLogger(app).Warnf("Registry does not implement RempositoryRemover. Will not be able to delete repos and tags") + } return app } @@ -696,8 +702,9 @@ func (app *App) dispatcher(dispatch dispatchFunc) http.Handler { } // assign and decorate the authorized repository with an event bridge. - context.Repository = notifications.Listen( + context.Repository, context.App.repoRemover = notifications.Listen( repository, + context.App.repoRemover, app.eventBridge(context, r)) context.Repository, err = applyRepoMiddleware(app, context.Repository, app.Config.Middleware["repository"])