13
"github.com/pkg/errors"
14
"github.com/wal-g/tracelog"
17
type GpgKeyExportError struct {
21
func NewGpgKeyExportError(text string) GpgKeyExportError {
22
return GpgKeyExportError{errors.Errorf("Got error while exporting gpg key: '%s'", text)}
25
func (err GpgKeyExportError) Error() string {
26
return fmt.Sprintf(tracelog.GetErrorFormatter(), err.error)
32
type CachedKey struct {
33
KeyID string `json:"keyId"`
34
Body []byte `json:"body"`
39
func GetPubRingArmor(keyID string) ([]byte, error) {
41
var cacheFilename string
43
usr, err := user.Current()
45
cacheFilename = filepath.Join(usr.HomeDir, ".walg_key_cache")
46
file, err := os.ReadFile(cacheFilename)
49
err = json.Unmarshal(file, &cache)
50
tracelog.ErrorLogger.PrintOnError(err)
51
if err == nil && cache.KeyID == keyID && len(cache.Body) > 0 {
52
return cache.Body, nil
57
cmd := exec.Command(GpgBin, "-a", "--export", keyID)
58
var stderr bytes.Buffer
60
out, err := cmd.Output()
65
return nil, NewGpgKeyExportError(strings.TrimSpace(stderr.String()))
70
marshal, err := json.Marshal(&cache)
71
if err == nil && len(cacheFilename) > 0 {
72
err = os.WriteFile(cacheFilename, marshal, 0644)
73
tracelog.ErrorLogger.PrintOnError(err)
79
func GetSecretRingArmor(keyID string) ([]byte, error) {
80
out, err := exec.Command(GpgBin, "-a", "--export-secret-key", keyID).Output()