Documentation ¶
Index ¶
- Constants
- Variables
- func DoACTNew(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) 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) 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) NewResourceManifest(ctx context.Context, resourceAddr string) (storage.Address, error)
- func (a *API) NodeSessionKey(privateKey *ecdsa.PrivateKey, publicKey *ecdsa.PublicKey, salt []byte) ([]byte, 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) ResolveResourceManifest(ctx context.Context, addr storage.Address) (storage.Address, error)
- func (a *API) ResolveURI(ctx context.Context, uri *URI, credentials string) (storage.Address, error)
- func (a *API) ResourceCreate(ctx context.Context, request *mru.Request) error
- func (a *API) ResourceHashSize() int
- func (a *API) ResourceLookup(ctx context.Context, params *mru.LookupParams) (string, []byte, error)
- func (a *API) ResourceNewRequest(ctx context.Context, rootAddr storage.Address) (*mru.Request, error)
- func (a *API) ResourceUpdate(ctx context.Context, request *mru.SignedResourceUpdate) (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) Upload(ctx context.Context, uploadDir, index string, toEncrypt bool) (hash string, err error)
- func (a *API) UploadTar(ctx context.Context, bodyReader io.ReadCloser, ...) (storage.Address, error)
- type AccessEntry
- func DoPKNew(ctx *cli.Context, privateKey *ecdsa.PrivateKey, granteePublicKey string, ...) (sessionKey []byte, ae *AccessEntry, err error)
- func DoPasswordNew(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) 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) Resource() 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" ResourceContentType = "application/bzz-resource" )
const AccessTypeACT = AccessType("act")
const AccessTypePK = AccessType("pk")
const AccessTypePass = AccessType("pass")
const EMPTY_CREDENTIALS = ""
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 (
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 DoACTNew ¶ added in v1.8.14
func DoACTNew(ctx *cli.Context, privateKey *ecdsa.PrivateKey, salt []byte, grantees []string) (accessKey []byte, ae *AccessEntry, actManifest *Manifest, err error)
func NOOPDecrypt ¶ added in v1.8.14
func NOOPDecrypt(*ManifestEntry) error
func NewSessionKeyPK ¶ added in v1.8.14
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 ¶ added in v1.8.14
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 ¶ added in v1.8.12
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 ethereum stack
func NewAPI ¶ added in v1.8.12
func NewAPI(fileStore *storage.FileStore, dns Resolver, resourceHandler *mru.Handler, pk *ecdsa.PrivateKey) (self *API)
NewAPI the api constructor initialises a new API instance.
func (*API) AddFile ¶ added in v1.8.12
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 ¶ added in v1.8.12
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 ¶ added in v1.8.12
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) Get ¶ added in v1.8.12
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 ¶ added in v1.8.13
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 ¶ added in v1.8.13
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 ¶ added in v1.8.12
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) NewManifest ¶ added in v1.8.12
NewManifest creates and stores a new, empty manifest
func (*API) NewManifestWalker ¶ added in v1.8.12
func (a *API) NewManifestWalker(ctx context.Context, addr storage.Address, decrypt DecryptFunc, quitC chan bool) (*ManifestWalker, error)
func (*API) NewManifestWriter ¶ added in v1.8.12
func (*API) NewResourceManifest ¶ added in v1.8.12
func (a *API) NewResourceManifest(ctx context.Context, resourceAddr string) (storage.Address, error)
Manifest hack for supporting Mutable Resource Updates from the bzz: scheme see swarm/api/api.go:API.Get() for more information
func (*API) NodeSessionKey ¶ added in v1.8.14
func (*API) Put ¶ added in v1.8.12
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 ¶ added in v1.8.12
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 ¶ added in v1.8.12
Resolve a name into a content-addressed hash where address could be an ENS name, or a content addressed hash
func (*API) ResolveResourceManifest ¶ added in v1.8.12
func (a *API) ResolveResourceManifest(ctx context.Context, addr storage.Address) (storage.Address, error)
ResolveResourceManifest retrieves the Mutable Resource manifest for the given address, and returns the address of the metadata chunk.
func (*API) ResolveURI ¶ added in v1.8.14
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) ResourceCreate ¶ added in v1.8.12
Create Mutable resource
func (*API) ResourceHashSize ¶ added in v1.8.12
ResourceHashSize returned the size of the digest produced by the Mutable Resource hashing function
func (*API) ResourceLookup ¶ added in v1.8.12
ResourceLookup finds mutable resource updates at specific periods and versions
func (*API) ResourceNewRequest ¶ added in v1.8.13
func (a *API) ResourceNewRequest(ctx context.Context, rootAddr storage.Address) (*mru.Request, error)
ResourceNewRequest creates a Request object to update a specific mutable resource
func (*API) ResourceUpdate ¶ added in v1.8.12
func (a *API) ResourceUpdate(ctx context.Context, request *mru.SignedResourceUpdate) (storage.Address, error)
ResourceUpdate updates a Mutable Resource with arbitrary data. Upon retrieval the update will be retrieved verbatim as bytes.
func (*API) Retrieve ¶ added in v1.8.12
func (a *API) Retrieve(ctx context.Context, addr storage.Address) (reader storage.LazySectionReader, isEncrypted bool)
Retrieve FileStore reader API
func (*API) Store ¶ added in v1.8.12
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 ¶ added in v1.8.13
type AccessEntry ¶ added in v1.8.14
type AccessEntry struct { Type AccessType Publisher string Salt []byte Act string KdfParams *KdfParams }
func DoPKNew ¶ added in v1.8.14
func DoPKNew(ctx *cli.Context, privateKey *ecdsa.PrivateKey, granteePublicKey string, salt []byte) (sessionKey []byte, ae *AccessEntry, err error)
func DoPasswordNew ¶ added in v1.8.14
func NewAccessEntryACT ¶ added in v1.8.14
func NewAccessEntryACT(publisher string, salt []byte, act string) (*AccessEntry, error)
func NewAccessEntryPK ¶ added in v1.8.14
func NewAccessEntryPK(publisher string, salt []byte) (*AccessEntry, error)
func NewAccessEntryPassword ¶ added in v1.8.14
func NewAccessEntryPassword(salt []byte, kdfParams *KdfParams) (*AccessEntry, error)
func (*AccessEntry) MarshalJSON ¶ added in v1.8.14
func (a *AccessEntry) MarshalJSON() (out []byte, err error)
func (*AccessEntry) UnmarshalJSON ¶ added in v1.8.14
func (a *AccessEntry) UnmarshalJSON(value []byte) error
type AccessType ¶ added in v1.8.14
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 DeliverySkipCheck bool 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 ¶ added in v1.8.0
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 ¶ added in v1.8.12
func (c *Config) ShiftPrivateKey() (privKey *ecdsa.PrivateKey)
type DecryptFunc ¶ added in v1.8.14
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 ¶ added in v1.8.14
func NewKdfParams ¶ added in v1.8.14
type Manifest ¶ added in v1.6.0
type Manifest struct {
Entries []ManifestEntry `json:"entries,omitempty"`
}
Manifest represents a swarm manifest
func GenerateAccessControlManifest ¶ added in v1.8.14
type ManifestEntry ¶ added in v1.6.0
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"` }
ManifestEntry represents an entry in a swarm manifest
type ManifestList ¶ added in v1.6.0
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 ¶ added in v1.6.0
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 ¶ added in v1.6.0
func (m *ManifestWalker) Walk(walkFn WalkFn) error
Walk recursively walks the manifest calling walkFn for each entry in the manifest, including submanifests
type ManifestWriter ¶ added in v1.6.0
type ManifestWriter struct {
// contains filtered or unexported fields
}
ManifestWriter is used to add and remove entries from an underlying manifest
func (*ManifestWriter) AddEntry ¶ added in v1.6.0
func (m *ManifestWriter) AddEntry(ctx context.Context, data io.Reader, e *ManifestEntry) (key storage.Address, err error)
AddEntry stores the given data and adds the resulting key to the manifest
func (*ManifestWriter) RemoveEntry ¶ added in v1.6.0
func (m *ManifestWriter) RemoveEntry(path string) error
RemoveEntry removes the given path from the manifest
type MultiResolver ¶ added in v1.8.2
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 ¶ added in v1.8.2
func NewMultiResolver(opts ...MultiResolverOption) (m *MultiResolver)
NewMultiResolver creates a new instance of MultiResolver.
func (*MultiResolver) HeaderByNumber ¶ added in v1.8.12
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 ¶ added in v1.8.2
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 ¶ added in v1.8.12
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 ¶ added in v1.8.12
ValidateOwner checks the ENS to validate that the owner of the given domain is the given eth address
type MultiResolverOption ¶ added in v1.8.2
type MultiResolverOption func(*MultiResolver)
MultiResolverOption sets options for MultiResolver and is used as arguments for its constructor.
func MultiResolverOptionWithNameHash ¶ added in v1.8.12
func MultiResolverOptionWithNameHash(nameHash func(string) common.Hash) MultiResolverOption
MultiResolverOptionWithNameHash is unused at the time of this writing
func MultiResolverOptionWithResolver ¶ added in v1.8.2
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 ¶ added in v1.8.2
type NoResolverError struct {
TLD string
}
NoResolverError is returned by MultiResolver.Resolve if no resolver can be found for the address.
func NewNoResolverError ¶ added in v1.8.2
func NewNoResolverError(tld string) *NoResolverError
NewNoResolverError creates a NoResolverError for the given top level domain
func (*NoResolverError) Error ¶ added in v1.8.2
func (e *NoResolverError) Error() string
Error NoResolverError implements error
type RefEncryption ¶ added in v1.8.14
type RefEncryption struct {
// contains filtered or unexported fields
}
func NewRefEncryption ¶ added in v1.8.14
func NewRefEncryption(refSize int) *RefEncryption
type ResolveValidator ¶ added in v1.8.12
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 ¶ added in v1.6.0
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 ¶ added in v1.5.8
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 ¶ added in v1.8.14
func (*URI) UnmarshalJSON ¶ added in v1.8.14
type WalkFn ¶ added in v1.6.0
type WalkFn func(entry *ManifestEntry) error
WalkFn is the type of function called for each entry visited by a recursive manifest walk