1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
package cli
import (
"bufio"
"errors"
"fmt"
"io"
"os"
"strings"
"github.com/sirupsen/logrus"
)
// ReadPassphraseFile returns the first line of the specified path.
// For convenience, an empty string is returned if the path is empty.
func ReadPassphraseFile(path string) (string, error) {
if path == "" {
return "", nil
}
logrus.Debugf("Reading user-specified passphrase for signing from %s", path)
ppf, err := os.Open(path)
if err != nil {
return "", err
}
defer ppf.Close()
// Read the *first* line in the passphrase file, just as gpg(1) does.
buf, err := bufio.NewReader(ppf).ReadBytes('\n')
if err != nil && !errors.Is(err, io.EOF) {
return "", fmt.Errorf("reading passphrase file: %w", err)
}
return strings.TrimSuffix(string(buf), "\n"), nil
}
|