package discovery import ( "net/url" "os" "path" "git.twelvetwelve.org/library/core/json" ) type LocalDiscovery struct { } func lookup(kv map[string]string, serviceUrn string) *url.URL { rawURL, ok := kv[serviceUrn] if !ok { return nil } u, err := url.Parse(rawURL) if err != nil { return nil } return u } func lookupFrom(path string, serviceUrn string) *url.URL { services := make(map[string]string) err := json.ReadFromFile(path, &services) if err != nil { return nil } return lookup(services, serviceUrn) } func (ld *LocalDiscovery) Discover(serviceUrn string) (*url.URL, error) { if url := lookupFrom("discovery.json", serviceUrn); url != nil { return url, nil } home, err := os.UserHomeDir() if err != nil { homeConf := path.Join(home, ".config", "discovery.json") if url := lookupFrom(homeConf, serviceUrn); url != nil { return url, nil } } if url := lookupFrom("/etc/discovery/discovery.json", serviceUrn); url != nil { return url, nil } return nil, os.ErrNotExist } func NewLocalDiscovery() *LocalDiscovery { return &LocalDiscovery{} }