89 lines
2.0 KiB
Go
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)
|
|
}
|