github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/api/controller/usersecrets/client.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 "github.com/juju/errors" 8 9 "github.com/juju/juju/api/base" 10 apiwatcher "github.com/juju/juju/api/watcher" 11 "github.com/juju/juju/core/secrets" 12 "github.com/juju/juju/core/watcher" 13 "github.com/juju/juju/rpc/params" 14 ) 15 16 // Client is the api client for the UserSecretsManager facade. 17 type Client struct { 18 facade base.FacadeCaller 19 } 20 21 // NewClient creates a secret backends manager api client. 22 func NewClient(caller base.APICaller) *Client { 23 return &Client{ 24 facade: base.NewFacadeCaller(caller, "UserSecretsManager"), 25 } 26 } 27 28 // WatchRevisionsToPrune returns a watcher that triggers on secret 29 // obsolete revision changes. 30 func (c *Client) WatchRevisionsToPrune() (watcher.StringsWatcher, error) { 31 var result params.StringsWatchResult 32 err := c.facade.FacadeCall("WatchRevisionsToPrune", nil, &result) 33 if err != nil { 34 return nil, err 35 } 36 if result.Error != nil { 37 return nil, params.TranslateWellKnownError(result.Error) 38 } 39 w := apiwatcher.NewStringsWatcher(c.facade.RawAPICaller(), result) 40 return w, nil 41 } 42 43 // DeleteRevisions deletes the specified revisions of the secret. 44 func (c *Client) DeleteRevisions(uri *secrets.URI, revisions ...int) error { 45 if uri == nil { 46 return errors.Errorf("uri cannot be nil") 47 } 48 if len(revisions) == 0 { 49 return errors.Errorf("at least one revision must be specified") 50 } 51 arg := params.DeleteSecretArg{ 52 URI: uri.String(), 53 Revisions: revisions, 54 } 55 56 var results params.ErrorResults 57 err := c.facade.FacadeCall("DeleteRevisions", params.DeleteSecretArgs{Args: []params.DeleteSecretArg{arg}}, &results) 58 if err != nil { 59 return errors.Trace(err) 60 } 61 if len(results.Results) != 1 { 62 return errors.Errorf("unexpected number of results: %d", len(results.Results)) 63 } 64 result := results.Results[0] 65 if result.Error != nil { 66 return params.TranslateWellKnownError(result.Error) 67 } 68 return nil 69 }