9c88801a12
Back in the before time, the best practices surrounding usage of Context weren't quite worked out. We defined our own type to make usage easier. As this packaged was used elsewhere, it make it more and more challenging to integrate with the forked `Context` type. Now that it is available in the standard library, we can just use that one directly. To make usage more consistent, we now use `dcontext` when referring to the distribution context package. Signed-off-by: Stephen J Day <stephen.day@docker.com>
55 lines
1.7 KiB
Go
55 lines
1.7 KiB
Go
package middleware
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/docker/distribution"
|
|
"github.com/docker/distribution/registry/storage"
|
|
)
|
|
|
|
// InitFunc is the type of a RegistryMiddleware factory function and is
|
|
// used to register the constructor for different RegistryMiddleware backends.
|
|
type InitFunc func(ctx context.Context, registry distribution.Namespace, options map[string]interface{}) (distribution.Namespace, error)
|
|
|
|
var middlewares map[string]InitFunc
|
|
var registryoptions []storage.RegistryOption
|
|
|
|
// Register is used to register an InitFunc for
|
|
// a RegistryMiddleware backend with the given name.
|
|
func Register(name string, initFunc InitFunc) error {
|
|
if middlewares == nil {
|
|
middlewares = make(map[string]InitFunc)
|
|
}
|
|
if _, exists := middlewares[name]; exists {
|
|
return fmt.Errorf("name already registered: %s", name)
|
|
}
|
|
|
|
middlewares[name] = initFunc
|
|
|
|
return nil
|
|
}
|
|
|
|
// Get constructs a RegistryMiddleware with the given options using the named backend.
|
|
func Get(ctx context.Context, name string, options map[string]interface{}, registry distribution.Namespace) (distribution.Namespace, error) {
|
|
if middlewares != nil {
|
|
if initFunc, exists := middlewares[name]; exists {
|
|
return initFunc(ctx, registry, options)
|
|
}
|
|
}
|
|
|
|
return nil, fmt.Errorf("no registry middleware registered with name: %s", name)
|
|
}
|
|
|
|
// RegisterOptions adds more options to RegistryOption list. Options get applied before
|
|
// any other configuration-based options.
|
|
func RegisterOptions(options ...storage.RegistryOption) error {
|
|
registryoptions = append(registryoptions, options...)
|
|
return nil
|
|
}
|
|
|
|
// GetRegistryOptions returns list of RegistryOption.
|
|
func GetRegistryOptions() []storage.RegistryOption {
|
|
return registryoptions
|
|
}
|