Compare commits

..

2 Commits

Author SHA1 Message Date
Roberto Hidalgo
3d84f46112 diff with --redacted 2023-01-15 15:16:37 -06:00
Roberto Hidalgo
b3e189fa8d prevent diff from tripping on formatting 2023-01-15 02:19:05 -06:00
8 changed files with 41 additions and 10 deletions

View File

@ -34,9 +34,15 @@ var Diff = &command.Command{
}, },
}, },
}, },
"redacted": {
Description: "Compare redacted versions",
Type: "bool",
Default: false,
},
}, },
Action: func(cmd *command.Command) error { Action: func(cmd *command.Command) error {
paths := cmd.Arguments[0].ToValue().([]string) paths := cmd.Arguments[0].ToValue().([]string)
redacted := cmd.Options["redacted"].ToValue().(bool)
for _, path := range paths { for _, path := range paths {
local, err := config.Load(path, false) local, err := config.Load(path, false)
@ -44,7 +50,7 @@ var Diff = &command.Command{
return err return err
} }
if err := local.DiffRemote(path, cmd.Cobra.OutOrStdout(), cmd.Cobra.OutOrStderr()); err != nil { if err := local.DiffRemote(path, redacted, cmd.Cobra.OutOrStdout(), cmd.Cobra.OutOrStderr()); err != nil {
return err return err
} }
} }

View File

@ -54,7 +54,7 @@ var Flush = &command.Command{
} }
if cmd.Options["redact"].ToValue().(bool) { if cmd.Options["redact"].ToValue().(bool) {
if err := cfg.AsFile(path); err != nil { if err := cfg.AsFile(path, config.OutputModeRedacted); err != nil {
return err return err
} }
} }

View File

@ -42,7 +42,8 @@ func Update(vault, name string, item *op.Item) error {
} }
if remote.GetValue("password") == item.GetValue("password") { if remote.GetValue("password") == item.GetValue("password") {
logrus.Warn("item is already up to date") logrus.Debugf("remote %s\nlocal %s", remote.GetValue("password"), item.GetValue("password"))
logrus.Warnf("item %s/%s is already up to date", item.Vault.ID, item.Title)
return nil return nil
} }

View File

@ -156,13 +156,19 @@ func (cfg *Config) Merge(other *Config) error {
return cfg.Tree.Merge(other.Tree) return cfg.Tree.Merge(other.Tree)
} }
func (cfg *Config) DiffRemote(path string, stdout io.Writer, stderr io.Writer) error { func (cfg *Config) DiffRemote(path string, redacted bool, stdout, stderr io.Writer) error {
logrus.Debugf("loading remote for %s", path)
remote, err := Load(path, true) remote, err := Load(path, true)
if err != nil { if err != nil {
return err return err
} }
localBytes, err := cfg.AsYAML(OutputModeNoComments, OutputModeSorted, OutputModeNoConfig) modes := []OutputMode{OutputModeNoComments, OutputModeSorted, OutputModeNoConfig, OutputModeStandardYAML}
if redacted {
modes = append(modes, OutputModeRedacted)
}
localBytes, err := cfg.AsYAML(modes...)
if err != nil { if err != nil {
return err return err
} }
@ -173,7 +179,7 @@ func (cfg *Config) DiffRemote(path string, stdout io.Writer, stderr io.Writer) e
} }
defer cleanupLocalDiff() defer cleanupLocalDiff()
remoteBytes, err := remote.AsYAML(OutputModeNoComments, OutputModeSorted) remoteBytes, err := remote.AsYAML(modes...)
if err != nil { if err != nil {
return err return err
} }

View File

@ -195,6 +195,23 @@ func (e *Entry) asNode() *yaml.Node {
n.FootComment = e.FootComment n.FootComment = e.FootComment
} }
if yamlOutput.Has(OutputModeStandardYAML) {
if e.IsScalar() {
if len(e.Path) >= 0 {
if !strings.Contains(n.Value, "\n") {
n.Style &= yaml.FoldedStyle
} else {
n.Style &= yaml.FlowStyle
}
}
} else {
n.Style = yaml.FoldedStyle | yaml.LiteralStyle
for _, v := range n.Content {
v.Style = yaml.FlowStyle
}
}
}
return n return n
} }
@ -209,7 +226,7 @@ func (e *Entry) MarshalYAML() (*yaml.Node, error) {
} }
n.Content = append(n.Content, node) n.Content = append(n.Content, node)
} }
} else { } else if e.Kind == yaml.MappingNode || e.Kind == yaml.DocumentNode {
entries := e.Contents() entries := e.Contents()
if len(entries)%2 != 0 { if len(entries)%2 != 0 {
return nil, fmt.Errorf("cannot decode odd numbered contents list: %s", e.Path) return nil, fmt.Errorf("cannot decode odd numbered contents list: %s", e.Path)

View File

@ -14,7 +14,7 @@ import (
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )
const warnChecksumMismatch = `1Password item changed and checksum was not updated. const warnChecksumMismatch = `1Password item %s changed and checksum was not updated.
Expected: %s Expected: %s
found : %s` found : %s`
@ -111,7 +111,7 @@ func FromOP(item *op.Item) (*Config, error) {
} }
if cs := checksum(item.Fields); cs != item.GetValue("password") { if cs := checksum(item.Fields); cs != item.GetValue("password") {
logrus.Warnf(warnChecksumMismatch, cs, item.GetValue("password")) logrus.Warnf(warnChecksumMismatch, fmt.Sprintf("%s/%s", item.Vault.ID, item.Title), cs, item.GetValue("password"))
} }
err := cfg.Tree.FromOP(item.Fields) err := cfg.Tree.FromOP(item.Fields)
return cfg, err return cfg, err

View File

@ -43,6 +43,8 @@ const (
OutputModeSorted OutputMode = 4 OutputModeSorted OutputMode = 4
// OutputModeNoConfig does not output the _config key if any. // OutputModeNoConfig does not output the _config key if any.
OutputModeNoConfig OutputMode = 8 OutputModeNoConfig OutputMode = 8
// OutputModeStandardYAML formats strings and arrays uniformly
OutputModeStandardYAML OutputMode = 16
) )
var defaultYamlOutput = &outputOptions{OutputModeRoundTrip} var defaultYamlOutput = &outputOptions{OutputModeRoundTrip}

View File

@ -97,7 +97,6 @@ func checksum(fields []*op.ItemField) string {
sort.Strings(df) sort.Strings(df)
newHash.Write([]byte(strings.Join(df, ""))) newHash.Write([]byte(strings.Join(df, "")))
checksum := newHash.Sum(nil) checksum := newHash.Sum(nil)
return fmt.Sprintf("%x", checksum) return fmt.Sprintf("%x", checksum)
} }