2024-02-08 04:48:59 -05:00
// Copyright (c) The OpenTofu Authors
// SPDX-License-Identifier: MPL-2.0
// Copyright (c) 2023 HashiCorp, Inc.
2023-05-02 11:33:06 -04:00
// SPDX-License-Identifier: MPL-2.0
2023-01-10 11:24:48 -05:00
package renderers
2023-01-09 05:40:47 -05:00
import (
"fmt"
2023-01-09 14:38:25 -05:00
2023-09-20 07:35:35 -04:00
"github.com/opentofu/opentofu/internal/command/jsonformat/computed"
"github.com/opentofu/opentofu/internal/plans"
2023-01-09 05:40:47 -05:00
)
2023-01-10 11:24:48 -05:00
var _ computed . DiffRenderer = ( * sensitiveRenderer ) ( nil )
func Sensitive ( change computed . Diff , beforeSensitive , afterSensitive bool ) computed . DiffRenderer {
2023-01-09 05:55:55 -05:00
return & sensitiveRenderer {
2023-01-10 11:24:48 -05:00
inner : change ,
2023-01-09 05:40:47 -05:00
beforeSensitive : beforeSensitive ,
afterSensitive : afterSensitive ,
}
}
type sensitiveRenderer struct {
2023-01-10 11:24:48 -05:00
inner computed . Diff
2023-01-09 05:40:47 -05:00
beforeSensitive bool
afterSensitive bool
}
2023-01-10 11:24:48 -05:00
func ( renderer sensitiveRenderer ) RenderHuman ( diff computed . Diff , indent int , opts computed . RenderHumanOpts ) string {
2024-07-22 05:58:57 -04:00
// If the -show-sensitive argument is set, then invoke RenderHuman with the inner computed.Diff to display sensitive values.
if opts . ShowSensitive {
return renderer . inner . RenderHuman ( indent , opts )
}
2023-01-12 11:59:07 -05:00
return fmt . Sprintf ( "(sensitive value)%s%s" , nullSuffix ( diff . Action , opts ) , forcesReplacement ( diff . Replace , opts ) )
2023-01-09 05:40:47 -05:00
}
2023-01-12 10:47:06 -05:00
func ( renderer sensitiveRenderer ) WarningsHuman ( diff computed . Diff , indent int , opts computed . RenderHumanOpts ) [ ] string {
2023-01-10 11:24:48 -05:00
if ( renderer . beforeSensitive == renderer . afterSensitive ) || renderer . inner . Action == plans . Create || renderer . inner . Action == plans . Delete {
2023-01-09 05:40:47 -05:00
// Only display warnings for sensitive values if they are changing from
2023-01-09 06:41:24 -05:00
// being sensitive or to being sensitive and if they are not being
2023-01-09 05:40:47 -05:00
// destroyed or created.
return [ ] string { }
}
var warning string
if renderer . beforeSensitive {
2023-01-12 10:47:06 -05:00
warning = opts . Colorize . Color ( fmt . Sprintf ( " # [yellow]Warning[reset]: this attribute value will no longer be marked as sensitive\n%s # after applying this change." , formatIndent ( indent ) ) )
2023-01-09 05:40:47 -05:00
} else {
2023-01-12 10:47:06 -05:00
warning = opts . Colorize . Color ( fmt . Sprintf ( " # [yellow]Warning[reset]: this attribute value will be marked as sensitive and will not\n%s # display in UI output after applying this change." , formatIndent ( indent ) ) )
2023-01-09 05:40:47 -05:00
}
2023-01-10 11:24:48 -05:00
if renderer . inner . Action == plans . NoOp {
2023-01-09 05:40:47 -05:00
return [ ] string { fmt . Sprintf ( "%s The value is unchanged." , warning ) }
}
return [ ] string { warning }
}