oh-my-posh/src/segment_ipify.go

64 lines
1.1 KiB
Go
Raw Normal View History

package main
import "oh-my-posh/environment"
type ipify struct {
2022-01-01 11:08:08 -08:00
props Properties
env environment.Environment
IP string
}
const (
IpifyURL Property = "url"
)
func (i *ipify) template() string {
return "{{ .IP }}"
}
func (i *ipify) enabled() bool {
ip, err := i.getResult()
if err != nil {
return false
}
i.IP = ip
return true
}
func (i *ipify) getResult() (string, error) {
cacheTimeout := i.props.getInt(CacheTimeout, DefaultCacheTimeout)
url := i.props.getString(IpifyURL, "https://api.ipify.org")
if cacheTimeout > 0 {
// check if data stored in cache
val, found := i.env.Cache().Get(url)
// we got something from te cache
if found {
return val, nil
}
}
httpTimeout := i.props.getInt(HTTPTimeout, DefaultHTTPTimeout)
2022-01-07 10:41:58 -08:00
body, err := i.env.HTTPRequest(url, httpTimeout)
if err != nil {
return "", err
}
// convert the body to a string
response := string(body)
if cacheTimeout > 0 {
// persist public ip in cache
i.env.Cache().Set(url, response, cacheTimeout)
}
return response, nil
}
func (i *ipify) init(props Properties, env environment.Environment) {
i.props = props
i.env = env
}