aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/swarm/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/swarm/main.go')
-rw-r--r--cmd/swarm/main.go438
1 files changed, 18 insertions, 420 deletions
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,
}