mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-28 13:57:52 +08:00
58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package namesys
|
|
|
|
import (
|
|
ci "github.com/jbenet/go-ipfs/crypto"
|
|
routing "github.com/jbenet/go-ipfs/routing"
|
|
)
|
|
|
|
// ipnsNameSystem implements IPNS naming.
|
|
//
|
|
// Uses three Resolvers:
|
|
// (a) ipfs routing naming: SFS-like PKI names.
|
|
// (b) dns domains: resolves using links in DNS TXT records
|
|
// (c) proquints: interprets string as the raw byte data.
|
|
//
|
|
// It can only publish to: (a) ipfs routing naming.
|
|
//
|
|
type ipns struct {
|
|
resolvers []Resolver
|
|
publisher Publisher
|
|
}
|
|
|
|
// NewNameSystem will construct the IPFS naming system based on Routing
|
|
func NewNameSystem(r routing.IpfsRouting) NameSystem {
|
|
return &ipns{
|
|
resolvers: []Resolver{
|
|
new(DNSResolver),
|
|
new(ProquintResolver),
|
|
NewRoutingResolver(r),
|
|
},
|
|
publisher: NewRoutingPublisher(r),
|
|
}
|
|
}
|
|
|
|
// Resolve implements Resolver
|
|
func (ns *ipns) Resolve(name string) (string, error) {
|
|
for _, r := range ns.resolvers {
|
|
if r.CanResolve(name) {
|
|
return r.Resolve(name)
|
|
}
|
|
}
|
|
return "", ErrResolveFailed
|
|
}
|
|
|
|
// CanResolve implements Resolver
|
|
func (ns *ipns) CanResolve(name string) bool {
|
|
for _, r := range ns.resolvers {
|
|
if r.CanResolve(name) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Publish implements Publisher
|
|
func (ns *ipns) Publish(name ci.PrivKey, value string) error {
|
|
return ns.publisher.Publish(name, value)
|
|
}
|