github.com/zignig/go-ipfs@v0.0.0-20141111235910-c9e5fdf55a52/namesys/namesys.go (about) 1 package namesys 2 3 import ( 4 ci "github.com/jbenet/go-ipfs/crypto" 5 routing "github.com/jbenet/go-ipfs/routing" 6 ) 7 8 // ipnsNameSystem implements IPNS naming. 9 // 10 // Uses three Resolvers: 11 // (a) ipfs routing naming: SFS-like PKI names. 12 // (b) dns domains: resolves using links in DNS TXT records 13 // (c) proquints: interprets string as the raw byte data. 14 // 15 // It can only publish to: (a) ipfs routing naming. 16 // 17 type ipns struct { 18 resolvers []Resolver 19 publisher Publisher 20 } 21 22 // NewNameSystem will construct the IPFS naming system based on Routing 23 func NewNameSystem(r routing.IpfsRouting) NameSystem { 24 return &ipns{ 25 resolvers: []Resolver{ 26 new(DNSResolver), 27 new(ProquintResolver), 28 NewRoutingResolver(r), 29 }, 30 publisher: NewRoutingPublisher(r), 31 } 32 } 33 34 // Resolve implements Resolver 35 func (ns *ipns) Resolve(name string) (string, error) { 36 for _, r := range ns.resolvers { 37 if r.CanResolve(name) { 38 return r.Resolve(name) 39 } 40 } 41 return "", ErrResolveFailed 42 } 43 44 // CanResolve implements Resolver 45 func (ns *ipns) CanResolve(name string) bool { 46 for _, r := range ns.resolvers { 47 if r.CanResolve(name) { 48 return true 49 } 50 } 51 return false 52 } 53 54 // Publish implements Publisher 55 func (ns *ipns) Publish(name ci.PrivKey, value string) error { 56 return ns.publisher.Publish(name, value) 57 }