@@ -271,8 +271,8 @@ type Secret struct {
271271 // Name: name of the secret.
272272 Name string `json:"name"`
273273 // Status: current status of the secret.
274- // * `ready`: the secret is ready .
275- // * `locked`: the secret is locked .
274+ // * `ready`: the secret can be read, modified and deleted .
275+ // * `locked`: no action can be performed on the secret. This status can only be applied and removed by Scaleway .
276276 // Default value: ready
277277 Status SecretStatus `json:"status"`
278278 // CreatedAt: date and time of the secret's creation.
@@ -287,6 +287,8 @@ type Secret struct {
287287 Description * string `json:"description"`
288288 // IsManaged: returns `true` for secrets that are managed by another product.
289289 IsManaged bool `json:"is_managed"`
290+ // IsProtected: returns `true` for protected secrets that cannot be deleted.
291+ IsProtected bool `json:"is_protected"`
290292 // Type: type of the secret.
291293 // See `Secret.Type` enum for description of values.
292294 // Default value: unknown_secret_type
@@ -624,6 +626,96 @@ func (s *API) DeleteSecret(req *DeleteSecretRequest, opts ...scw.RequestOption)
624626 return nil
625627}
626628
629+ type ProtectSecretRequest struct {
630+ // Region: region to target. If none is passed will use default region from the config.
631+ Region scw.Region `json:"-"`
632+ // SecretID: ID of the secret to protect.
633+ SecretID string `json:"-"`
634+ }
635+
636+ // ProtectSecret: protect a secret.
637+ // Protect a given secret specified by the `secret_id` parameter. A protected secret can be read and modified but cannot be deleted.
638+ func (s * API ) ProtectSecret (req * ProtectSecretRequest , opts ... scw.RequestOption ) (* Secret , error ) {
639+ var err error
640+
641+ if req .Region == "" {
642+ defaultRegion , _ := s .client .GetDefaultRegion ()
643+ req .Region = defaultRegion
644+ }
645+
646+ if fmt .Sprint (req .Region ) == "" {
647+ return nil , errors .New ("field Region cannot be empty in request" )
648+ }
649+
650+ if fmt .Sprint (req .SecretID ) == "" {
651+ return nil , errors .New ("field SecretID cannot be empty in request" )
652+ }
653+
654+ scwReq := & scw.ScalewayRequest {
655+ Method : "POST" ,
656+ Path : "/secret-manager/v1alpha1/regions/" + fmt .Sprint (req .Region ) + "/secrets/" + fmt .Sprint (req .SecretID ) + "/protect" ,
657+ Headers : http.Header {},
658+ }
659+
660+ err = scwReq .SetBody (req )
661+ if err != nil {
662+ return nil , err
663+ }
664+
665+ var resp Secret
666+
667+ err = s .client .Do (scwReq , & resp , opts ... )
668+ if err != nil {
669+ return nil , err
670+ }
671+ return & resp , nil
672+ }
673+
674+ type UnprotectSecretRequest struct {
675+ // Region: region to target. If none is passed will use default region from the config.
676+ Region scw.Region `json:"-"`
677+ // SecretID: ID of the secret to unprotect.
678+ SecretID string `json:"-"`
679+ }
680+
681+ // UnprotectSecret: unprotect a secret.
682+ // Unprotect a given secret specified by the `secret_id` parameter. An unprotected secret can be read, modified and deleted.
683+ func (s * API ) UnprotectSecret (req * UnprotectSecretRequest , opts ... scw.RequestOption ) (* Secret , error ) {
684+ var err error
685+
686+ if req .Region == "" {
687+ defaultRegion , _ := s .client .GetDefaultRegion ()
688+ req .Region = defaultRegion
689+ }
690+
691+ if fmt .Sprint (req .Region ) == "" {
692+ return nil , errors .New ("field Region cannot be empty in request" )
693+ }
694+
695+ if fmt .Sprint (req .SecretID ) == "" {
696+ return nil , errors .New ("field SecretID cannot be empty in request" )
697+ }
698+
699+ scwReq := & scw.ScalewayRequest {
700+ Method : "POST" ,
701+ Path : "/secret-manager/v1alpha1/regions/" + fmt .Sprint (req .Region ) + "/secrets/" + fmt .Sprint (req .SecretID ) + "/unprotect" ,
702+ Headers : http.Header {},
703+ }
704+
705+ err = scwReq .SetBody (req )
706+ if err != nil {
707+ return nil , err
708+ }
709+
710+ var resp Secret
711+
712+ err = s .client .Do (scwReq , & resp , opts ... )
713+ if err != nil {
714+ return nil , err
715+ }
716+ return & resp , nil
717+ }
718+
627719type AddSecretOwnerRequest struct {
628720 // Region: region to target. If none is passed will use default region from the config.
629721 Region scw.Region `json:"-"`
0 commit comments