signature.go

 1package config
 2
 3import (
 4	"os"
 5	"path/filepath"
 6)
 7
 8// signatureFile returns the full path to the signature file.
 9func signatureFile() (string, error) {
10	dir, err := configDir()
11	if err != nil {
12		return "", err
13	}
14	return filepath.Join(dir, "signature.txt"), nil
15}
16
17// LoadSignature loads the signature from the signature file.
18func LoadSignature() (string, error) {
19	path, err := signatureFile()
20	if err != nil {
21		return "", err
22	}
23	data, err := SecureReadFile(path)
24	if err != nil {
25		if os.IsNotExist(err) {
26			return "", nil
27		}
28		return "", err
29	}
30	return string(data), nil
31}
32
33// SaveSignature saves the signature to the signature file.
34func SaveSignature(signature string) error {
35	path, err := signatureFile()
36	if err != nil {
37		return err
38	}
39	if err := os.MkdirAll(filepath.Dir(path), 0700); err != nil {
40		return err
41	}
42	return SecureWriteFile(path, []byte(signature), 0600)
43}
44
45// HasSignature checks if a signature file exists and is non-empty.
46func HasSignature() bool {
47	sig, err := LoadSignature()
48	if err != nil {
49		return false
50	}
51	return sig != ""
52}