VictoriaMetrics/vendor/github.com/googleapis/enterprise-certificate-proxy/client/util/util.go

72 lines
1.7 KiB
Go
Raw Normal View History

2022-06-20 13:30:23 +02:00
// Package util provides helper functions for the client.
package util
import (
"encoding/json"
"errors"
"io/ioutil"
"os"
"os/user"
"path/filepath"
"runtime"
)
2022-10-01 16:20:01 +02:00
const configFileName = "certificate_config.json"
2022-06-20 13:30:23 +02:00
// EnterpriseCertificateConfig contains parameters for initializing signer.
type EnterpriseCertificateConfig struct {
Libs Libs `json:"libs"`
}
// Libs specifies the locations of helper libraries.
type Libs struct {
2022-10-01 16:20:01 +02:00
ECP string `json:"ecp"`
2022-06-20 13:30:23 +02:00
}
// LoadSignerBinaryPath retrieves the path of the signer binary from the config file.
func LoadSignerBinaryPath(configFilePath string) (path string, err error) {
jsonFile, err := os.Open(configFilePath)
if err != nil {
return "", err
}
byteValue, err := ioutil.ReadAll(jsonFile)
if err != nil {
return "", err
}
var config EnterpriseCertificateConfig
err = json.Unmarshal(byteValue, &config)
if err != nil {
return "", err
}
2022-10-01 16:20:01 +02:00
signerBinaryPath := config.Libs.ECP
2022-06-20 13:30:23 +02:00
if signerBinaryPath == "" {
2022-10-01 16:20:01 +02:00
return "", errors.New("signer binary path is missing")
2022-06-20 13:30:23 +02:00
}
return signerBinaryPath, nil
}
func guessHomeDir() string {
// Prefer $HOME over user.Current due to glibc bug: golang.org/issue/13470
if v := os.Getenv("HOME"); v != "" {
return v
}
// Else, fall back to user.Current:
if u, err := user.Current(); err == nil {
return u.HomeDir
}
return ""
}
func getDefaultConfigFileDirectory() (directory string) {
if runtime.GOOS == "windows" {
return filepath.Join(os.Getenv("APPDATA"), "gcloud")
}
2022-10-01 16:20:01 +02:00
return filepath.Join(guessHomeDir(), ".config/gcloud")
2022-06-20 13:30:23 +02:00
}
// GetDefaultConfigFilePath returns the default path of the enterprise certificate config file created by gCloud.
func GetDefaultConfigFilePath() (path string) {
return filepath.Join(getDefaultConfigFileDirectory(), configFileName)
}