mirror of
https://github.com/gopasspw/gopass.git
synced 2026-10-13 22:49:08 +02:00
* [chore] Migrate to golangci-lint v2 Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * [chore] Fix more lint issues Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * [chore] Fix more lint issue Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * [chore] Fix more lint issues Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * [chore] Add more package comments. Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * [chore] Fix golangci-lint config and the remaining checks Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * [fix] Use Go 1.24 Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * [fix] Fix container builds Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * Fix more failing tests Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * Fix test failure Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * Fix another len assertion Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * Move location tests Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * [fix] Fix most remaining lint issues Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * [fix] Only run XDG specific tests on linux Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> * [fix] Attempt to address on source of flaky failures Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org> --------- Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
// Package secparse provides functions to parse secrets from various formats.
|
|
// It can parse secrets from legacy MIME format, YAML format, and AKV format.
|
|
package secparse
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/gopasspw/gopass/internal/out"
|
|
"github.com/gopasspw/gopass/pkg/debug"
|
|
"github.com/gopasspw/gopass/pkg/gopass"
|
|
"github.com/gopasspw/gopass/pkg/gopass/secrets"
|
|
)
|
|
|
|
// Parse tries to parse a secret. It will start with the most specific
|
|
// secrets type.
|
|
//
|
|
//nolint:ireturn
|
|
func Parse(in []byte) (gopass.Secret, error) {
|
|
var s gopass.Secret
|
|
|
|
var err error
|
|
|
|
s, err = parseLegacyMIME(in)
|
|
if err == nil {
|
|
debug.Log("parsed as MIME: %+v", s)
|
|
|
|
return s, nil
|
|
}
|
|
|
|
debug.Log("failed to parse as MIME: %s", out.Secret(err.Error()))
|
|
|
|
var permError *secrets.PermanentError
|
|
if errors.As(err, &permError) {
|
|
return secrets.ParseAKV(in), err
|
|
}
|
|
|
|
s, err = secrets.ParseYAML(in)
|
|
if err == nil {
|
|
debug.Log("parsed as YAML: %+v", s)
|
|
|
|
return s, nil
|
|
}
|
|
|
|
debug.Log("failed to parse as YAML: %s\n%s", err, out.Secret(string(in)))
|
|
|
|
s = secrets.ParseAKV(in)
|
|
debug.Log("parsed as AVK: %+v", s)
|
|
|
|
return s, nil
|
|
}
|
|
|
|
// MustParse parses a secret or panics. Should only be used for tests.
|
|
func MustParse(in string) gopass.Secret {
|
|
sec, err := Parse([]byte(in))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return sec
|
|
}
|