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  }