mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2025-01-09 18:27:27 -08:00
104 lines
2.1 KiB
Go
104 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
)
|
|
|
|
type az struct {
|
|
props properties
|
|
env environmentInfo
|
|
|
|
EnvironmentName string `json:"environmentName"`
|
|
HomeTenantID string `json:"homeTenantId"`
|
|
ID string `json:"id"`
|
|
IsDefault bool `json:"isDefault"`
|
|
Name string `json:"name"`
|
|
State string `json:"state"`
|
|
TenantID string `json:"tenantId"`
|
|
User *AzureUser `json:"user"`
|
|
}
|
|
|
|
const (
|
|
updateConsentNeeded = "Do you want to continue?"
|
|
updateMessage = "AZ CLI: Update needed!"
|
|
updateForeground = "#ffffff"
|
|
updateBackground = "#ff5349"
|
|
)
|
|
|
|
type AzureUser struct {
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
func (a *az) string() string {
|
|
if a != nil && a.Name == updateMessage {
|
|
return updateMessage
|
|
}
|
|
segmentTemplate := a.props.getString(SegmentTemplate, "{{.Name}}")
|
|
template := &textTemplate{
|
|
Template: segmentTemplate,
|
|
Context: a,
|
|
Env: a.env,
|
|
}
|
|
text, err := template.render()
|
|
if err != nil {
|
|
return err.Error()
|
|
}
|
|
return text
|
|
}
|
|
|
|
func (a *az) init(props properties, env environmentInfo) {
|
|
a.props = props
|
|
a.env = env
|
|
}
|
|
|
|
func (a *az) enabled() bool {
|
|
if a.getFromEnvVars() {
|
|
return true
|
|
}
|
|
|
|
return a.getFromAzCli()
|
|
}
|
|
|
|
func (a *az) getFromEnvVars() bool {
|
|
environmentName := a.env.getenv("AZ_ENVIRONMENT_NAME")
|
|
userName := a.env.getenv("AZ_USER_NAME")
|
|
id := a.env.getenv("AZ_SUBSCRIPTION_ID")
|
|
accountName := a.env.getenv("AZ_ACCOUNT_NAME")
|
|
|
|
if userName == "" && environmentName == "" {
|
|
return false
|
|
}
|
|
|
|
a.EnvironmentName = environmentName
|
|
a.Name = accountName
|
|
a.ID = id
|
|
a.User = &AzureUser{
|
|
Name: userName,
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func (a *az) getFromAzCli() bool {
|
|
cmd := "az"
|
|
if !a.env.hasCommand(cmd) {
|
|
return false
|
|
}
|
|
|
|
output, _ := a.env.runCommand(cmd, "account", "show")
|
|
if len(output) == 0 {
|
|
return false
|
|
}
|
|
|
|
if strings.Contains(output, updateConsentNeeded) {
|
|
a.props[ForegroundOverride] = updateForeground
|
|
a.props[BackgroundOverride] = updateBackground
|
|
a.Name = updateMessage
|
|
return true
|
|
}
|
|
|
|
err := json.Unmarshal([]byte(output), a)
|
|
return err == nil
|
|
}
|