github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/controller/usersecretsdrain/register.go (about) 1 // Copyright 2023 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package usersecretsdrain 5 6 import ( 7 "reflect" 8 9 "github.com/juju/errors" 10 11 commonsecrets "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("UserSecretsDrain", 1, func(ctx facade.Context) (facade.Facade, error) { 21 return newUserSecretsDrainAPI(ctx) 22 }, reflect.TypeOf((*SecretsDrainAPI)(nil))) 23 } 24 25 // newUserSecretsDrainAPI creates a SecretsDrainAPI for draining user secrets. 26 func newUserSecretsDrainAPI(context facade.Context) (*SecretsDrainAPI, error) { 27 if !context.Auth().AuthController() { 28 return nil, apiservererrors.ErrPerm 29 } 30 leadershipChecker, err := context.LeadershipChecker() 31 if err != nil { 32 return nil, errors.Trace(err) 33 } 34 model, err := context.State().Model() 35 if err != nil { 36 return nil, errors.Trace(err) 37 } 38 authTag := model.ModelTag() 39 commonDrainAPI, err := commonsecrets.NewSecretsDrainAPI( 40 authTag, 41 context.Auth(), 42 context.Resources(), 43 leadershipChecker, 44 commonsecrets.SecretsModel(model), 45 state.NewSecrets(context.State()), 46 context.State(), 47 ) 48 if err != nil { 49 return nil, errors.Trace(err) 50 } 51 52 secretBackendConfigGetter := func(backendIDs []string, wantAll bool) (*provider.ModelBackendConfigInfo, error) { 53 return commonsecrets.BackendConfigInfo(commonsecrets.SecretsModel(model), true, backendIDs, wantAll, authTag, leadershipChecker) 54 } 55 secretBackendDrainConfigGetter := func(backendID string) (*provider.ModelBackendConfigInfo, error) { 56 return commonsecrets.DrainBackendConfigInfo(backendID, commonsecrets.SecretsModel(model), authTag, leadershipChecker) 57 } 58 59 return &SecretsDrainAPI{ 60 SecretsDrainAPI: commonDrainAPI, 61 drainConfigGetter: secretBackendDrainConfigGetter, 62 backendConfigGetter: secretBackendConfigGetter, 63 secretsState: state.NewSecrets(context.State()), 64 }, nil 65 }