Documentation ¶
Index ¶
- Constants
- Variables
- func DetectContentType(fileName string, f io.ReadSeeker) (string, error)
- func DoACT(ctx *cli.Context, privateKey *ecdsa.PrivateKey, salt []byte, grantees []string, ...) (accessKey []byte, ae *AccessEntry, actManifest *Manifest, err error)
- func NOOPDecrypt(*ManifestEntry) error
- func NewSessionKeyPK(private *ecdsa.PrivateKey, public *ecdsa.PublicKey, salt []byte) ([]byte, error)
- func NewSessionKeyPassword(password string, accessEntry *AccessEntry) ([]byte, error)
- func RegularSlashes(path string) (res string)
- type API
- func (a *API) AddFile(ctx context.Context, mhash, path, fname string, content []byte, ...) (storage.Address, string, error)
- func (a *API) AppendFile(ctx context.Context, mhash, path, fname string, existingSize int64, ...) (storage.Address, string, error)
- func (a *API) BuildDirectoryTree(ctx context.Context, mhash string, nameresolver bool) (addr storage.Address, manifestEntryMap map[string]*manifestTrieEntry, ...)
- func (a *API) Delete(ctx context.Context, addr string, path string) (storage.Address, error)
- func (a *API) FeedsHashSize() int
- func (a *API) FeedsLookup(ctx context.Context, query *feed.Query) ([]byte, error)
- func (a *API) FeedsNewRequest(ctx context.Context, feed *feed.Feed) (*feed.Request, error)
- func (a *API) FeedsUpdate(ctx context.Context, request *feed.Request) (storage.Address, error)
- func (a *API) Get(ctx context.Context, decrypt DecryptFunc, manifestAddr storage.Address, ...) (reader storage.LazySectionReader, mimeType string, status int, ...)
- func (a *API) GetDirectoryTar(ctx context.Context, decrypt DecryptFunc, uri *URI) (io.ReadCloser, error)
- func (a *API) GetManifestList(ctx context.Context, decryptor DecryptFunc, addr storage.Address, ...) (list ManifestList, err error)
- func (a *API) Modify(ctx context.Context, addr storage.Address, ...) (storage.Address, error)
- func (a *API) NewFeedManifest(ctx context.Context, feed *feed.Feed) (storage.Address, error)
- func (a *API) NewManifest(ctx context.Context, toEncrypt bool) (storage.Address, error)
- func (a *API) NewManifestWalker(ctx context.Context, addr storage.Address, decrypt DecryptFunc, ...) (*ManifestWalker, error)
- func (a *API) NewManifestWriter(ctx context.Context, addr storage.Address, quitC chan bool) (*ManifestWriter, error)
- func (a *API) Put(ctx context.Context, content string, contentType string, toEncrypt bool) (k storage.Address, wait func(context.Context) error, err error)
- func (a *API) RemoveFile(ctx context.Context, mhash string, path string, fname string, ...) (string, error)
- func (a *API) Resolve(ctx context.Context, address string) (storage.Address, error)
- func (a *API) ResolveFeed(ctx context.Context, uri *URI, values feed.Values) (*feed.Feed, error)
- func (a *API) ResolveFeedManifest(ctx context.Context, addr storage.Address) (*feed.Feed, error)
- func (a *API) ResolveURI(ctx context.Context, uri *URI, credentials string) (storage.Address, error)
- func (a *API) Retrieve(ctx context.Context, addr storage.Address) (reader storage.LazySectionReader, isEncrypted bool)
- func (a *API) Store(ctx context.Context, data io.Reader, size int64, toEncrypt bool) (addr storage.Address, wait func(ctx context.Context) error, err error)
- func (a *API) UpdateManifest(ctx context.Context, addr storage.Address, ...) (storage.Address, error)
- func (a *API) UploadTar(ctx context.Context, bodyReader io.ReadCloser, ...) (storage.Address, error)
- type AccessEntry
- func DoPK(ctx *cli.Context, privateKey *ecdsa.PrivateKey, granteePublicKey string, ...) (sessionKey []byte, ae *AccessEntry, err error)
- func DoPassword(ctx *cli.Context, password string, salt []byte) (sessionKey []byte, ae *AccessEntry, err error)
- func NewAccessEntryACT(publisher string, salt []byte, act string) (*AccessEntry, error)
- func NewAccessEntryPK(publisher string, salt []byte) (*AccessEntry, error)
- func NewAccessEntryPassword(salt []byte, kdfParams *KdfParams) (*AccessEntry, error)
- type AccessType
- type Config
- type Control
- type DecryptFunc
- type ErrResolve
- type FileSystem
- type KdfParams
- type Manifest
- type ManifestEntry
- type ManifestList
- type ManifestWalker
- type ManifestWriter
- type MultiResolver
- func (m *MultiResolver) HeaderByNumber(ctx context.Context, name string, blockNr *big.Int) (*types.Header, error)
- func (m *MultiResolver) Resolve(addr string) (h common.Hash, err error)
- func (m *MultiResolver) SetNameHash(nameHash func(string) common.Hash)
- func (m *MultiResolver) ValidateOwner(name string, address common.Address) (bool, error)
- type MultiResolverOption
- type NoResolverError
- type RefEncryption
- type ResolveValidator
- type Resolver
- type Response
- type Storage
- func (s *Storage) Get(ctx context.Context, bzzpath string) (*Response, error)
- func (s *Storage) Modify(ctx context.Context, rootHash, path, contentHash, contentType string) (newRootHash string, err error)
- func (s *Storage) Put(ctx context.Context, content string, contentType string, toEncrypt bool) (storage.Address, func(context.Context) error, error)
- type URI
- func (u *URI) Address() storage.Address
- func (u *URI) Feed() bool
- func (u *URI) Hash() bool
- func (u *URI) Immutable() bool
- func (u *URI) List() bool
- func (u *URI) MarshalJSON() (out []byte, err error)
- func (u *URI) Raw() bool
- func (u *URI) String() string
- func (u *URI) UnmarshalJSON(value []byte) error
- type WalkFn
Constants ¶
const ( DefaultHTTPListenAddr = "127.0.0.1" DefaultHTTPPort = "8500" )
const ( ManifestType = "application/bzz-manifest+json" FeedContentType = "application/bzz-feed" )
const AccessTypeACT = AccessType("act")
const AccessTypePK = AccessType("pk")
const AccessTypePass = AccessType("pass")
const EMPTY_CREDENTIALS = ""
const MimeOctetStream = "application/octet-stream"
MimeOctetStream default value of http Content-Type header
Variables ¶
var ( ErrDecrypt = errors.New("cant decrypt - forbidden") ErrUnknownAccessType = errors.New("unknown access type (or not implemented)") ErrDecryptDomainForbidden = errors.New("decryption request domain forbidden - can only decrypt on localhost") AllowedDecryptDomains = []string{ "localhost", "127.0.0.1", } )
var DefaultKdfParams = NewKdfParams(262144, 1, 8)
var ErrCannotLoadFeedManifest = errors.New("Cannot load feed manifest")
ErrCannotLoadFeedManifest is returned when looking up a feeds manifest fails
var ErrCannotResolveFeed = errors.New("Cannot resolve Feed")
ErrCannotResolveFeed is returned when values provided are not enough or invalid to recreate a feed out of them.
var ErrCannotResolveFeedURI = errors.New("Cannot resolve Feed URI")
ErrCannotResolveFeedURI is returned when the ENS resolver is not able to translate a name to a Swarm feed
var ErrNotAFeedManifest = errors.New("Not a feed manifest")
ErrNotAFeedManifest is returned when the address provided returned something other than a valid manifest
var (
ErrNotFound = errors.New("not found")
)
var ErrSkipManifest = errors.New("skip this manifest")
ErrSkipManifest is used as a return value from WalkFn to indicate that the manifest should be skipped
Functions ¶
func DetectContentType ¶
func DetectContentType(fileName string, f io.ReadSeeker) (string, error)
DetectContentType by file file extension, or fallback to content sniff
func DoACT ¶
func DoACT(ctx *cli.Context, privateKey *ecdsa.PrivateKey, salt []byte, grantees []string, encryptPasswords []string) (accessKey []byte, ae *AccessEntry, actManifest *Manifest, err error)
DoACT is a helper function to the CLI API that handles the entire business logic for creating a access key, access entry and ACT manifest (including uploading it) given the cli context, ec keys, password grantees and salt
func NOOPDecrypt ¶
func NOOPDecrypt(*ManifestEntry) error
NOOPDecrypt is a generic decrypt function that is passed into the API in places where real ACT decryption capabilities are either unwanted, or alternatively, cannot be implemented in the immediate scope
func NewSessionKeyPK ¶
func NewSessionKeyPK(private *ecdsa.PrivateKey, public *ecdsa.PublicKey, salt []byte) ([]byte, error)
NewSessionKeyPK creates a new ACT Session Key using an ECDH shared secret for the given key pair and the given salt value
func NewSessionKeyPassword ¶
func NewSessionKeyPassword(password string, accessEntry *AccessEntry) ([]byte, error)
NewSessionKeyPassword creates a session key based on a shared secret (password) and the given salt and kdf parameters in the access entry
func RegularSlashes ¶
file system manifest always contains regularized paths no leading or trailing slashes, only single slashes inside
Types ¶
type API ¶
type API struct { Decryptor func(context.Context, string) DecryptFunc // contains filtered or unexported fields }
API implements webserver/file system related content storage and retrieval on top of the FileStore it is the public interface of the FileStore which is included in the etsc stack
func NewAPI ¶
func NewAPI(fileStore *storage.FileStore, dns Resolver, feedHandler *feed.Handler, pk *ecdsa.PrivateKey) (self *API)
NewAPI the api constructor initialises a new API instance.
func (*API) AddFile ¶
func (a *API) AddFile(ctx context.Context, mhash, path, fname string, content []byte, nameresolver bool) (storage.Address, string, error)
AddFile creates a new manifest entry, adds it to swarm, then adds a file to swarm.
func (*API) AppendFile ¶
func (a *API) AppendFile(ctx context.Context, mhash, path, fname string, existingSize int64, content []byte, oldAddr storage.Address, offset int64, addSize int64, nameresolver bool) (storage.Address, string, error)
AppendFile removes old manifest, appends file entry to new manifest and adds it to Swarm.
func (*API) BuildDirectoryTree ¶
func (a *API) BuildDirectoryTree(ctx context.Context, mhash string, nameresolver bool) (addr storage.Address, manifestEntryMap map[string]*manifestTrieEntry, err error)
BuildDirectoryTree used by swarmfs_unix
func (*API) FeedsHashSize ¶
FeedsHashSize returned the size of the digest produced by Swarm feeds' hashing function
func (*API) FeedsLookup ¶
FeedsLookup finds Swarm feeds updates at specific points in time, or the latest update
func (*API) FeedsNewRequest ¶
FeedsNewRequest creates a Request object to update a specific feed
func (*API) FeedsUpdate ¶
FeedsUpdate publishes a new update on the given feed
func (*API) Get ¶
func (a *API) Get(ctx context.Context, decrypt DecryptFunc, manifestAddr storage.Address, path string) (reader storage.LazySectionReader, mimeType string, status int, contentAddr storage.Address, err error)
Get uses iterative manifest retrieval and prefix matching to resolve basePath to content using FileStore retrieve it returns a section reader, mimeType, status, the key of the actual content and an error
func (*API) GetDirectoryTar ¶
func (a *API) GetDirectoryTar(ctx context.Context, decrypt DecryptFunc, uri *URI) (io.ReadCloser, error)
GetDirectoryTar fetches a requested directory as a tarstream it returns an io.Reader and an error. Do not forget to Close() the returned ReadCloser
func (*API) GetManifestList ¶
func (a *API) GetManifestList(ctx context.Context, decryptor DecryptFunc, addr storage.Address, prefix string) (list ManifestList, err error)
GetManifestList lists the manifest entries for the specified address and prefix and returns it as a ManifestList
func (*API) Modify ¶
func (a *API) Modify(ctx context.Context, addr storage.Address, path, contentHash, contentType string) (storage.Address, error)
Modify loads manifest and checks the content hash before recalculating and storing the manifest.
func (*API) NewFeedManifest ¶
Manifest hack for supporting Swarm feeds from the bzz: scheme see swarm/api/api.go:API.Get() for more information
func (*API) NewManifest ¶
NewManifest creates and stores a new, empty manifest
func (*API) NewManifestWalker ¶
func (a *API) NewManifestWalker(ctx context.Context, addr storage.Address, decrypt DecryptFunc, quitC chan bool) (*ManifestWalker, error)
func (*API) NewManifestWriter ¶
func (*API) Put ¶
func (a *API) Put(ctx context.Context, content string, contentType string, toEncrypt bool) (k storage.Address, wait func(context.Context) error, err error)
Put provides singleton manifest creation on top of FileStore store
func (*API) RemoveFile ¶
func (a *API) RemoveFile(ctx context.Context, mhash string, path string, fname string, nameresolver bool) (string, error)
RemoveFile removes a file entry in a manifest.
func (*API) Resolve ¶
Resolve a name into a content-addressed hash where address could be an ENS name, or a content addressed hash
func (*API) ResolveFeed ¶
ResolveFeed attempts to extract feed information out of the manifest, if provided If not, it attempts to extract the feed out of a set of key-value pairs
func (*API) ResolveFeedManifest ¶
ResolveFeedManifest retrieves the Swarm feed manifest for the given address, and returns the referenced Feed.
func (*API) ResolveURI ¶
func (a *API) ResolveURI(ctx context.Context, uri *URI, credentials string) (storage.Address, error)
Resolve resolves a URI to an Address using the MultiResolver.
func (*API) Retrieve ¶
func (a *API) Retrieve(ctx context.Context, addr storage.Address) (reader storage.LazySectionReader, isEncrypted bool)
Retrieve FileStore reader API
func (*API) Store ¶
func (a *API) Store(ctx context.Context, data io.Reader, size int64, toEncrypt bool) (addr storage.Address, wait func(ctx context.Context) error, err error)
Store wraps the Store API call of the embedded FileStore
func (*API) UpdateManifest ¶
type AccessEntry ¶
type AccessEntry struct { Type AccessType Publisher string Salt []byte Act string KdfParams *KdfParams }
func DoPK ¶
func DoPK(ctx *cli.Context, privateKey *ecdsa.PrivateKey, granteePublicKey string, salt []byte) (sessionKey []byte, ae *AccessEntry, err error)
DoPK is a helper function to the CLI API that handles the entire business logic for creating a session key and access entry given the cli context, ec keys and salt
func DoPassword ¶
func DoPassword(ctx *cli.Context, password string, salt []byte) (sessionKey []byte, ae *AccessEntry, err error)
DoPassword is a helper function to the CLI API that handles the entire business logic for creating a session key and an access entry given the cli context, password and salt. By default - DefaultKdfParams are used as the scrypt params
func NewAccessEntryACT ¶
func NewAccessEntryACT(publisher string, salt []byte, act string) (*AccessEntry, error)
NewAccessEntryACT creates a manifest AccessEntry in order to create an ACT protected by a combination of EC keys and passwords
func NewAccessEntryPK ¶
func NewAccessEntryPK(publisher string, salt []byte) (*AccessEntry, error)
NewAccessEntryPK creates a manifest AccessEntry in order to create an ACT protected by a pair of Elliptic Curve keys
func NewAccessEntryPassword ¶
func NewAccessEntryPassword(salt []byte, kdfParams *KdfParams) (*AccessEntry, error)
NewAccessEntryPassword creates a manifest AccessEntry in order to create an ACT protected by a password
func (*AccessEntry) MarshalJSON ¶
func (a *AccessEntry) MarshalJSON() (out []byte, err error)
func (*AccessEntry) UnmarshalJSON ¶
func (a *AccessEntry) UnmarshalJSON(value []byte) error
type AccessType ¶
type AccessType string
type Config ¶
type Config struct { // serialised/persisted fields *storage.FileStoreParams *storage.LocalStoreParams *network.HiveParams Swap *swap.LocalProfile Pss *pss.PssParams //*network.SyncParams Contract common.Address EnsRoot common.Address EnsAPIs []string Path string ListenAddr string Port string PublicKey string BzzKey string NodeID string NetworkID uint64 SwapEnabled bool SyncEnabled bool SyncingSkipCheck bool DeliverySkipCheck bool MaxStreamPeerServers int LightNodeEnabled bool SyncUpdateDelay time.Duration SwapAPI string Cors string BzzAccount string // contains filtered or unexported fields }
separate bzz directories allow several bzz nodes running in parallel
func NewConfig ¶
func NewConfig() (c *Config)
create a default config with all parameters to set to defaults
func (*Config) Init ¶
func (c *Config) Init(prvKey *ecdsa.PrivateKey)
some config params need to be initialized after the complete config building phase is completed (e.g. due to overriding flags)
func (*Config) ShiftPrivateKey ¶
func (c *Config) ShiftPrivateKey() (privKey *ecdsa.PrivateKey)
type DecryptFunc ¶
type DecryptFunc func(*ManifestEntry) error
type ErrResolve ¶
type ErrResolve error
ErrResolve is returned when an URI cannot be resolved from ENS.
type FileSystem ¶
type FileSystem struct {
// contains filtered or unexported fields
}
func NewFileSystem ¶
func NewFileSystem(api *API) *FileSystem
func (*FileSystem) Download ¶
func (fs *FileSystem) Download(bzzpath, localpath string) error
Download replicates the manifest basePath structure on the local filesystem under localpath
DEPRECATED: Use the HTTP API instead
func (*FileSystem) Upload ¶
func (fs *FileSystem) Upload(lpath, index string, toEncrypt bool) (string, error)
Upload replicates a local directory as a manifest file and uploads it using FileStore store This function waits the chunks to be stored. TODO: localpath should point to a manifest
DEPRECATED: Use the HTTP API instead
type KdfParams ¶
func NewKdfParams ¶
NewKdfParams returns a KdfParams struct with the given scrypt params
type Manifest ¶
type Manifest struct {
Entries []ManifestEntry `json:"entries,omitempty"`
}
Manifest represents a swarm manifest
type ManifestEntry ¶
type ManifestEntry struct { Hash string `json:"hash,omitempty"` Path string `json:"path,omitempty"` ContentType string `json:"contentType,omitempty"` Mode int64 `json:"mode,omitempty"` Size int64 `json:"size,omitempty"` ModTime time.Time `json:"mod_time,omitempty"` Status int `json:"status,omitempty"` Access *AccessEntry `json:"access,omitempty"` Feed *feed.Feed `json:"feed,omitempty"` }
ManifestEntry represents an entry in a swarm manifest
type ManifestList ¶
type ManifestList struct { CommonPrefixes []string `json:"common_prefixes,omitempty"` Entries []*ManifestEntry `json:"entries,omitempty"` }
ManifestList represents the result of listing files in a manifest
type ManifestWalker ¶
type ManifestWalker struct {
// contains filtered or unexported fields
}
ManifestWalker is used to recursively walk the entries in the manifest and all of its submanifests
func (*ManifestWalker) Walk ¶
func (m *ManifestWalker) Walk(walkFn WalkFn) error
Walk recursively walks the manifest calling walkFn for each entry in the manifest, including submanifests
type ManifestWriter ¶
type ManifestWriter struct {
// contains filtered or unexported fields
}
ManifestWriter is used to add and remove entries from an underlying manifest
func (*ManifestWriter) AddEntry ¶
func (m *ManifestWriter) AddEntry(ctx context.Context, data io.Reader, e *ManifestEntry) (addr storage.Address, err error)
AddEntry stores the given data and adds the resulting address to the manifest
func (*ManifestWriter) RemoveEntry ¶
func (m *ManifestWriter) RemoveEntry(path string) error
RemoveEntry removes the given path from the manifest
type MultiResolver ¶
type MultiResolver struct {
// contains filtered or unexported fields
}
MultiResolver is used to resolve URL addresses based on their TLDs. Each TLD can have multiple resolvers, and the resolution from the first one in the sequence will be returned.
func NewMultiResolver ¶
func NewMultiResolver(opts ...MultiResolverOption) (m *MultiResolver)
NewMultiResolver creates a new instance of MultiResolver.
func (*MultiResolver) HeaderByNumber ¶
func (m *MultiResolver) HeaderByNumber(ctx context.Context, name string, blockNr *big.Int) (*types.Header, error)
HeaderByNumber uses the validator of the given domainname and retrieves the header for the given block number
func (*MultiResolver) Resolve ¶
func (m *MultiResolver) Resolve(addr string) (h common.Hash, err error)
Resolve resolves address by choosing a Resolver by TLD. If there are more default Resolvers, or for a specific TLD, the Hash from the first one which does not return error will be returned.
func (*MultiResolver) SetNameHash ¶
func (m *MultiResolver) SetNameHash(nameHash func(string) common.Hash)
SetNameHash sets the hasher function that hashes the domain into a name hash that ENS uses
func (*MultiResolver) ValidateOwner ¶
ValidateOwner checks the ENS to validate that the owner of the given domain is the given etsc address
type MultiResolverOption ¶
type MultiResolverOption func(*MultiResolver)
MultiResolverOption sets options for MultiResolver and is used as arguments for its constructor.
func MultiResolverOptionWithNameHash ¶
func MultiResolverOptionWithNameHash(nameHash func(string) common.Hash) MultiResolverOption
MultiResolverOptionWithNameHash is unused at the time of this writing
func MultiResolverOptionWithResolver ¶
func MultiResolverOptionWithResolver(r ResolveValidator, tld string) MultiResolverOption
MultiResolverOptionWithResolver adds a Resolver to a list of resolvers for a specific TLD. If TLD is an empty string, the resolver will be added to the list of default resolver, the ones that will be used for resolution of addresses which do not have their TLD resolver specified.
type NoResolverError ¶
type NoResolverError struct {
TLD string
}
NoResolverError is returned by MultiResolver.Resolve if no resolver can be found for the address.
func NewNoResolverError ¶
func NewNoResolverError(tld string) *NoResolverError
NewNoResolverError creates a NoResolverError for the given top level domain
func (*NoResolverError) Error ¶
func (e *NoResolverError) Error() string
Error NoResolverError implements error
type RefEncryption ¶
type RefEncryption struct {
// contains filtered or unexported fields
}
func NewRefEncryption ¶
func NewRefEncryption(refSize int) *RefEncryption
type ResolveValidator ¶
type ResolveValidator interface { Resolver Owner(node [32]byte) (common.Address, error) HeaderByNumber(context.Context, *big.Int) (*types.Header, error) }
ResolveValidator is used to validate the contained Resolver
type Storage ¶
type Storage struct {
// contains filtered or unexported fields
}
implements a service
DEPRECATED: Use the HTTP API instead
func NewStorage ¶
func (*Storage) Get ¶
Get retrieves the content from bzzpath and reads the response in full It returns the Response object, which serialises containing the response body as the value of the Content field NOTE: if error is non-nil, sResponse may still have partial content the actual size of which is given in len(resp.Content), while the expected size is resp.Size
DEPRECATED: Use the HTTP API instead
func (*Storage) Modify ¶
func (s *Storage) Modify(ctx context.Context, rootHash, path, contentHash, contentType string) (newRootHash string, err error)
Modify(rootHash, basePath, contentHash, contentType) takes th e manifest trie rooted in rootHash, and merge on to it. creating an entry w conentType (mime)
DEPRECATED: Use the HTTP API instead
type URI ¶
type URI struct { // Scheme has one of the following values: // // * bzz - an entry in a swarm manifest // * bzz-raw - raw swarm content // * bzz-immutable - immutable URI of an entry in a swarm manifest // (address is not resolved) // * bzz-list - list of all files contained in a swarm manifest // Scheme string // Addr is either a hexadecimal storage address or it an address which // resolves to a storage address Addr string // Path is the path to the content within a swarm manifest Path string // contains filtered or unexported fields }
URI is a reference to content stored in swarm.
func Parse ¶
Parse parses rawuri into a URI struct, where rawuri is expected to have one of the following formats:
* <scheme>:/ * <scheme>:/<addr> * <scheme>:/<addr>/<path> * <scheme>:// * <scheme>://<addr> * <scheme>://<addr>/<path>
with scheme one of bzz, bzz-raw, bzz-immutable, bzz-list or bzz-hash
func (*URI) MarshalJSON ¶
func (*URI) UnmarshalJSON ¶
type WalkFn ¶
type WalkFn func(entry *ManifestEntry) error
WalkFn is the type of function called for each entry visited by a recursive manifest walk