2026-07-08 07:13:00 -07:00
|
|
|
package config
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"fmt"
|
|
|
|
|
"os"
|
|
|
|
|
"path/filepath"
|
|
|
|
|
)
|
|
|
|
|
|
2026-07-08 13:12:49 -07:00
|
|
|
// DefaultServer is used wherever a server is needed and none is configured:
|
|
|
|
|
// bare `bdrive login`, and `bdrive init` on a never-logged-in device.
|
|
|
|
|
const DefaultServer = "https://beardrive.ai"
|
|
|
|
|
|
2026-07-08 07:13:00 -07:00
|
|
|
// Settings are device-wide defaults, stored at $BDRIVE_HOME/settings.json.
|
|
|
|
|
type Settings struct {
|
|
|
|
|
// Server is the default bdrive web server for `bdrive init`.
|
|
|
|
|
Server string `json:"server,omitempty"`
|
2026-07-08 13:12:49 -07:00
|
|
|
// Token authenticates this device to Server (minted by `bdrive login`).
|
|
|
|
|
// Sent as a Bearer header.
|
|
|
|
|
Token string `json:"token,omitempty"`
|
|
|
|
|
// Email and Name identify the signed-in account; journal ops carry them
|
|
|
|
|
// so history shows who changed what.
|
|
|
|
|
Email string `json:"email,omitempty"`
|
|
|
|
|
Name string `json:"name,omitempty"`
|
2026-07-08 07:13:00 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func settingsPath() (string, error) {
|
|
|
|
|
home, err := Home()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return "", err
|
|
|
|
|
}
|
|
|
|
|
return filepath.Join(home, "settings.json"), nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// LoadSettings reads the device settings; a missing file is zero settings.
|
|
|
|
|
func LoadSettings() (Settings, error) {
|
|
|
|
|
var s Settings
|
|
|
|
|
path, err := settingsPath()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return s, err
|
|
|
|
|
}
|
|
|
|
|
data, err := os.ReadFile(path)
|
|
|
|
|
if err != nil {
|
|
|
|
|
if os.IsNotExist(err) {
|
|
|
|
|
return s, nil
|
|
|
|
|
}
|
|
|
|
|
return s, err
|
|
|
|
|
}
|
|
|
|
|
if err := json.Unmarshal(data, &s); err != nil {
|
|
|
|
|
return s, fmt.Errorf("parse %s: %w", path, err)
|
|
|
|
|
}
|
|
|
|
|
return s, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SaveSettings persists the device settings.
|
|
|
|
|
func SaveSettings(s Settings) error {
|
|
|
|
|
path, err := settingsPath()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
2026-08-03 16:20:51 +09:00
|
|
|
if _, err := ensureHome(); err != nil {
|
2026-07-08 07:13:00 -07:00
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return writeJSON(path, s)
|
|
|
|
|
}
|