cmd/swarm: split flags and cli command declarations to the relevant files (#17896)
This commit is contained in:
parent
6f607de5d5
commit
4868964bb9
@ -29,7 +29,65 @@ import (
|
|||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
var salt = make([]byte, 32)
|
var (
|
||||||
|
salt = make([]byte, 32)
|
||||||
|
accessCommand = cli.Command{
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "access",
|
||||||
|
Usage: "encrypts a reference and embeds it into a root manifest",
|
||||||
|
ArgsUsage: "<ref>",
|
||||||
|
Description: "encrypts a reference and embeds it into a root manifest",
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
{
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "new",
|
||||||
|
Usage: "encrypts a reference and embeds it into a root manifest",
|
||||||
|
ArgsUsage: "<ref>",
|
||||||
|
Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest",
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
{
|
||||||
|
Action: accessNewPass,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
utils.PasswordFileFlag,
|
||||||
|
SwarmDryRunFlag,
|
||||||
|
},
|
||||||
|
Name: "pass",
|
||||||
|
Usage: "encrypts a reference with a password and embeds it into a root manifest",
|
||||||
|
ArgsUsage: "<ref>",
|
||||||
|
Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Action: accessNewPK,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
utils.PasswordFileFlag,
|
||||||
|
SwarmDryRunFlag,
|
||||||
|
SwarmAccessGrantKeyFlag,
|
||||||
|
},
|
||||||
|
Name: "pk",
|
||||||
|
Usage: "encrypts a reference with the node's private key and a given grantee's public key and embeds it into a root manifest",
|
||||||
|
ArgsUsage: "<ref>",
|
||||||
|
Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Action: accessNewACT,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
SwarmAccessGrantKeysFlag,
|
||||||
|
SwarmDryRunFlag,
|
||||||
|
utils.PasswordFileFlag,
|
||||||
|
},
|
||||||
|
Name: "act",
|
||||||
|
Usage: "encrypts a reference with the node's private key and a given grantee's public key and embeds it into a root manifest",
|
||||||
|
ArgsUsage: "<ref>",
|
||||||
|
Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
if _, err := io.ReadFull(rand.Reader, salt); err != nil {
|
if _, err := io.ReadFull(rand.Reader, salt); err != nil {
|
||||||
|
@ -29,6 +29,48 @@ import (
|
|||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var dbCommand = cli.Command{
|
||||||
|
Name: "db",
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Usage: "manage the local chunk database",
|
||||||
|
ArgsUsage: "db COMMAND",
|
||||||
|
Description: "Manage the local chunk database",
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
{
|
||||||
|
Action: dbExport,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "export",
|
||||||
|
Usage: "export a local chunk database as a tar archive (use - to send to stdout)",
|
||||||
|
ArgsUsage: "<chunkdb> <file>",
|
||||||
|
Description: `
|
||||||
|
Export a local chunk database as a tar archive (use - to send to stdout).
|
||||||
|
|
||||||
|
swarm db export ~/.ethereum/swarm/bzz-KEY/chunks chunks.tar
|
||||||
|
|
||||||
|
The export may be quite large, consider piping the output through the Unix
|
||||||
|
pv(1) tool to get a progress bar:
|
||||||
|
|
||||||
|
swarm db export ~/.ethereum/swarm/bzz-KEY/chunks - | pv > chunks.tar
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Action: dbImport,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "import",
|
||||||
|
Usage: "import chunks from a tar archive into a local chunk database (use - to read from stdin)",
|
||||||
|
ArgsUsage: "<chunkdb> <file>",
|
||||||
|
Description: `Import chunks from a tar archive into a local chunk database (use - to read from stdin).
|
||||||
|
|
||||||
|
swarm db import ~/.ethereum/swarm/bzz-KEY/chunks chunks.tar
|
||||||
|
|
||||||
|
The import may be quite large, consider piping the input through the Unix
|
||||||
|
pv(1) tool to get a progress bar:
|
||||||
|
|
||||||
|
pv chunks.tar | swarm db import ~/.ethereum/swarm/bzz-KEY/chunks -`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
func dbExport(ctx *cli.Context) {
|
func dbExport(ctx *cli.Context) {
|
||||||
args := ctx.Args()
|
args := ctx.Args()
|
||||||
if len(args) != 3 {
|
if len(args) != 3 {
|
||||||
|
@ -28,6 +28,15 @@ import (
|
|||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var downloadCommand = cli.Command{
|
||||||
|
Action: download,
|
||||||
|
Name: "down",
|
||||||
|
Flags: []cli.Flag{SwarmRecursiveFlag, SwarmAccessPasswordFlag},
|
||||||
|
Usage: "downloads a swarm manifest or a file inside a manifest",
|
||||||
|
ArgsUsage: " <uri> [<dir>]",
|
||||||
|
Description: `Downloads a swarm bzz uri to the given dir. When no dir is provided, working directory is assumed. --recursive flag is expected when downloading a manifest with multiple entries.`,
|
||||||
|
}
|
||||||
|
|
||||||
func download(ctx *cli.Context) {
|
func download(ctx *cli.Context) {
|
||||||
log.Debug("downloading content using swarm down")
|
log.Debug("downloading content using swarm down")
|
||||||
args := ctx.Args()
|
args := ctx.Args()
|
||||||
|
@ -31,6 +31,68 @@ import (
|
|||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var feedCommand = cli.Command{
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "feed",
|
||||||
|
Usage: "(Advanced) Create and update Swarm Feeds",
|
||||||
|
ArgsUsage: "<create|update|info>",
|
||||||
|
Description: "Works with Swarm Feeds",
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
{
|
||||||
|
Action: feedCreateManifest,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "create",
|
||||||
|
Usage: "creates and publishes a new feed manifest",
|
||||||
|
Description: `creates and publishes a new feed manifest pointing to a specified user's updates about a particular topic.
|
||||||
|
The feed topic can be built in the following ways:
|
||||||
|
* use --topic to set the topic to an arbitrary binary hex string.
|
||||||
|
* use --name to set the topic to a human-readable name.
|
||||||
|
For example --name could be set to "profile-picture", meaning this feed allows to get this user's current profile picture.
|
||||||
|
* use both --topic and --name to create named subtopics.
|
||||||
|
For example, --topic could be set to an Ethereum contract address and --name could be set to "comments", meaning
|
||||||
|
this feed tracks a discussion about that contract.
|
||||||
|
The --user flag allows to have this manifest refer to a user other than yourself. If not specified,
|
||||||
|
it will then default to your local account (--bzzaccount)`,
|
||||||
|
Flags: []cli.Flag{SwarmFeedNameFlag, SwarmFeedTopicFlag, SwarmFeedUserFlag},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Action: feedUpdate,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "update",
|
||||||
|
Usage: "updates the content of an existing Swarm Feed",
|
||||||
|
ArgsUsage: "<0x Hex data>",
|
||||||
|
Description: `publishes a new update on the specified topic
|
||||||
|
The feed topic can be built in the following ways:
|
||||||
|
* use --topic to set the topic to an arbitrary binary hex string.
|
||||||
|
* use --name to set the topic to a human-readable name.
|
||||||
|
For example --name could be set to "profile-picture", meaning this feed allows to get this user's current profile picture.
|
||||||
|
* use both --topic and --name to create named subtopics.
|
||||||
|
For example, --topic could be set to an Ethereum contract address and --name could be set to "comments", meaning
|
||||||
|
this feed tracks a discussion about that contract.
|
||||||
|
|
||||||
|
If you have a manifest, you can specify it with --manifest to refer to the feed,
|
||||||
|
instead of using --topic / --name
|
||||||
|
`,
|
||||||
|
Flags: []cli.Flag{SwarmFeedManifestFlag, SwarmFeedNameFlag, SwarmFeedTopicFlag},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Action: feedInfo,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "info",
|
||||||
|
Usage: "obtains information about an existing Swarm feed",
|
||||||
|
Description: `obtains information about an existing Swarm feed
|
||||||
|
The topic can be specified directly with the --topic flag as an hex string
|
||||||
|
If no topic is specified, the default topic (zero) will be used
|
||||||
|
The --name flag can be used to specify subtopics with a specific name.
|
||||||
|
The --user flag allows to refer to a user other than yourself. If not specified,
|
||||||
|
it will then default to your local account (--bzzaccount)
|
||||||
|
If you have a manifest, you can specify it with --manifest instead of --topic / --name / ---user
|
||||||
|
to refer to the feed`,
|
||||||
|
Flags: []cli.Flag{SwarmFeedManifestFlag, SwarmFeedNameFlag, SwarmFeedTopicFlag, SwarmFeedUserFlag},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
func NewGenericSigner(ctx *cli.Context) feed.Signer {
|
func NewGenericSigner(ctx *cli.Context) feed.Signer {
|
||||||
return feed.NewGenericSigner(getPrivKey(ctx))
|
return feed.NewGenericSigner(getPrivKey(ctx))
|
||||||
}
|
}
|
||||||
|
179
cmd/swarm/flags.go
Normal file
179
cmd/swarm/flags.go
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
// Copyright 2018 The go-ethereum Authors
|
||||||
|
// This file is part of go-ethereum.
|
||||||
|
//
|
||||||
|
// go-ethereum is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// go-ethereum is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
// Command feed allows the user to create and update signed Swarm feeds
|
||||||
|
package main
|
||||||
|
|
||||||
|
import cli "gopkg.in/urfave/cli.v1"
|
||||||
|
|
||||||
|
var (
|
||||||
|
ChequebookAddrFlag = cli.StringFlag{
|
||||||
|
Name: "chequebook",
|
||||||
|
Usage: "chequebook contract address",
|
||||||
|
EnvVar: SWARM_ENV_CHEQUEBOOK_ADDR,
|
||||||
|
}
|
||||||
|
SwarmAccountFlag = cli.StringFlag{
|
||||||
|
Name: "bzzaccount",
|
||||||
|
Usage: "Swarm account key file",
|
||||||
|
EnvVar: SWARM_ENV_ACCOUNT,
|
||||||
|
}
|
||||||
|
SwarmListenAddrFlag = cli.StringFlag{
|
||||||
|
Name: "httpaddr",
|
||||||
|
Usage: "Swarm HTTP API listening interface",
|
||||||
|
EnvVar: SWARM_ENV_LISTEN_ADDR,
|
||||||
|
}
|
||||||
|
SwarmPortFlag = cli.StringFlag{
|
||||||
|
Name: "bzzport",
|
||||||
|
Usage: "Swarm local http api port",
|
||||||
|
EnvVar: SWARM_ENV_PORT,
|
||||||
|
}
|
||||||
|
SwarmNetworkIdFlag = cli.IntFlag{
|
||||||
|
Name: "bzznetworkid",
|
||||||
|
Usage: "Network identifier (integer, default 3=swarm testnet)",
|
||||||
|
EnvVar: SWARM_ENV_NETWORK_ID,
|
||||||
|
}
|
||||||
|
SwarmSwapEnabledFlag = cli.BoolFlag{
|
||||||
|
Name: "swap",
|
||||||
|
Usage: "Swarm SWAP enabled (default false)",
|
||||||
|
EnvVar: SWARM_ENV_SWAP_ENABLE,
|
||||||
|
}
|
||||||
|
SwarmSwapAPIFlag = cli.StringFlag{
|
||||||
|
Name: "swap-api",
|
||||||
|
Usage: "URL of the Ethereum API provider to use to settle SWAP payments",
|
||||||
|
EnvVar: SWARM_ENV_SWAP_API,
|
||||||
|
}
|
||||||
|
SwarmSyncDisabledFlag = cli.BoolTFlag{
|
||||||
|
Name: "nosync",
|
||||||
|
Usage: "Disable swarm syncing",
|
||||||
|
EnvVar: SWARM_ENV_SYNC_DISABLE,
|
||||||
|
}
|
||||||
|
SwarmSyncUpdateDelay = cli.DurationFlag{
|
||||||
|
Name: "sync-update-delay",
|
||||||
|
Usage: "Duration for sync subscriptions update after no new peers are added (default 15s)",
|
||||||
|
EnvVar: SWARM_ENV_SYNC_UPDATE_DELAY,
|
||||||
|
}
|
||||||
|
SwarmMaxStreamPeerServersFlag = cli.IntFlag{
|
||||||
|
Name: "max-stream-peer-servers",
|
||||||
|
Usage: "Limit of Stream peer servers, 0 denotes unlimited",
|
||||||
|
EnvVar: SWARM_ENV_MAX_STREAM_PEER_SERVERS,
|
||||||
|
Value: 10000, // A very large default value is possible as stream servers have very small memory footprint
|
||||||
|
}
|
||||||
|
SwarmLightNodeEnabled = cli.BoolFlag{
|
||||||
|
Name: "lightnode",
|
||||||
|
Usage: "Enable Swarm LightNode (default false)",
|
||||||
|
EnvVar: SWARM_ENV_LIGHT_NODE_ENABLE,
|
||||||
|
}
|
||||||
|
SwarmDeliverySkipCheckFlag = cli.BoolFlag{
|
||||||
|
Name: "delivery-skip-check",
|
||||||
|
Usage: "Skip chunk delivery check (default false)",
|
||||||
|
EnvVar: SWARM_ENV_DELIVERY_SKIP_CHECK,
|
||||||
|
}
|
||||||
|
EnsAPIFlag = cli.StringSliceFlag{
|
||||||
|
Name: "ens-api",
|
||||||
|
Usage: "ENS API endpoint for a TLD and with contract address, can be repeated, format [tld:][contract-addr@]url",
|
||||||
|
EnvVar: SWARM_ENV_ENS_API,
|
||||||
|
}
|
||||||
|
SwarmApiFlag = cli.StringFlag{
|
||||||
|
Name: "bzzapi",
|
||||||
|
Usage: "Swarm HTTP endpoint",
|
||||||
|
Value: "http://127.0.0.1:8500",
|
||||||
|
}
|
||||||
|
SwarmRecursiveFlag = cli.BoolFlag{
|
||||||
|
Name: "recursive",
|
||||||
|
Usage: "Upload directories recursively",
|
||||||
|
}
|
||||||
|
SwarmWantManifestFlag = cli.BoolTFlag{
|
||||||
|
Name: "manifest",
|
||||||
|
Usage: "Automatic manifest upload (default true)",
|
||||||
|
}
|
||||||
|
SwarmUploadDefaultPath = cli.StringFlag{
|
||||||
|
Name: "defaultpath",
|
||||||
|
Usage: "path to file served for empty url path (none)",
|
||||||
|
}
|
||||||
|
SwarmAccessGrantKeyFlag = cli.StringFlag{
|
||||||
|
Name: "grant-key",
|
||||||
|
Usage: "grants a given public key access to an ACT",
|
||||||
|
}
|
||||||
|
SwarmAccessGrantKeysFlag = cli.StringFlag{
|
||||||
|
Name: "grant-keys",
|
||||||
|
Usage: "grants a given list of public keys in the following file (separated by line breaks) access to an ACT",
|
||||||
|
}
|
||||||
|
SwarmUpFromStdinFlag = cli.BoolFlag{
|
||||||
|
Name: "stdin",
|
||||||
|
Usage: "reads data to be uploaded from stdin",
|
||||||
|
}
|
||||||
|
SwarmUploadMimeType = cli.StringFlag{
|
||||||
|
Name: "mime",
|
||||||
|
Usage: "Manually specify MIME type",
|
||||||
|
}
|
||||||
|
SwarmEncryptedFlag = cli.BoolFlag{
|
||||||
|
Name: "encrypt",
|
||||||
|
Usage: "use encrypted upload",
|
||||||
|
}
|
||||||
|
SwarmAccessPasswordFlag = cli.StringFlag{
|
||||||
|
Name: "password",
|
||||||
|
Usage: "Password",
|
||||||
|
EnvVar: SWARM_ACCESS_PASSWORD,
|
||||||
|
}
|
||||||
|
SwarmDryRunFlag = cli.BoolFlag{
|
||||||
|
Name: "dry-run",
|
||||||
|
Usage: "dry-run",
|
||||||
|
}
|
||||||
|
CorsStringFlag = cli.StringFlag{
|
||||||
|
Name: "corsdomain",
|
||||||
|
Usage: "Domain on which to send Access-Control-Allow-Origin header (multiple domains can be supplied separated by a ',')",
|
||||||
|
EnvVar: SWARM_ENV_CORS,
|
||||||
|
}
|
||||||
|
SwarmStorePath = cli.StringFlag{
|
||||||
|
Name: "store.path",
|
||||||
|
Usage: "Path to leveldb chunk DB (default <$GETH_ENV_DIR>/swarm/bzz-<$BZZ_KEY>/chunks)",
|
||||||
|
EnvVar: SWARM_ENV_STORE_PATH,
|
||||||
|
}
|
||||||
|
SwarmStoreCapacity = cli.Uint64Flag{
|
||||||
|
Name: "store.size",
|
||||||
|
Usage: "Number of chunks (5M is roughly 20-25GB) (default 5000000)",
|
||||||
|
EnvVar: SWARM_ENV_STORE_CAPACITY,
|
||||||
|
}
|
||||||
|
SwarmStoreCacheCapacity = cli.UintFlag{
|
||||||
|
Name: "store.cache.size",
|
||||||
|
Usage: "Number of recent chunks cached in memory (default 5000)",
|
||||||
|
EnvVar: SWARM_ENV_STORE_CACHE_CAPACITY,
|
||||||
|
}
|
||||||
|
SwarmCompressedFlag = cli.BoolFlag{
|
||||||
|
Name: "compressed",
|
||||||
|
Usage: "Prints encryption keys in compressed form",
|
||||||
|
}
|
||||||
|
SwarmFeedNameFlag = cli.StringFlag{
|
||||||
|
Name: "name",
|
||||||
|
Usage: "User-defined name for the new feed, limited to 32 characters. If combined with topic, it will refer to a subtopic with this name",
|
||||||
|
}
|
||||||
|
SwarmFeedTopicFlag = cli.StringFlag{
|
||||||
|
Name: "topic",
|
||||||
|
Usage: "User-defined topic this feed is tracking, hex encoded. Limited to 64 hexadecimal characters",
|
||||||
|
}
|
||||||
|
SwarmFeedDataOnCreateFlag = cli.StringFlag{
|
||||||
|
Name: "data",
|
||||||
|
Usage: "Initializes the feed with the given hex-encoded data. Data must be prefixed by 0x",
|
||||||
|
}
|
||||||
|
SwarmFeedManifestFlag = cli.StringFlag{
|
||||||
|
Name: "manifest",
|
||||||
|
Usage: "Refers to the feed through a manifest",
|
||||||
|
}
|
||||||
|
SwarmFeedUserFlag = cli.StringFlag{
|
||||||
|
Name: "user",
|
||||||
|
Usage: "Indicates the user who updates the feed",
|
||||||
|
}
|
||||||
|
)
|
@ -30,6 +30,43 @@ import (
|
|||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var fsCommand = cli.Command{
|
||||||
|
Name: "fs",
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Usage: "perform FUSE operations",
|
||||||
|
ArgsUsage: "fs COMMAND",
|
||||||
|
Description: "Performs FUSE operations by mounting/unmounting/listing mount points. This assumes you already have a Swarm node running locally. For all operation you must reference the correct path to bzzd.ipc in order to communicate with the node",
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
{
|
||||||
|
Action: mount,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "mount",
|
||||||
|
Flags: []cli.Flag{utils.IPCPathFlag},
|
||||||
|
Usage: "mount a swarm hash to a mount point",
|
||||||
|
ArgsUsage: "swarm fs mount --ipcpath <path to bzzd.ipc> <manifest hash> <mount point>",
|
||||||
|
Description: "Mounts a Swarm manifest hash to a given mount point. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Action: unmount,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "unmount",
|
||||||
|
Flags: []cli.Flag{utils.IPCPathFlag},
|
||||||
|
Usage: "unmount a swarmfs mount",
|
||||||
|
ArgsUsage: "swarm fs unmount --ipcpath <path to bzzd.ipc> <mount point>",
|
||||||
|
Description: "Unmounts a swarmfs mount residing at <mount point>. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Action: listMounts,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "list",
|
||||||
|
Flags: []cli.Flag{utils.IPCPathFlag},
|
||||||
|
Usage: "list swarmfs mounts",
|
||||||
|
ArgsUsage: "swarm fs list --ipcpath <path to bzzd.ipc>",
|
||||||
|
Description: "Lists all mounted swarmfs volumes. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
func mount(cliContext *cli.Context) {
|
func mount(cliContext *cli.Context) {
|
||||||
args := cliContext.Args()
|
args := cliContext.Args()
|
||||||
if len(args) < 2 {
|
if len(args) < 2 {
|
||||||
|
@ -27,6 +27,15 @@ import (
|
|||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var hashCommand = cli.Command{
|
||||||
|
Action: hash,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "hash",
|
||||||
|
Usage: "print the swarm hash of a file or directory",
|
||||||
|
ArgsUsage: "<file>",
|
||||||
|
Description: "Prints the swarm hash of file or directory",
|
||||||
|
}
|
||||||
|
|
||||||
func hash(ctx *cli.Context) {
|
func hash(ctx *cli.Context) {
|
||||||
args := ctx.Args()
|
args := ctx.Args()
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
|
@ -27,6 +27,15 @@ import (
|
|||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var listCommand = cli.Command{
|
||||||
|
Action: list,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "ls",
|
||||||
|
Usage: "list files and directories contained in a manifest",
|
||||||
|
ArgsUsage: "<manifest> [<prefix>]",
|
||||||
|
Description: "Lists files and directories contained in a manifest",
|
||||||
|
}
|
||||||
|
|
||||||
func list(ctx *cli.Context) {
|
func list(ctx *cli.Context) {
|
||||||
args := ctx.Args()
|
args := ctx.Args()
|
||||||
|
|
||||||
|
@ -70,165 +70,6 @@ var (
|
|||||||
gitCommit string // Git SHA1 commit hash of the release (set via linker flags)
|
gitCommit string // Git SHA1 commit hash of the release (set via linker flags)
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
ChequebookAddrFlag = cli.StringFlag{
|
|
||||||
Name: "chequebook",
|
|
||||||
Usage: "chequebook contract address",
|
|
||||||
EnvVar: SWARM_ENV_CHEQUEBOOK_ADDR,
|
|
||||||
}
|
|
||||||
SwarmAccountFlag = cli.StringFlag{
|
|
||||||
Name: "bzzaccount",
|
|
||||||
Usage: "Swarm account key file",
|
|
||||||
EnvVar: SWARM_ENV_ACCOUNT,
|
|
||||||
}
|
|
||||||
SwarmListenAddrFlag = cli.StringFlag{
|
|
||||||
Name: "httpaddr",
|
|
||||||
Usage: "Swarm HTTP API listening interface",
|
|
||||||
EnvVar: SWARM_ENV_LISTEN_ADDR,
|
|
||||||
}
|
|
||||||
SwarmPortFlag = cli.StringFlag{
|
|
||||||
Name: "bzzport",
|
|
||||||
Usage: "Swarm local http api port",
|
|
||||||
EnvVar: SWARM_ENV_PORT,
|
|
||||||
}
|
|
||||||
SwarmNetworkIdFlag = cli.IntFlag{
|
|
||||||
Name: "bzznetworkid",
|
|
||||||
Usage: "Network identifier (integer, default 3=swarm testnet)",
|
|
||||||
EnvVar: SWARM_ENV_NETWORK_ID,
|
|
||||||
}
|
|
||||||
SwarmSwapEnabledFlag = cli.BoolFlag{
|
|
||||||
Name: "swap",
|
|
||||||
Usage: "Swarm SWAP enabled (default false)",
|
|
||||||
EnvVar: SWARM_ENV_SWAP_ENABLE,
|
|
||||||
}
|
|
||||||
SwarmSwapAPIFlag = cli.StringFlag{
|
|
||||||
Name: "swap-api",
|
|
||||||
Usage: "URL of the Ethereum API provider to use to settle SWAP payments",
|
|
||||||
EnvVar: SWARM_ENV_SWAP_API,
|
|
||||||
}
|
|
||||||
SwarmSyncDisabledFlag = cli.BoolTFlag{
|
|
||||||
Name: "nosync",
|
|
||||||
Usage: "Disable swarm syncing",
|
|
||||||
EnvVar: SWARM_ENV_SYNC_DISABLE,
|
|
||||||
}
|
|
||||||
SwarmSyncUpdateDelay = cli.DurationFlag{
|
|
||||||
Name: "sync-update-delay",
|
|
||||||
Usage: "Duration for sync subscriptions update after no new peers are added (default 15s)",
|
|
||||||
EnvVar: SWARM_ENV_SYNC_UPDATE_DELAY,
|
|
||||||
}
|
|
||||||
SwarmMaxStreamPeerServersFlag = cli.IntFlag{
|
|
||||||
Name: "max-stream-peer-servers",
|
|
||||||
Usage: "Limit of Stream peer servers, 0 denotes unlimited",
|
|
||||||
EnvVar: SWARM_ENV_MAX_STREAM_PEER_SERVERS,
|
|
||||||
Value: 10000, // A very large default value is possible as stream servers have very small memory footprint
|
|
||||||
}
|
|
||||||
SwarmLightNodeEnabled = cli.BoolFlag{
|
|
||||||
Name: "lightnode",
|
|
||||||
Usage: "Enable Swarm LightNode (default false)",
|
|
||||||
EnvVar: SWARM_ENV_LIGHT_NODE_ENABLE,
|
|
||||||
}
|
|
||||||
SwarmDeliverySkipCheckFlag = cli.BoolFlag{
|
|
||||||
Name: "delivery-skip-check",
|
|
||||||
Usage: "Skip chunk delivery check (default false)",
|
|
||||||
EnvVar: SWARM_ENV_DELIVERY_SKIP_CHECK,
|
|
||||||
}
|
|
||||||
EnsAPIFlag = cli.StringSliceFlag{
|
|
||||||
Name: "ens-api",
|
|
||||||
Usage: "ENS API endpoint for a TLD and with contract address, can be repeated, format [tld:][contract-addr@]url",
|
|
||||||
EnvVar: SWARM_ENV_ENS_API,
|
|
||||||
}
|
|
||||||
SwarmApiFlag = cli.StringFlag{
|
|
||||||
Name: "bzzapi",
|
|
||||||
Usage: "Swarm HTTP endpoint",
|
|
||||||
Value: "http://127.0.0.1:8500",
|
|
||||||
}
|
|
||||||
SwarmRecursiveFlag = cli.BoolFlag{
|
|
||||||
Name: "recursive",
|
|
||||||
Usage: "Upload directories recursively",
|
|
||||||
}
|
|
||||||
SwarmWantManifestFlag = cli.BoolTFlag{
|
|
||||||
Name: "manifest",
|
|
||||||
Usage: "Automatic manifest upload (default true)",
|
|
||||||
}
|
|
||||||
SwarmUploadDefaultPath = cli.StringFlag{
|
|
||||||
Name: "defaultpath",
|
|
||||||
Usage: "path to file served for empty url path (none)",
|
|
||||||
}
|
|
||||||
SwarmAccessGrantKeyFlag = cli.StringFlag{
|
|
||||||
Name: "grant-key",
|
|
||||||
Usage: "grants a given public key access to an ACT",
|
|
||||||
}
|
|
||||||
SwarmAccessGrantKeysFlag = cli.StringFlag{
|
|
||||||
Name: "grant-keys",
|
|
||||||
Usage: "grants a given list of public keys in the following file (separated by line breaks) access to an ACT",
|
|
||||||
}
|
|
||||||
SwarmUpFromStdinFlag = cli.BoolFlag{
|
|
||||||
Name: "stdin",
|
|
||||||
Usage: "reads data to be uploaded from stdin",
|
|
||||||
}
|
|
||||||
SwarmUploadMimeType = cli.StringFlag{
|
|
||||||
Name: "mime",
|
|
||||||
Usage: "Manually specify MIME type",
|
|
||||||
}
|
|
||||||
SwarmEncryptedFlag = cli.BoolFlag{
|
|
||||||
Name: "encrypt",
|
|
||||||
Usage: "use encrypted upload",
|
|
||||||
}
|
|
||||||
SwarmAccessPasswordFlag = cli.StringFlag{
|
|
||||||
Name: "password",
|
|
||||||
Usage: "Password",
|
|
||||||
EnvVar: SWARM_ACCESS_PASSWORD,
|
|
||||||
}
|
|
||||||
SwarmDryRunFlag = cli.BoolFlag{
|
|
||||||
Name: "dry-run",
|
|
||||||
Usage: "dry-run",
|
|
||||||
}
|
|
||||||
CorsStringFlag = cli.StringFlag{
|
|
||||||
Name: "corsdomain",
|
|
||||||
Usage: "Domain on which to send Access-Control-Allow-Origin header (multiple domains can be supplied separated by a ',')",
|
|
||||||
EnvVar: SWARM_ENV_CORS,
|
|
||||||
}
|
|
||||||
SwarmStorePath = cli.StringFlag{
|
|
||||||
Name: "store.path",
|
|
||||||
Usage: "Path to leveldb chunk DB (default <$GETH_ENV_DIR>/swarm/bzz-<$BZZ_KEY>/chunks)",
|
|
||||||
EnvVar: SWARM_ENV_STORE_PATH,
|
|
||||||
}
|
|
||||||
SwarmStoreCapacity = cli.Uint64Flag{
|
|
||||||
Name: "store.size",
|
|
||||||
Usage: "Number of chunks (5M is roughly 20-25GB) (default 5000000)",
|
|
||||||
EnvVar: SWARM_ENV_STORE_CAPACITY,
|
|
||||||
}
|
|
||||||
SwarmStoreCacheCapacity = cli.UintFlag{
|
|
||||||
Name: "store.cache.size",
|
|
||||||
Usage: "Number of recent chunks cached in memory (default 5000)",
|
|
||||||
EnvVar: SWARM_ENV_STORE_CACHE_CAPACITY,
|
|
||||||
}
|
|
||||||
SwarmCompressedFlag = cli.BoolFlag{
|
|
||||||
Name: "compressed",
|
|
||||||
Usage: "Prints encryption keys in compressed form",
|
|
||||||
}
|
|
||||||
SwarmFeedNameFlag = cli.StringFlag{
|
|
||||||
Name: "name",
|
|
||||||
Usage: "User-defined name for the new feed, limited to 32 characters. If combined with topic, it will refer to a subtopic with this name",
|
|
||||||
}
|
|
||||||
SwarmFeedTopicFlag = cli.StringFlag{
|
|
||||||
Name: "topic",
|
|
||||||
Usage: "User-defined topic this feed is tracking, hex encoded. Limited to 64 hexadecimal characters",
|
|
||||||
}
|
|
||||||
SwarmFeedDataOnCreateFlag = cli.StringFlag{
|
|
||||||
Name: "data",
|
|
||||||
Usage: "Initializes the feed with the given hex-encoded data. Data must be prefixed by 0x",
|
|
||||||
}
|
|
||||||
SwarmFeedManifestFlag = cli.StringFlag{
|
|
||||||
Name: "manifest",
|
|
||||||
Usage: "Refers to the feed through a manifest",
|
|
||||||
}
|
|
||||||
SwarmFeedUserFlag = cli.StringFlag{
|
|
||||||
Name: "user",
|
|
||||||
Usage: "Indicates the user who updates the feed",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
//declare a few constant error messages, useful for later error check comparisons in test
|
//declare a few constant error messages, useful for later error check comparisons in test
|
||||||
var (
|
var (
|
||||||
SWARM_ERR_NO_BZZACCOUNT = "bzzaccount option is required but not set; check your config file, command line or environment variables"
|
SWARM_ERR_NO_BZZACCOUNT = "bzzaccount option is required but not set; check your config file, command line or environment variables"
|
||||||
@ -279,267 +120,24 @@ func init() {
|
|||||||
Usage: "Print public key information",
|
Usage: "Print public key information",
|
||||||
Description: "The output of this command is supposed to be machine-readable",
|
Description: "The output of this command is supposed to be machine-readable",
|
||||||
},
|
},
|
||||||
{
|
// See upload.go
|
||||||
Action: upload,
|
upCommand,
|
||||||
CustomHelpTemplate: helpTemplate,
|
// See access.go
|
||||||
Name: "up",
|
accessCommand,
|
||||||
Usage: "uploads a file or directory to swarm using the HTTP API",
|
// See feeds.go
|
||||||
ArgsUsage: "<file>",
|
feedCommand,
|
||||||
Flags: []cli.Flag{SwarmEncryptedFlag},
|
// See list.go
|
||||||
Description: "uploads a file or directory to swarm using the HTTP API and prints the root hash",
|
listCommand,
|
||||||
},
|
// See hash.go
|
||||||
{
|
hashCommand,
|
||||||
CustomHelpTemplate: helpTemplate,
|
// See download.go
|
||||||
Name: "access",
|
downloadCommand,
|
||||||
Usage: "encrypts a reference and embeds it into a root manifest",
|
// See manifest.go
|
||||||
ArgsUsage: "<ref>",
|
manifestCommand,
|
||||||
Description: "encrypts a reference and embeds it into a root manifest",
|
// See fs.go
|
||||||
Subcommands: []cli.Command{
|
fsCommand,
|
||||||
{
|
// See db.go
|
||||||
CustomHelpTemplate: helpTemplate,
|
dbCommand,
|
||||||
Name: "new",
|
|
||||||
Usage: "encrypts a reference and embeds it into a root manifest",
|
|
||||||
ArgsUsage: "<ref>",
|
|
||||||
Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest",
|
|
||||||
Subcommands: []cli.Command{
|
|
||||||
{
|
|
||||||
Action: accessNewPass,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Flags: []cli.Flag{
|
|
||||||
utils.PasswordFileFlag,
|
|
||||||
SwarmDryRunFlag,
|
|
||||||
},
|
|
||||||
Name: "pass",
|
|
||||||
Usage: "encrypts a reference with a password and embeds it into a root manifest",
|
|
||||||
ArgsUsage: "<ref>",
|
|
||||||
Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Action: accessNewPK,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Flags: []cli.Flag{
|
|
||||||
utils.PasswordFileFlag,
|
|
||||||
SwarmDryRunFlag,
|
|
||||||
SwarmAccessGrantKeyFlag,
|
|
||||||
},
|
|
||||||
Name: "pk",
|
|
||||||
Usage: "encrypts a reference with the node's private key and a given grantee's public key and embeds it into a root manifest",
|
|
||||||
ArgsUsage: "<ref>",
|
|
||||||
Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Action: accessNewACT,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Flags: []cli.Flag{
|
|
||||||
SwarmAccessGrantKeysFlag,
|
|
||||||
SwarmDryRunFlag,
|
|
||||||
utils.PasswordFileFlag,
|
|
||||||
},
|
|
||||||
Name: "act",
|
|
||||||
Usage: "encrypts a reference with the node's private key and a given grantee's public key and embeds it into a root manifest",
|
|
||||||
ArgsUsage: "<ref>",
|
|
||||||
Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "feed",
|
|
||||||
Usage: "(Advanced) Create and update Swarm Feeds",
|
|
||||||
ArgsUsage: "<create|update|info>",
|
|
||||||
Description: "Works with Swarm Feeds",
|
|
||||||
Subcommands: []cli.Command{
|
|
||||||
{
|
|
||||||
Action: feedCreateManifest,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "create",
|
|
||||||
Usage: "creates and publishes a new feed manifest",
|
|
||||||
Description: `creates and publishes a new feed manifest pointing to a specified user's updates about a particular topic.
|
|
||||||
The feed topic can be built in the following ways:
|
|
||||||
* use --topic to set the topic to an arbitrary binary hex string.
|
|
||||||
* use --name to set the topic to a human-readable name.
|
|
||||||
For example --name could be set to "profile-picture", meaning this feed allows to get this user's current profile picture.
|
|
||||||
* use both --topic and --name to create named subtopics.
|
|
||||||
For example, --topic could be set to an Ethereum contract address and --name could be set to "comments", meaning
|
|
||||||
this feed tracks a discussion about that contract.
|
|
||||||
The --user flag allows to have this manifest refer to a user other than yourself. If not specified,
|
|
||||||
it will then default to your local account (--bzzaccount)`,
|
|
||||||
Flags: []cli.Flag{SwarmFeedNameFlag, SwarmFeedTopicFlag, SwarmFeedUserFlag},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Action: feedUpdate,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "update",
|
|
||||||
Usage: "updates the content of an existing Swarm Feed",
|
|
||||||
ArgsUsage: "<0x Hex data>",
|
|
||||||
Description: `publishes a new update on the specified topic
|
|
||||||
The feed topic can be built in the following ways:
|
|
||||||
* use --topic to set the topic to an arbitrary binary hex string.
|
|
||||||
* use --name to set the topic to a human-readable name.
|
|
||||||
For example --name could be set to "profile-picture", meaning this feed allows to get this user's current profile picture.
|
|
||||||
* use both --topic and --name to create named subtopics.
|
|
||||||
For example, --topic could be set to an Ethereum contract address and --name could be set to "comments", meaning
|
|
||||||
this feed tracks a discussion about that contract.
|
|
||||||
|
|
||||||
If you have a manifest, you can specify it with --manifest to refer to the feed,
|
|
||||||
instead of using --topic / --name
|
|
||||||
`,
|
|
||||||
Flags: []cli.Flag{SwarmFeedManifestFlag, SwarmFeedNameFlag, SwarmFeedTopicFlag},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Action: feedInfo,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "info",
|
|
||||||
Usage: "obtains information about an existing Swarm feed",
|
|
||||||
Description: `obtains information about an existing Swarm feed
|
|
||||||
The topic can be specified directly with the --topic flag as an hex string
|
|
||||||
If no topic is specified, the default topic (zero) will be used
|
|
||||||
The --name flag can be used to specify subtopics with a specific name.
|
|
||||||
The --user flag allows to refer to a user other than yourself. If not specified,
|
|
||||||
it will then default to your local account (--bzzaccount)
|
|
||||||
If you have a manifest, you can specify it with --manifest instead of --topic / --name / ---user
|
|
||||||
to refer to the feed`,
|
|
||||||
Flags: []cli.Flag{SwarmFeedManifestFlag, SwarmFeedNameFlag, SwarmFeedTopicFlag, SwarmFeedUserFlag},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Action: list,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "ls",
|
|
||||||
Usage: "list files and directories contained in a manifest",
|
|
||||||
ArgsUsage: "<manifest> [<prefix>]",
|
|
||||||
Description: "Lists files and directories contained in a manifest",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Action: hash,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "hash",
|
|
||||||
Usage: "print the swarm hash of a file or directory",
|
|
||||||
ArgsUsage: "<file>",
|
|
||||||
Description: "Prints the swarm hash of file or directory",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Action: download,
|
|
||||||
Name: "down",
|
|
||||||
Flags: []cli.Flag{SwarmRecursiveFlag, SwarmAccessPasswordFlag},
|
|
||||||
Usage: "downloads a swarm manifest or a file inside a manifest",
|
|
||||||
ArgsUsage: " <uri> [<dir>]",
|
|
||||||
Description: `Downloads a swarm bzz uri to the given dir. When no dir is provided, working directory is assumed. --recursive flag is expected when downloading a manifest with multiple entries.`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Name: "manifest",
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Usage: "perform operations on swarm manifests",
|
|
||||||
ArgsUsage: "COMMAND",
|
|
||||||
Description: "Updates a MANIFEST by adding/removing/updating the hash of a path.\nCOMMAND could be: add, update, remove",
|
|
||||||
Subcommands: []cli.Command{
|
|
||||||
{
|
|
||||||
Action: manifestAdd,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "add",
|
|
||||||
Usage: "add a new path to the manifest",
|
|
||||||
ArgsUsage: "<MANIFEST> <path> <hash>",
|
|
||||||
Description: "Adds a new path to the manifest",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Action: manifestUpdate,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "update",
|
|
||||||
Usage: "update the hash for an already existing path in the manifest",
|
|
||||||
ArgsUsage: "<MANIFEST> <path> <newhash>",
|
|
||||||
Description: "Update the hash for an already existing path in the manifest",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Action: manifestRemove,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "remove",
|
|
||||||
Usage: "removes a path from the manifest",
|
|
||||||
ArgsUsage: "<MANIFEST> <path>",
|
|
||||||
Description: "Removes a path from the manifest",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Name: "fs",
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Usage: "perform FUSE operations",
|
|
||||||
ArgsUsage: "fs COMMAND",
|
|
||||||
Description: "Performs FUSE operations by mounting/unmounting/listing mount points. This assumes you already have a Swarm node running locally. For all operation you must reference the correct path to bzzd.ipc in order to communicate with the node",
|
|
||||||
Subcommands: []cli.Command{
|
|
||||||
{
|
|
||||||
Action: mount,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "mount",
|
|
||||||
Flags: []cli.Flag{utils.IPCPathFlag},
|
|
||||||
Usage: "mount a swarm hash to a mount point",
|
|
||||||
ArgsUsage: "swarm fs mount --ipcpath <path to bzzd.ipc> <manifest hash> <mount point>",
|
|
||||||
Description: "Mounts a Swarm manifest hash to a given mount point. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Action: unmount,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "unmount",
|
|
||||||
Flags: []cli.Flag{utils.IPCPathFlag},
|
|
||||||
Usage: "unmount a swarmfs mount",
|
|
||||||
ArgsUsage: "swarm fs unmount --ipcpath <path to bzzd.ipc> <mount point>",
|
|
||||||
Description: "Unmounts a swarmfs mount residing at <mount point>. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Action: listMounts,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "list",
|
|
||||||
Flags: []cli.Flag{utils.IPCPathFlag},
|
|
||||||
Usage: "list swarmfs mounts",
|
|
||||||
ArgsUsage: "swarm fs list --ipcpath <path to bzzd.ipc>",
|
|
||||||
Description: "Lists all mounted swarmfs volumes. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Name: "db",
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Usage: "manage the local chunk database",
|
|
||||||
ArgsUsage: "db COMMAND",
|
|
||||||
Description: "Manage the local chunk database",
|
|
||||||
Subcommands: []cli.Command{
|
|
||||||
{
|
|
||||||
Action: dbExport,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "export",
|
|
||||||
Usage: "export a local chunk database as a tar archive (use - to send to stdout)",
|
|
||||||
ArgsUsage: "<chunkdb> <file>",
|
|
||||||
Description: `
|
|
||||||
Export a local chunk database as a tar archive (use - to send to stdout).
|
|
||||||
|
|
||||||
swarm db export ~/.ethereum/swarm/bzz-KEY/chunks chunks.tar
|
|
||||||
|
|
||||||
The export may be quite large, consider piping the output through the Unix
|
|
||||||
pv(1) tool to get a progress bar:
|
|
||||||
|
|
||||||
swarm db export ~/.ethereum/swarm/bzz-KEY/chunks - | pv > chunks.tar
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Action: dbImport,
|
|
||||||
CustomHelpTemplate: helpTemplate,
|
|
||||||
Name: "import",
|
|
||||||
Usage: "import chunks from a tar archive into a local chunk database (use - to read from stdin)",
|
|
||||||
ArgsUsage: "<chunkdb> <file>",
|
|
||||||
Description: `Import chunks from a tar archive into a local chunk database (use - to read from stdin).
|
|
||||||
|
|
||||||
swarm db import ~/.ethereum/swarm/bzz-KEY/chunks chunks.tar
|
|
||||||
|
|
||||||
The import may be quite large, consider piping the input through the Unix
|
|
||||||
pv(1) tool to get a progress bar:
|
|
||||||
|
|
||||||
pv chunks.tar | swarm db import ~/.ethereum/swarm/bzz-KEY/chunks -`,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
// See config.go
|
// See config.go
|
||||||
DumpConfigCommand,
|
DumpConfigCommand,
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,40 @@ import (
|
|||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var manifestCommand = cli.Command{
|
||||||
|
Name: "manifest",
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Usage: "perform operations on swarm manifests",
|
||||||
|
ArgsUsage: "COMMAND",
|
||||||
|
Description: "Updates a MANIFEST by adding/removing/updating the hash of a path.\nCOMMAND could be: add, update, remove",
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
{
|
||||||
|
Action: manifestAdd,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "add",
|
||||||
|
Usage: "add a new path to the manifest",
|
||||||
|
ArgsUsage: "<MANIFEST> <path> <hash>",
|
||||||
|
Description: "Adds a new path to the manifest",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Action: manifestUpdate,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "update",
|
||||||
|
Usage: "update the hash for an already existing path in the manifest",
|
||||||
|
ArgsUsage: "<MANIFEST> <path> <newhash>",
|
||||||
|
Description: "Update the hash for an already existing path in the manifest",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Action: manifestRemove,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "remove",
|
||||||
|
Usage: "removes a path from the manifest",
|
||||||
|
ArgsUsage: "<MANIFEST> <path>",
|
||||||
|
Description: "Removes a path from the manifest",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
// manifestAdd adds a new entry to the manifest at the given path.
|
// manifestAdd adds a new entry to the manifest at the given path.
|
||||||
// New entry hash, the last argument, must be the hash of a manifest
|
// New entry hash, the last argument, must be the hash of a manifest
|
||||||
// with only one entry, which meta-data will be added to the original manifest.
|
// with only one entry, which meta-data will be added to the original manifest.
|
||||||
|
@ -34,8 +34,17 @@ import (
|
|||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func upload(ctx *cli.Context) {
|
var upCommand = cli.Command{
|
||||||
|
Action: upload,
|
||||||
|
CustomHelpTemplate: helpTemplate,
|
||||||
|
Name: "up",
|
||||||
|
Usage: "uploads a file or directory to swarm using the HTTP API",
|
||||||
|
ArgsUsage: "<file>",
|
||||||
|
Flags: []cli.Flag{SwarmEncryptedFlag},
|
||||||
|
Description: "uploads a file or directory to swarm using the HTTP API and prints the root hash",
|
||||||
|
}
|
||||||
|
|
||||||
|
func upload(ctx *cli.Context) {
|
||||||
args := ctx.Args()
|
args := ctx.Args()
|
||||||
var (
|
var (
|
||||||
bzzapi = strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/")
|
bzzapi = strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/")
|
||||||
|
Loading…
Reference in New Issue
Block a user