ccclip/internal/configfile/config.go
Mariano Uvalle c041a5feee Update to go 1.24 and add some logging.
Signed-off-by: Mariano Uvalle <u.g.a.mariano@gmail.com>
2025-05-10 13:59:51 -07:00

74 lines
1.7 KiB
Go

package configfile
import (
"crypto/ecdh"
"encoding/json"
"fmt"
"os"
"path"
"github.com/AYM1607/ccclip/pkg/crypto"
)
const FileName = "ccclip.yaml"
const PrivateKeyFileName = "private.key"
const PublicKeyFileName = "public.key"
type ConfigFile struct {
Email string `yaml:"email"`
DeviceId string `yaml:"deviceId"`
}
var Path string
func EnsureAndGet() (ConfigFile, error) {
err := os.MkdirAll(Path, os.FileMode(int(0660)))
if err != nil {
return ConfigFile{}, fmt.Errorf("could not create config directory: %w", err)
}
rawC, err := os.ReadFile(path.Join(Path, FileName))
if err != nil {
if os.IsNotExist(err) {
return ConfigFile{}, nil
}
return ConfigFile{}, fmt.Errorf("could not read current config file: %w", err)
}
var c ConfigFile
return c, json.Unmarshal(rawC, &c)
}
func Write(c ConfigFile) error {
err := os.MkdirAll(Path, os.FileMode(int(0660)))
if err != nil {
return err
}
rawC, err := json.Marshal(c)
if err != nil {
return fmt.Errorf("could not convert config to json")
}
err = os.WriteFile(path.Join(Path, FileName), rawC, os.FileMode(int(0660)))
if err != nil {
return fmt.Errorf("could not write file to config directory: %w", err)
}
return nil
}
func LoadPrivateKey() (*ecdh.PrivateKey, error) {
fp := path.Join(Path, PrivateKeyFileName)
return crypto.LoadPrivateKeyFromFile(fp), nil
}
func LoadPublicKey() (*ecdh.PublicKey, error) {
fp := path.Join(Path, PublicKeyFileName)
return crypto.LoadPublicKeyFromFile(fp), nil
}
func SavePrivateKey(k *ecdh.PrivateKey) error {
fp := path.Join(Path, PrivateKeyFileName)
return crypto.SavePrivateKeyToFile(fp, k)
}
func SavePublicKey(k *ecdh.PublicKey) error {
fp := path.Join(Path, PublicKeyFileName)
return crypto.SavePublicKeyToFile(fp, k)
}