core/discovery/file.go

59 lines
1.1 KiB
Go
Raw Permalink Normal View History

2024-01-06 20:49:24 +00:00
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{}
}