aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/swarm
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/swarm')
-rw-r--r--cmd/swarm/access.go60
-rw-r--r--cmd/swarm/db.go42
-rw-r--r--cmd/swarm/download.go9
-rw-r--r--cmd/swarm/feeds.go62
-rw-r--r--cmd/swarm/flags.go179
-rw-r--r--cmd/swarm/fs.go37
-rw-r--r--cmd/swarm/hash.go9
-rw-r--r--cmd/swarm/list.go9
-rw-r--r--cmd/swarm/main.go438
-rw-r--r--cmd/swarm/manifest.go34
-rw-r--r--cmd/swarm/upload.go11
11 files changed, 468 insertions, 422 deletions
diff --git a/cmd/swarm/access.go b/cmd/swarm/access.go
index dd2d513c2..629781edd 100644
--- a/cmd/swarm/access.go
+++ b/cmd/swarm/access.go
@@ -29,7 +29,65 @@ import (
"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() {
if _, err := io.ReadFull(rand.Reader, salt); err != nil {
diff --git a/cmd/swarm/db.go b/cmd/swarm/db.go
index 107fbf100..7916beffc 100644
--- a/cmd/swarm/db.go
+++ b/cmd/swarm/db.go
@@ -29,6 +29,48 @@ import (
"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) {
args := ctx.Args()
if len(args) != 3 {
diff --git a/cmd/swarm/download.go b/cmd/swarm/download.go
index 91bc2c93a..fcbefa020 100644
--- a/cmd/swarm/download.go
+++ b/cmd/swarm/download.go
@@ -28,6 +28,15 @@ import (
"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) {
log.Debug("downloading content using swarm down")
args := ctx.Args()
diff --git a/cmd/swarm/feeds.go b/cmd/swarm/feeds.go
index 6806c6cf4..f26a8cc7d 100644
--- a/cmd/swarm/feeds.go
+++ b/cmd/swarm/feeds.go
@@ -31,6 +31,68 @@ import (
"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 {
return feed.NewGenericSigner(getPrivKey(ctx))
}
diff --git a/cmd/swarm/flags.go b/cmd/swarm/flags.go
new file mode 100644
index 000000000..7e891f302
--- /dev/null
+++ b/cmd/swarm/flags.go
@@ -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",
+ }
+)
diff --git a/cmd/swarm/fs.go b/cmd/swarm/fs.go
index 3dc38ca4d..b970b2e8c 100644
--- a/cmd/swarm/fs.go
+++ b/cmd/swarm/fs.go
@@ -30,6 +30,43 @@ import (
"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) {
args := cliContext.Args()
if len(args) < 2 {
diff --git a/cmd/swarm/hash.go b/cmd/swarm/hash.go
index d679806e3..471feb53d 100644
--- a/cmd/swarm/hash.go
+++ b/cmd/swarm/hash.go
@@ -27,6 +27,15 @@ import (
"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) {
args := ctx.Args()
if len(args) < 1 {
diff --git a/cmd/swarm/list.go b/cmd/swarm/list.go
index 01b3f4ab6..5d35154a5 100644
--- a/cmd/swarm/list.go
+++ b/cmd/swarm/list.go
@@ -27,6 +27,15 @@ import (
"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) {
args := ctx.Args()
diff --git a/cmd/swarm/main.go b/cmd/swarm/main.go
index 88e6b0b0b..ccbb24eec 100644
--- a/cmd/swarm/main.go
+++ b/cmd/swarm/main.go
@@ -70,165 +70,6 @@ var (
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
var (
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",
Description: "The output of this command is supposed to be machine-readable",
},
- {
- 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",
- },
- {
- 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",
- },
- },
- },
- },
- },
- {
- 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 upload.go
+ upCommand,
+ // See access.go
+ accessCommand,
+ // See feeds.go
+ feedCommand,
+ // See list.go
+ listCommand,
+ // See hash.go
+ hashCommand,
+ // See download.go
+ downloadCommand,
+ // See manifest.go
+ manifestCommand,
+ // See fs.go
+ fsCommand,
+ // See db.go
+ dbCommand,
// See config.go
DumpConfigCommand,
}
diff --git a/cmd/swarm/manifest.go b/cmd/swarm/manifest.go
index 0216ffc1d..312c72fa2 100644
--- a/cmd/swarm/manifest.go
+++ b/cmd/swarm/manifest.go
@@ -28,6 +28,40 @@ import (
"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.
// 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.
diff --git a/cmd/swarm/upload.go b/cmd/swarm/upload.go
index 2225127cf..0dbe896e2 100644
--- a/cmd/swarm/upload.go
+++ b/cmd/swarm/upload.go
@@ -34,8 +34,17 @@ import (
"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()
var (
bzzapi = strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/")