github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/csms/v1/secrets/requests.go (about)

     1  package secrets
     2  
     3  import "github.com/chnsz/golangsdk"
     4  
     5  var RequestOpts = golangsdk.RequestOpts{
     6  	MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
     7  }
     8  
     9  type CreateSecretOpts struct {
    10  	Name         string `json:"name" required:"true"`
    11  	KmsKeyID     string `json:"kms_key_id,omitempty"`
    12  	Description  string `json:"description,omitempty"`
    13  	SecretBinary string `json:"secret_binary,omitempty" xor:"SecretString"`
    14  	SecretString string `json:"secret_string,omitempty" xor:"SecretBinary"`
    15  }
    16  
    17  func Create(c *golangsdk.ServiceClient, opts CreateSecretOpts) (*Secret, error) {
    18  	b, err := golangsdk.BuildRequestBody(opts, "")
    19  	if err != nil {
    20  		return nil, err
    21  	}
    22  
    23  	var rst golangsdk.Result
    24  	_, err = c.Post(rootURL(c), b, &rst.Body, &golangsdk.RequestOpts{
    25  		MoreHeaders: RequestOpts.MoreHeaders,
    26  	})
    27  	if err == nil {
    28  		var r SecretRst
    29  		rst.ExtractInto(&r)
    30  		return &r.Secret, nil
    31  	}
    32  	return nil, err
    33  }
    34  
    35  func Get(c *golangsdk.ServiceClient, secretName string) (*Secret, error) {
    36  	var rst golangsdk.Result
    37  	_, err := c.Get(resourceURL(c, secretName), &rst.Body, &golangsdk.RequestOpts{
    38  		MoreHeaders: RequestOpts.MoreHeaders,
    39  	})
    40  	if err == nil {
    41  		var r SecretRst
    42  		rst.ExtractInto(&r)
    43  		return &r.Secret, nil
    44  	}
    45  	return nil, err
    46  }
    47  
    48  type UpdateSecretOpts struct {
    49  	KmsKeyID    string  `json:"kms_key_id,omitempty"`
    50  	Description *string `json:"description,omitempty"`
    51  }
    52  
    53  func Update(c *golangsdk.ServiceClient, secretName string, opts UpdateSecretOpts) (*Secret, error) {
    54  	b, err := golangsdk.BuildRequestBody(opts, "")
    55  	if err != nil {
    56  		return nil, err
    57  	}
    58  
    59  	var rst golangsdk.Result
    60  	_, err = c.Put(resourceURL(c, secretName), b, &rst.Body, &golangsdk.RequestOpts{
    61  		MoreHeaders: RequestOpts.MoreHeaders,
    62  	})
    63  	if err == nil {
    64  		var r SecretRst
    65  		rst.ExtractInto(&r)
    66  		return &r.Secret, nil
    67  	}
    68  	return nil, err
    69  }
    70  
    71  func Delete(c *golangsdk.ServiceClient, secretName string) error {
    72  	_, err := c.Delete(resourceURL(c, secretName), &golangsdk.RequestOpts{
    73  		MoreHeaders: RequestOpts.MoreHeaders,
    74  	})
    75  	return err
    76  }
    77  
    78  type CreateVersionOpts struct {
    79  	SecretBinary  string   `json:"secret_binary,omitempty" xor:"SecretString"`
    80  	SecretString  string   `json:"secret_string,omitempty" xor:"SecretBinary"`
    81  	VersionStages []string `json:"version_stages,omitempty"`
    82  	ExpireTime    int      `json:"expire_time,omitempty"`
    83  }
    84  
    85  func CreateSecretVersion(c *golangsdk.ServiceClient, secretName string, opts CreateVersionOpts) (*VersionMetadata, error) {
    86  	b, err := golangsdk.BuildRequestBody(opts, "")
    87  	if err != nil {
    88  		return nil, err
    89  	}
    90  
    91  	var rst golangsdk.Result
    92  	_, err = c.Post(versionRootURL(c, secretName), b, &rst.Body, &golangsdk.RequestOpts{
    93  		MoreHeaders: RequestOpts.MoreHeaders,
    94  	})
    95  	if err == nil {
    96  		var r struct {
    97  			VersionMetadata VersionMetadata `json:"version_metadata"`
    98  		}
    99  		rst.ExtractInto(&r)
   100  		return &r.VersionMetadata, nil
   101  	}
   102  	return nil, err
   103  }
   104  
   105  func ShowSecretVersion(c *golangsdk.ServiceClient, secretName string, versionId string) (*Version, error) {
   106  	var rst golangsdk.Result
   107  	_, err := c.Get(resourceVersionURL(c, secretName, versionId), &rst.Body, &golangsdk.RequestOpts{
   108  		MoreHeaders: RequestOpts.MoreHeaders,
   109  	})
   110  	if err == nil {
   111  		var r struct {
   112  			Version Version `json:"version"`
   113  		}
   114  		rst.ExtractInto(&r)
   115  		return &r.Version, nil
   116  	}
   117  	return nil, err
   118  }
   119  
   120  type UpdateVersionOpts struct {
   121  	ExpireTime int `json:"expire_time" required:"true"`
   122  }
   123  
   124  // UpdateSecretVersion only support update expire_time field.
   125  // The current method can only update secret in the ENABLED state
   126  func UpdateSecretVersion(c *golangsdk.ServiceClient, secretName string, versionId string, opts UpdateVersionOpts) (*Version, error) {
   127  	b, err := golangsdk.BuildRequestBody(opts, "")
   128  	if err != nil {
   129  		return nil, err
   130  	}
   131  
   132  	var rst golangsdk.Result
   133  	_, err = c.Put(resourceVersionURL(c, secretName, versionId), b, &rst.Body, &golangsdk.RequestOpts{
   134  		MoreHeaders: RequestOpts.MoreHeaders,
   135  	})
   136  	if err == nil {
   137  		var r struct {
   138  			Version Version `json:"version"`
   139  		}
   140  		rst.ExtractInto(&r)
   141  		return &r.Version, nil
   142  	}
   143  	return nil, err
   144  }
   145  
   146  // ListSecretVersions 查询凭据的版本列表
   147  func ListSecretVersions(c *golangsdk.ServiceClient, secretName string) ([]VersionMetadata, error) {
   148  	var rst golangsdk.Result
   149  	_, err := c.Get(versionRootURL(c, secretName), &rst.Body, &golangsdk.RequestOpts{
   150  		MoreHeaders: RequestOpts.MoreHeaders,
   151  	})
   152  	if err == nil {
   153  		var r struct {
   154  			VersionMetadatas []VersionMetadata `json:"version_metadatas"`
   155  		}
   156  		rst.ExtractInto(&r)
   157  		return r.VersionMetadatas, nil
   158  	}
   159  	return nil, err
   160  }