internal/cfgfile/installation_id.go (53 lines of code) (raw):
package cfgfile
import (
"bytes"
"encoding/json"
"fmt"
"os"
"path/filepath"
)
func GetInstallationIdFromCLI() (string, error) {
home, err := os.UserHomeDir()
if err != nil {
return "", fmt.Errorf("retrieving user's HOME dir")
}
path := filepath.Join(home, ".azure", "azureProfile.json")
// #nosec G304
b, err := os.ReadFile(path)
if err != nil {
return "", fmt.Errorf("reading %s: %v", path, err)
}
// Removing the preceding BOM (Byte Order Mark)
b = bytes.TrimPrefix(b, []byte("\xef\xbb\xbf"))
var f struct {
InstallationId string `json:"installationId"`
}
if err := json.Unmarshal(b, &f); err != nil {
return "", fmt.Errorf("unmarshalling the file: %v", err)
}
if f.InstallationId == "" {
return "", fmt.Errorf("no installation id found")
}
return f.InstallationId, nil
}
func GetInstallationIdFromPWSH() (string, error) {
home, err := os.UserHomeDir()
if err != nil {
return "", fmt.Errorf("retrieving user's HOME dir")
}
path := filepath.Join(home, ".azure", "AzureRmContextSettings.json")
// #nosec G304
b, err := os.ReadFile(path)
if err != nil {
return "", fmt.Errorf("reading %s: %v", path, err)
}
var f struct {
Settings struct {
InstallationId string `json:"InstallationId"`
} `json:"Settings"`
}
if err := json.Unmarshal(b, &f); err != nil {
return "", fmt.Errorf("unmarshalling the file: %v", err)
}
if f.Settings.InstallationId == "" {
return "", fmt.Errorf("no installation id found")
}
return f.Settings.InstallationId, nil
}