github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/controller/usersecrets/register.go (about)

     1  // Copyright 2023 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package usersecrets
     5  
     6  import (
     7  	"reflect"
     8  
     9  	"github.com/juju/errors"
    10  
    11  	"github.com/juju/juju/apiserver/common/secrets"
    12  	apiservererrors "github.com/juju/juju/apiserver/errors"
    13  	"github.com/juju/juju/apiserver/facade"
    14  	"github.com/juju/juju/secrets/provider"
    15  	"github.com/juju/juju/state"
    16  )
    17  
    18  // Register is called to expose a package of facades onto a given registry.
    19  func Register(registry facade.FacadeRegistry) {
    20  	registry.MustRegister("UserSecretsManager", 1, func(ctx facade.Context) (facade.Facade, error) {
    21  		return NewUserSecretsManager(ctx)
    22  	}, reflect.TypeOf((*UserSecretsManager)(nil)))
    23  }
    24  
    25  // NewUserSecretsManager creates a UserSecretsManager.
    26  func NewUserSecretsManager(context facade.Context) (*UserSecretsManager, error) {
    27  	if !context.Auth().AuthController() {
    28  		return nil, apiservererrors.ErrPerm
    29  	}
    30  	model, err := context.State().Model()
    31  	if err != nil {
    32  		return nil, errors.Trace(err)
    33  	}
    34  
    35  	backendConfigGetter := func() (*provider.ModelBackendConfigInfo, error) {
    36  		return secrets.AdminBackendConfigInfo(secrets.SecretsModel(model))
    37  	}
    38  
    39  	return &UserSecretsManager{
    40  		authorizer:          context.Auth(),
    41  		resources:           context.Resources(),
    42  		authTag:             context.Auth().GetAuthTag(),
    43  		controllerUUID:      context.State().ControllerUUID(),
    44  		modelUUID:           context.State().ModelUUID(),
    45  		secretsState:        state.NewSecrets(context.State()),
    46  		backendConfigGetter: backendConfigGetter,
    47  	}, nil
    48  }