packer-cn/vendor/github.com/scaleway/scaleway-sdk-go/scw/path.go

99 lines
2.5 KiB
Go

package scw
import (
"errors"
"os"
"path/filepath"
)
const (
// XDG wiki: https://wiki.archlinux.org/index.php/XDG_Base_Directory
xdgConfigDirEnv = "XDG_CONFIG_HOME"
xdgCacheDirEnv = "XDG_CACHE_HOME"
unixHomeDirEnv = "HOME"
windowsHomeDirEnv = "USERPROFILE"
defaultConfigFileName = "config.yaml"
)
var (
// ErrNoHomeDir errors when no user directory is found
ErrNoHomeDir = errors.New("user home directory not found")
)
// GetCacheDirectory returns the default cache directory.
// Cache directory is based on the following priority order:
// - $SCW_CACHE_DIR
// - $XDG_CACHE_HOME/scw
// - $HOME/.cache/scw
// - $USERPROFILE/.cache/scw
func GetCacheDirectory() string {
cacheDir := ""
switch {
case os.Getenv(ScwCacheDirEnv) != "":
cacheDir = os.Getenv(ScwCacheDirEnv)
case os.Getenv(xdgCacheDirEnv) != "":
cacheDir = filepath.Join(os.Getenv(xdgCacheDirEnv), "scw")
case os.Getenv(unixHomeDirEnv) != "":
cacheDir = filepath.Join(os.Getenv(unixHomeDirEnv), ".cache", "scw")
case os.Getenv(windowsHomeDirEnv) != "":
cacheDir = filepath.Join(os.Getenv(windowsHomeDirEnv), ".cache", "scw")
default:
// TODO: fallback on local folder?
}
// Clean the cache directory path when exiting the function
return filepath.Clean(cacheDir)
}
// GetConfigPath returns the default path.
// Default path is based on the following priority order:
// - $SCW_CONFIG_PATH
// - $XDG_CONFIG_HOME/scw/config.yaml
// - $HOME/.config/scw/config.yaml
// - $USERPROFILE/.config/scw/config.yaml
func GetConfigPath() string {
configPath := os.Getenv(ScwConfigPathEnv)
if configPath == "" {
configPath, _ = getConfigV2FilePath()
}
return filepath.Clean(configPath)
}
// getConfigV2FilePath returns the path to the v2 config file
func getConfigV2FilePath() (string, bool) {
configDir, err := GetScwConfigDir()
if err != nil {
return "", false
}
return filepath.Clean(filepath.Join(configDir, defaultConfigFileName)), true
}
// getConfigV1FilePath returns the path to the v1 config file
func getConfigV1FilePath() (string, bool) {
path, err := os.UserHomeDir()
if err != nil {
return "", false
}
return filepath.Clean(filepath.Join(path, ".scwrc")), true
}
// GetScwConfigDir returns the path to scw config folder
func GetScwConfigDir() (string, error) {
if xdgPath := os.Getenv(xdgConfigDirEnv); xdgPath != "" {
return filepath.Join(xdgPath, "scw"), nil
}
homeDir, err := os.UserHomeDir()
if err != nil {
return "", err
}
return filepath.Join(homeDir, ".config", "scw"), nil
}
func fileExist(name string) bool {
_, err := os.Stat(name)
return err == nil
}