Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var IpnsCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Resolve BTNS names.", ShortDescription: ` BTNS is a PKI namespace, where names are the hashes of public keys, and the private key enables publishing new (signed) values. In both publish and resolve, the default name used is the node's own PeerID, which is the hash of its public key. `, LongDescription: ` BTNS is a PKI namespace, where names are the hashes of public keys, and the private key enables publishing new (signed) values. In both publish and resolve, the default name used is the node's own PeerID, which is the hash of its public key. You can use the 'btfs key' commands to list and generate more names and their respective keys. Examples: Resolve the value of your name: > btfs name resolve /btfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Resolve the value of another name: > btfs name resolve QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ /btfs/QmSiTko9JZyabH56y2fussEt1A5oDqsFXB3CkvAqraFryz Resolve the value of a dnslink: > btfs name resolve btfs.io /btfs/QmaBvfZooxWkrv7D3r8LS9moNjzD2o525XMZze69hhoxf5 `, }, Arguments: []cmds.Argument{ cmds.StringArg("name", false, false, "The BTNS name to resolve. Defaults to your node's peerID."), }, Options: []cmds.Option{ cmds.BoolOption(recursiveOptionName, "r", "Resolve until the result is not an BTNS name.").WithDefault(true), cmds.BoolOption(nocacheOptionName, "n", "Do not use cached entries."), cmds.UintOption(dhtRecordCountOptionName, "dhtrc", "Number of records to request for DHT resolution."), cmds.StringOption(dhtTimeoutOptionName, "dhtt", "Max time to collect values during DHT resolution eg \"30s\". Pass 0 for no timeout."), cmds.BoolOption(streamOptionName, "s", "Stream entries as they are found."), }, Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { api, err := cmdenv.GetApi(env, req) if err != nil { return err } nocache, _ := req.Options["nocache"].(bool) var name string if len(req.Arguments) == 0 { self, err := api.Key().Self(req.Context) if err != nil { return err } name = self.ID().Pretty() } else { name = req.Arguments[0] } recursive, _ := req.Options[recursiveOptionName].(bool) rc, rcok := req.Options[dhtRecordCountOptionName].(uint) dhtt, dhttok := req.Options[dhtTimeoutOptionName].(string) stream, _ := req.Options[streamOptionName].(bool) opts := []options.NameResolveOption{ options.Name.Cache(!nocache), } if !recursive { opts = append(opts, options.Name.ResolveOption(nsopts.Depth(1))) } if rcok { opts = append(opts, options.Name.ResolveOption(nsopts.DhtRecordCount(rc))) } if dhttok { d, err := time.ParseDuration(dhtt) if err != nil { return err } if d < 0 { return errors.New("DHT timeout value must be >= 0") } opts = append(opts, options.Name.ResolveOption(nsopts.DhtTimeout(d))) } if !strings.HasPrefix(name, "/btns/") { name = "/btns/" + name } if !stream { output, err := api.Name().Resolve(req.Context, name, opts...) if err != nil && (recursive || err != namesys.ErrResolveRecursion) { return err } return cmds.EmitOnce(res, &ResolvedPath{path.FromString(output.String())}) } output, err := api.Name().Search(req.Context, name, opts...) if err != nil { return err } for v := range output { if v.Err != nil && (recursive || v.Err != namesys.ErrResolveRecursion) { return v.Err } if err := res.Emit(&ResolvedPath{path.FromString(v.Path.String())}); err != nil { return err } } return nil }, Encoders: cmds.EncoderMap{ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, rp *ResolvedPath) error { _, err := fmt.Fprintln(w, rp.Path) return err }), }, Type: ResolvedPath{}, }
View Source
var IpnsPubsubCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "BTNS pubsub management", ShortDescription: ` Manage and inspect the state of the BTNS pubsub resolver. Note: this command is experimental and subject to change as the system is refined `, }, Subcommands: map[string]*cmds.Command{ "state": ipnspsStateCmd, "subs": ipnspsSubsCmd, "cancel": ipnspsCancelCmd, }, }
IpnsPubsubCmd is the subcommand that allows us to manage the IPNS pubsub system
View Source
var NameCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Publish and resolve BTNS names.", ShortDescription: ` BTNS is a PKI namespace, where names are the hashes of public keys, and the private key enables publishing new (signed) values. In both publish and resolve, the default name used is the node's own PeerID, which is the hash of its public key. `, LongDescription: ` BTNS is a PKI namespace, where names are the hashes of public keys, and the private key enables publishing new (signed) values. In both publish and resolve, the default name used is the node's own PeerID, which is the hash of its public key. You can use the 'btfs key' commands to list and generate more names and their respective keys. Examples: Publish an <btfs-path> with your default name: > btfs name publish /btfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Published to QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n: /btfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Publish an <btfs-path> with another name, added by an 'btfs key' command: > btfs key gen --type=rsa --size=2048 mykey > btfs name publish --key=mykey /btfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Published to QmSrPmbaUKA3ZodhzPWZnpFgcPMFWF4QsxXbkWfEptTBJd: /btfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Resolve the value of your name: > btfs name resolve /btfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Resolve the value of another name: > btfs name resolve QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ /btfs/QmSiTko9JZyabH56y2fussEt1A5oDqsFXB3CkvAqraFryz Resolve the value of a dnslink: > btfs name resolve ipfs.io /btfs/QmaBvfZooxWkrv7D3r8LS9moNjzD2o525XMZze69hhoxf5 `, }, Subcommands: map[string]*cmds.Command{ "publish": PublishCmd, "resolve": IpnsCmd, "pubsub": IpnsPubsubCmd, }, }
View Source
var PublishCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Publish BTNS names.", ShortDescription: ` BTNS is a PKI namespace, where names are the hashes of public keys, and the private key enables publishing new (signed) values. In both publish and resolve, the default name used is the node's own PeerID, which is the hash of its public key. `, LongDescription: ` BTNS is a PKI namespace, where names are the hashes of public keys, and the private key enables publishing new (signed) values. In both publish and resolve, the default name used is the node's own PeerID, which is the hash of its public key. You can use the 'btfs key' commands to list and generate more names and their respective keys. Examples: Publish an <btfs-path> with your default name: > btfs name publish /btfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Published to QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n: /btfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Publish an <btfs-path> with another name, added by an 'btfs key' command: > btfs key gen --type=rsa --size=2048 mykey > btfs name publish --key=mykey /btfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Published to QmSrPmbaUKA3ZodhzPWZnpFgcPMFWF4QsxXbkWfEptTBJd: /btfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Alternatively, publish an <btfs-path> using a valid PeerID (as listed by 'btfs key list -l'): > btfs name publish --key=QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n /btfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Published to QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n: /btfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy `, }, Arguments: []cmds.Argument{ cmds.StringArg(ipfsPathOptionName, true, false, "btfs path of the object to be published.").EnableStdin(), }, Options: []cmds.Option{ cmds.BoolOption(resolveOptionName, "Check if the given path can be resolved before publishing.").WithDefault(true), cmds.StringOption(lifeTimeOptionName, "t", `Time duration that the record will be valid for. <<default>> This accepts durations such as "300s", "1.5h" or "2h45m". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".`).WithDefault("24h"), cmds.BoolOption(allowOfflineOptionName, "When offline, save the BTNS record to the the local datastore without broadcasting to the network instead of simply failing."), cmds.StringOption(ttlOptionName, "Time duration this record should be cached for. Uses the same syntax as the lifetime option. (caution: experimental)"), cmds.StringOption(keyOptionName, "k", "Name of the key to be used or a valid PeerID, as listed by 'btfs key list -l'.").WithDefault("self"), cmds.BoolOption(quieterOptionName, "Q", "Write only final hash."), ke.OptionIPNSBase, }, Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { api, err := cmdenv.GetApi(env, req) if err != nil { return err } keyEnc, err := ke.KeyEncoderFromString(req.Options[ke.OptionIPNSBase.Name()].(string)) if err != nil { return err } allowOffline, _ := req.Options[allowOfflineOptionName].(bool) kname, _ := req.Options[keyOptionName].(string) validTimeOpt, _ := req.Options[lifeTimeOptionName].(string) validTime, err := time.ParseDuration(validTimeOpt) if err != nil { return fmt.Errorf("error parsing lifetime option: %s", err) } opts := []options.NamePublishOption{ options.Name.AllowOffline(allowOffline), options.Name.Key(kname), options.Name.ValidTime(validTime), } if ttl, found := req.Options[ttlOptionName].(string); found { d, err := time.ParseDuration(ttl) if err != nil { return err } opts = append(opts, options.Name.TTL(d)) } p := path.New(req.Arguments[0]) if verifyExists, _ := req.Options[resolveOptionName].(bool); verifyExists { _, err := api.ResolveNode(req.Context, p) if err != nil { return err } } out, err := api.Name().Publish(req.Context, p, opts...) if err != nil { if err == iface.ErrOffline { err = errAllowOffline } return err } pid, err := peer.Decode(out.Name()) if err != nil { return err } return cmds.EmitOnce(res, &IpnsEntry{ Name: keyEnc.FormatID(pid), Value: out.Value().String(), }) }, Encoders: cmds.EncoderMap{ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, ie *IpnsEntry) error { var err error quieter, _ := req.Options[quieterOptionName].(bool) if quieter { _, err = fmt.Fprintln(w, ie.Name) } else { _, err = fmt.Fprintf(w, "Published to %s: %s\n", ie.Name, ie.Value) } return err }), }, Type: IpnsEntry{}, }
Functions ¶
This section is empty.
Types ¶
type ResolvedPath ¶
Click to show internal directories.
Click to hide internal directories.