// Copyright (c) The OpenTofu Authors // SPDX-License-Identifier: MPL-2.0 // Copyright (c) 2023 HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package renderers import ( "fmt" "github.com/opentofu/opentofu/internal/command/jsonformat/computed" "github.com/opentofu/opentofu/internal/plans" ) var _ computed.DiffRenderer = (*sensitiveRenderer)(nil) func Sensitive(change computed.Diff, beforeSensitive, afterSensitive bool) computed.DiffRenderer { return &sensitiveRenderer{ inner: change, beforeSensitive: beforeSensitive, afterSensitive: afterSensitive, } } type sensitiveRenderer struct { inner computed.Diff beforeSensitive bool afterSensitive bool } func (renderer sensitiveRenderer) RenderHuman(diff computed.Diff, indent int, opts computed.RenderHumanOpts) string { // 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) } return fmt.Sprintf("(sensitive value)%s%s", nullSuffix(diff.Action, opts), forcesReplacement(diff.Replace, opts)) } func (renderer sensitiveRenderer) WarningsHuman(diff computed.Diff, indent int, opts computed.RenderHumanOpts) []string { if (renderer.beforeSensitive == renderer.afterSensitive) || renderer.inner.Action == plans.Create || renderer.inner.Action == plans.Delete { // Only display warnings for sensitive values if they are changing from // being sensitive or to being sensitive and if they are not being // destroyed or created. return []string{} } var warning string if renderer.beforeSensitive { 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))) } else { 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))) } if renderer.inner.Action == plans.NoOp { return []string{fmt.Sprintf("%s The value is unchanged.", warning)} } return []string{warning} }