Files
ClusterCanvas/service/internal/settings/path.go
T
Squid 2605c3b346 Add users and network settings tabs with admin protections.
List and delete accounts with last-admin and Administrators-group guards, and expose editable network settings via the configuration UI.
2026-07-18 15:18:01 +02:00

67 lines
1.5 KiB
Go

package settings
import (
"fmt"
"os"
"path/filepath"
"strings"
)
const (
DefaultConfigDir = "/etc/ClusterCanvas"
ConfigDirEnvVar = "CLUSTERCANVAS_CONFIG_DIR"
ConfigKeyEnvVar = "CLUSTERCANVAS_CONFIG_KEY"
SettingsFileName = "settings.json"
SecretsFileName = "secrets.enc"
PasswordsFileName = "passwords.enc"
SessionsFileName = "sessions.enc"
)
// ResolveDir returns the config directory using precedence:
// 1. flagValue (-configdir), if non-empty
// 2. CLUSTERCANVAS_CONFIG_DIR, if set
// 3. /etc/ClusterCanvas
//
// Leading ~/ is expanded to the user home directory.
func ResolveDir(flagValue string) (string, error) {
candidate := strings.TrimSpace(flagValue)
if candidate == "" {
candidate = strings.TrimSpace(os.Getenv(ConfigDirEnvVar))
}
if candidate == "" {
candidate = DefaultConfigDir
}
expanded, err := expandHome(candidate)
if err != nil {
return "", err
}
return filepath.Clean(expanded), nil
}
func expandHome(path string) (string, error) {
if path == "~" {
homeDirectory, err := os.UserHomeDir()
if err != nil {
return "", fmt.Errorf("expand home directory: %w", err)
}
return homeDirectory, nil
}
if strings.HasPrefix(path, "~/") {
homeDirectory, err := os.UserHomeDir()
if err != nil {
return "", fmt.Errorf("expand home directory: %w", err)
}
return filepath.Join(homeDirectory, path[2:]), nil
}
return path, nil
}
func ensureConfigDir(dir string) error {
if err := os.MkdirAll(dir, 0o750); err != nil {
return fmt.Errorf("create config dir %q: %w", dir, err)
}
return nil
}