@@ -302,10 +302,11 @@ func (enum *SecretType) UnmarshalJSON(data []byte) error {
302302type SecretVersionStatus string
303303
304304const (
305- SecretVersionStatusUnknownStatus = SecretVersionStatus ("unknown_status" )
306- SecretVersionStatusEnabled = SecretVersionStatus ("enabled" )
307- SecretVersionStatusDisabled = SecretVersionStatus ("disabled" )
308- SecretVersionStatusDeleted = SecretVersionStatus ("deleted" )
305+ SecretVersionStatusUnknownStatus = SecretVersionStatus ("unknown_status" )
306+ SecretVersionStatusEnabled = SecretVersionStatus ("enabled" )
307+ SecretVersionStatusDisabled = SecretVersionStatus ("disabled" )
308+ SecretVersionStatusDeleted = SecretVersionStatus ("deleted" )
309+ SecretVersionStatusScheduledForDeletion = SecretVersionStatus ("scheduled_for_deletion" )
309310)
310311
311312func (enum SecretVersionStatus ) String () string {
@@ -322,6 +323,7 @@ func (enum SecretVersionStatus) Values() []SecretVersionStatus {
322323 "enabled" ,
323324 "disabled" ,
324325 "deleted" ,
326+ "scheduled_for_deletion" ,
325327 }
326328}
327329
@@ -412,6 +414,7 @@ type SecretVersion struct {
412414 // Status: * `unknown_status`: the version is in an invalid state.
413415 // * `enabled`: the version is accessible.
414416 // * `disabled`: the version is not accessible but can be enabled.
417+ // * `scheduled_for_deletion`: the version is scheduled for deletion. It will be deleted in 7 days.
415418 // * `deleted`: the version is permanently deleted. It is not possible to recover it.
416419 // Default value: unknown_status
417420 Status SecretVersionStatus `json:"status"`
@@ -433,6 +436,9 @@ type SecretVersion struct {
433436
434437 // EphemeralProperties: returns the version's expiration date, whether it expires after being accessed once, and the action to perform (disable or delete) once the version expires.
435438 EphemeralProperties * EphemeralProperties `json:"ephemeral_properties"`
439+
440+ // DeletionRequestedAt: returns the time at which deletion was requested.
441+ DeletionRequestedAt * time.Time `json:"deletion_requested_at"`
436442}
437443
438444// Secret: secret.
@@ -485,6 +491,9 @@ type Secret struct {
485491 // UsedBy: list of Scaleway resources that can access and manage the secret.
486492 UsedBy []Product `json:"used_by"`
487493
494+ // DeletionRequestedAt: returns the time at which deletion was requested.
495+ DeletionRequestedAt * time.Time `json:"deletion_requested_at"`
496+
488497 // Region: region of the secret.
489498 Region scw.Region `json:"region"`
490499}
@@ -892,6 +901,9 @@ type ListSecretsRequest struct {
892901 // Type: filter by secret type (optional).
893902 // Default value: unknown_type
894903 Type SecretType `json:"-"`
904+
905+ // ScheduledForDeletion: filter by whether the secret was scheduled for deletion / not scheduled for deletion (optional).
906+ ScheduledForDeletion * bool `json:"-"`
895907}
896908
897909// ListSecretsResponse: list secrets response.
@@ -972,6 +984,24 @@ type ProtectSecretRequest struct {
972984 SecretID string `json:"-"`
973985}
974986
987+ // RestoreSecretRequest: restore secret request.
988+ type RestoreSecretRequest struct {
989+ // Region: region to target. If none is passed will use default region from the config.
990+ Region scw.Region `json:"-"`
991+
992+ SecretID string `json:"-"`
993+ }
994+
995+ // RestoreSecretVersionRequest: restore secret version request.
996+ type RestoreSecretVersionRequest struct {
997+ // Region: region to target. If none is passed will use default region from the config.
998+ Region scw.Region `json:"-"`
999+
1000+ SecretID string `json:"-"`
1001+
1002+ Revision string `json:"-"`
1003+ }
1004+
9751005// SSHKey: ssh key.
9761006type SSHKey struct {
9771007 // SSHPrivateKey: the private SSH key.
@@ -1205,6 +1235,7 @@ func (s *API) ListSecrets(req *ListSecretsRequest, opts ...scw.RequestOption) (*
12051235 parameter .AddToQuery (query , "path" , req .Path )
12061236 parameter .AddToQuery (query , "ephemeral" , req .Ephemeral )
12071237 parameter .AddToQuery (query , "type" , req .Type )
1238+ parameter .AddToQuery (query , "scheduled_for_deletion" , req .ScheduledForDeletion )
12081239
12091240 if fmt .Sprint (req .Region ) == "" {
12101241 return nil , errors .New ("field Region cannot be empty in request" )
@@ -1801,3 +1832,79 @@ func (s *API) ListSecretTypes(req *ListSecretTypesRequest, opts ...scw.RequestOp
18011832 }
18021833 return & resp , nil
18031834}
1835+
1836+ // RestoreSecretVersion: Restore a secret's version specified by the `region`, `secret_id` and `revision` parameters.
1837+ func (s * API ) RestoreSecretVersion (req * RestoreSecretVersionRequest , opts ... scw.RequestOption ) (* SecretVersion , error ) {
1838+ var err error
1839+
1840+ if req .Region == "" {
1841+ defaultRegion , _ := s .client .GetDefaultRegion ()
1842+ req .Region = defaultRegion
1843+ }
1844+
1845+ if fmt .Sprint (req .Region ) == "" {
1846+ return nil , errors .New ("field Region cannot be empty in request" )
1847+ }
1848+
1849+ if fmt .Sprint (req .SecretID ) == "" {
1850+ return nil , errors .New ("field SecretID cannot be empty in request" )
1851+ }
1852+
1853+ if fmt .Sprint (req .Revision ) == "" {
1854+ return nil , errors .New ("field Revision cannot be empty in request" )
1855+ }
1856+
1857+ scwReq := & scw.ScalewayRequest {
1858+ Method : "POST" ,
1859+ Path : "/secret-manager/v1beta1/regions/" + fmt .Sprint (req .Region ) + "/secrets/" + fmt .Sprint (req .SecretID ) + "/versions/" + fmt .Sprint (req .Revision ) + "/restore" ,
1860+ }
1861+
1862+ err = scwReq .SetBody (req )
1863+ if err != nil {
1864+ return nil , err
1865+ }
1866+
1867+ var resp SecretVersion
1868+
1869+ err = s .client .Do (scwReq , & resp , opts ... )
1870+ if err != nil {
1871+ return nil , err
1872+ }
1873+ return & resp , nil
1874+ }
1875+
1876+ // RestoreSecret: Restore a secret and all its versions scheduled for deletion specified by the `region` and `secret_id` parameters.
1877+ func (s * API ) RestoreSecret (req * RestoreSecretRequest , opts ... scw.RequestOption ) (* Secret , error ) {
1878+ var err error
1879+
1880+ if req .Region == "" {
1881+ defaultRegion , _ := s .client .GetDefaultRegion ()
1882+ req .Region = defaultRegion
1883+ }
1884+
1885+ if fmt .Sprint (req .Region ) == "" {
1886+ return nil , errors .New ("field Region cannot be empty in request" )
1887+ }
1888+
1889+ if fmt .Sprint (req .SecretID ) == "" {
1890+ return nil , errors .New ("field SecretID cannot be empty in request" )
1891+ }
1892+
1893+ scwReq := & scw.ScalewayRequest {
1894+ Method : "POST" ,
1895+ Path : "/secret-manager/v1beta1/regions/" + fmt .Sprint (req .Region ) + "/secrets/" + fmt .Sprint (req .SecretID ) + "/restore" ,
1896+ }
1897+
1898+ err = scwReq .SetBody (req )
1899+ if err != nil {
1900+ return nil , err
1901+ }
1902+
1903+ var resp Secret
1904+
1905+ err = s .client .Do (scwReq , & resp , opts ... )
1906+ if err != nil {
1907+ return nil , err
1908+ }
1909+ return & resp , nil
1910+ }
0 commit comments