Files
GitOcean-Old/internal/config/config.go
T
2026-06-08 13:34:53 -05:00

89 lines
2.0 KiB
Go

package config
import (
"encoding/json"
"errors"
"os"
"path/filepath"
"strings"
"gitocean/internal/model"
)
const (
DefaultServerURL = "http://localhost:8080"
DefaultStorage = "storage"
)
func EnvServer() string {
if v := os.Getenv("GITOOCEAN_SERVER"); v != "" {
return strings.TrimRight(v, "/")
}
if cfg, err := LoadServer(DefaultServerConfigPath()); err == nil && cfg.PublicURL != "" {
return strings.TrimRight(cfg.PublicURL, "/")
}
return DefaultServerURL
}
func ClientConfigPath() string {
if v := os.Getenv("GITOOCEAN_CONFIG"); v != "" {
return v
}
dir, err := os.UserConfigDir()
if err != nil {
dir = "."
}
return filepath.Join(dir, "gitocean", "config.json")
}
func LoadClient() (model.Config, error) {
b, err := os.ReadFile(ClientConfigPath())
if err != nil {
return model.Config{}, errors.New("not logged in; run gitocean login")
}
var cfg model.Config
if err := json.Unmarshal(b, &cfg); err != nil {
return model.Config{}, err
}
if cfg.Server == "" || cfg.Token == "" {
return model.Config{}, errors.New("invalid config; run gitocean login")
}
return cfg, nil
}
func SaveClient(cfg model.Config) error {
path := ClientConfigPath()
if err := os.MkdirAll(filepath.Dir(path), 0700); err != nil {
return err
}
b, _ := json.MarshalIndent(cfg, "", " ")
return os.WriteFile(path, b, 0600)
}
func DefaultServerConfigPath() string {
if v := os.Getenv("GITOOCEAN_SERVER_CONFIG"); v != "" {
return v
}
return filepath.Join(DefaultStorage, "config.json")
}
func LoadServer(path string) (model.ServerConfig, error) {
b, err := os.ReadFile(path)
if err != nil {
return model.ServerConfig{}, err
}
var cfg model.ServerConfig
if err := json.Unmarshal(b, &cfg); err != nil {
return model.ServerConfig{}, err
}
return cfg, nil
}
func SaveServer(path string, cfg model.ServerConfig) error {
if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
return err
}
b, _ := json.MarshalIndent(cfg, "", " ")
return os.WriteFile(path, b, 0600)
}