vfs

package
v0.4.27-alpha Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 18, 2025 License: ISC Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const VFS_ENTRY_VERSION = "1.0.0"
View Source
const VFS_ERROR_VERSION = "1.0.0"
View Source
const VFS_XATTR_VERSION = "1.0.0"

Variables

This section is empty.

Functions

func ErrorNodeFromBytes

func ErrorNodeFromBytes(bytes []byte) (*btree.Node[string, objects.MAC, objects.MAC], error)

func NodeFromBytes

func NodeFromBytes(data []byte) (*btree.Node[string, objects.MAC, objects.MAC], error)

func PathCmp

func PathCmp(a, b string) int

func XattrNodeFromBytes

func XattrNodeFromBytes(bytes []byte) (*btree.Node[string, objects.MAC, objects.MAC], error)

Types

type Below

type Below struct {
	Directories uint64 `msgpack:"directories,omitempty" json:"directories"`
	Files       uint64 `msgpack:"files,omitempty" json:"files"`
	Symlinks    uint64 `msgpack:"symlinks,omitempty" json:"symlinks"`
	Devices     uint64 `msgpack:"devices,omitempty" json:"devices"`
	Pipes       uint64 `msgpack:"pipes,omitempty" json:"pipes"`
	Sockets     uint64 `msgpack:"sockets,omitempty" json:"sockets"`

	Children uint64 `msgpack:"children,omitempty" json:"children"`

	Setuid uint64 `msgpack:"setuid,omitempty" json:"setuid"`
	Setgid uint64 `msgpack:"setgid,omitempty" json:"setgid"`
	Sticky uint64 `msgpack:"sticky,omitempty" json:"sticky"`

	Objects uint64 `msgpack:"objects,omitempty" json:"objects"`
	Chunks  uint64 `msgpack:"chunks,omitempty" json:"chunks"`

	MinSize uint64 `msgpack:"min_size,omitempty" json:"min_size"`
	MaxSize uint64 `msgpack:"max_size,omitempty" json:"max_size"`
	Size    uint64 `msgpack:"size,omitempty" json:"size"`

	MinModTime int64 `msgpack:"min_mod_time,omitempty" json:"min_mod_time"`
	MaxModTime int64 `msgpack:"max_mod_time,omitempty" json:"max_mod_time"`

	MinEntropy float64 `msgpack:"min_entropy,omitempty" json:"min_entropy"`
	MaxEntropy float64 `msgpack:"max_entropy,omitempty" json:"max_entropy"`
	HiEntropy  uint64  `msgpack:"hi_entropy,omitempty" json:"hi_entropy"`
	LoEntropy  uint64  `msgpack:"lo_entropy,omitempty" json:"lo_entropy"`

	MIMEAudio       uint64 `msgpack:"MIME_audio,omitempty" json:"MIME_audio"`
	MIMEVideo       uint64 `msgpack:"MIME_video,omitempty" json:"MIME_video"`
	MIMEImage       uint64 `msgpack:"MIME_image,omitempty" json:"MIME_image"`
	MIMEText        uint64 `msgpack:"MIME_text,omitempty" json:"MIME_text"`
	MIMEApplication uint64 `msgpack:"MIME_application,omitempty" json:"MIME_application"`
	MIMEOther       uint64 `msgpack:"MIME_other,omitempty" json:"MIME_other"`

	Errors uint64 `msgpack:"errors" json:"errors"`
}

type Classification

type Classification struct {
	Analyzer string   `msgpack:"analyzer" json:"analyzer"`
	Classes  []string `msgpack:"classes" json:"classes"`
	Scores   []Score  `msgpack:"scores" json:"scores"`
}

type CustomMetadata

type CustomMetadata struct {
	Key   string `msgpack:"key" json:"key"`
	Value []byte `msgpack:"value" json:"value"`
}

type Directory

type Directory struct {
	Directories uint64 `msgpack:"directories,omitempty" json:"directories"`
	Files       uint64 `msgpack:"files,omitempty" json:"files"`
	Symlinks    uint64 `msgpack:"symlinks,omitempty" json:"symlinks"`
	Devices     uint64 `msgpack:"devices,omitempty" json:"devices"`
	Pipes       uint64 `msgpack:"pipes,omitempty" json:"pipes"`
	Sockets     uint64 `msgpack:"sockets,omitempty" json:"sockets"`

	Children uint64 `msgpack:"children,omitempty" json:"children"`

	Setuid uint64 `msgpack:"setuid,omitempty" json:"setuid"`
	Setgid uint64 `msgpack:"setgid,omitempty" json:"setgid"`
	Sticky uint64 `msgpack:"sticky,omitempty" json:"sticky"`

	Objects uint64 `msgpack:"objects,omitempty" json:"objects"`
	Chunks  uint64 `msgpack:"chunks,omitempty" json:"chunks"`

	MinSize uint64 `msgpack:"min_size,omitempty" json:"min_size"`
	MaxSize uint64 `msgpack:"max_size,omitempty" json:"max_size"`
	AvgSize uint64 `msgpack:"avg_size,omitempty" json:"avg_size"`
	Size    uint64 `msgpack:"size,omitempty" json:"size"`

	MinModTime int64 `msgpack:"min_mod_time,omitempty" json:"min_mod_time"`
	MaxModTime int64 `msgpack:"max_mod_time,omitempty" json:"max_mod_time"`

	MinEntropy float64 `msgpack:"min_entropy,omitempty" json:"min_entropy"`
	MaxEntropy float64 `msgpack:"max_entropy,omitempty" json:"max_entropy"`
	SumEntropy float64 `msgpack:"sum_entropy,omitempty" json:"sum_entropy"`
	AvgEntropy float64 `msgpack:"avg_entropy,omitempty" json:"avg_entropy"`
	HiEntropy  uint64  `msgpack:"hi_entropy,omitempty" json:"hi_entropy"`
	LoEntropy  uint64  `msgpack:"lo_entropy,omitempty" json:"lo_entropy"`

	MIMEAudio       uint64 `msgpack:"MIME_audio,omitempty" json:"MIME_audio"`
	MIMEVideo       uint64 `msgpack:"MIME_video,omitempty" json:"MIME_video"`
	MIMEImage       uint64 `msgpack:"MIME_image,omitempty" json:"MIME_image"`
	MIMEText        uint64 `msgpack:"MIME_text,omitempty" json:"MIME_text"`
	MIMEApplication uint64 `msgpack:"MIME_application,omitempty" json:"MIME_application"`
	MIMEOther       uint64 `msgpack:"MIME_other,omitempty" json:"MIME_other"`

	Errors uint64 `msgpack:"errors,omitempty" json:"errors"`
}

type Entry

type Entry struct {
	Version    versioning.Version `msgpack:"version" json:"version"`
	ParentPath string             `msgpack:"parent_path" json:"parent_path"`
	FileInfo   objects.FileInfo   `msgpack:"file_info" json:"file_info"`

	/* Directory specific fields */
	Summary *Summary `msgpack:"summary" json:"summary,omitempty"`

	/* File specific fields */
	SymlinkTarget  string          `msgpack:"symlink_target,omitempty" json:"symlink_target,omitempty"`
	Object         objects.MAC     `msgpack:"object,omitempty" json:"-"` // nil for !regular files
	ResolvedObject *objects.Object `msgpack:"-" json:"object,omitempty"` // This the true object, resolved when opening the entry. Beware we serialize it as "Object" only for json to not break API compat'

	/* Windows specific fields */
	AlternateDataStreams []string `msgpack:"alternate_data_streams,omitempty" json:"alternate_data_streams"`
	SecurityDescriptor   []byte   `msgpack:"security_descriptor,omitempty" json:"security_descriptor"`
	FileAttributes       uint32   `msgpack:"file_attributes,omitempty" json:"file_attributes"`

	/* Unix fields */
	ExtendedAttributes []string `msgpack:"extended_attributes,omitempty" json:"extended_attributes"`

	/* Custom metadata and tags */
	Classifications []Classification `msgpack:"classifications,omitempty" json:"classifications"`
	CustomMetadata  []CustomMetadata `msgpack:"custom_metadata,omitempty" json:"custom_metadata"`
	Tags            []string         `msgpack:"tags,omitempty" json:"tags"`
}

Entry implements FSEntry and fs.DirEntry, as well as some other helper methods.

func EntryFromBytes

func EntryFromBytes(bytes []byte) (*Entry, error)

func NewEntry

func NewEntry(parentPath string, record *importer.ScanRecord) *Entry

func (*Entry) AddClassification

func (e *Entry) AddClassification(analyzer string, classes []string)

func (*Entry) ContentType

func (e *Entry) ContentType() string

func (*Entry) Entropy

func (e *Entry) Entropy() float64

func (*Entry) Getdents

func (e *Entry) Getdents(fsc *Filesystem) (iter.Seq2[*Entry, error], error)

func (*Entry) HasObject

func (e *Entry) HasObject() bool

func (*Entry) Info

func (e *Entry) Info() (fs.FileInfo, error)

func (*Entry) IsDir

func (e *Entry) IsDir() bool

func (*Entry) MarshalJSON

func (e *Entry) MarshalJSON() ([]byte, error)

Return empty lists for nil slices.

func (*Entry) Name

func (e *Entry) Name() string

func (*Entry) Open

func (e *Entry) Open(fs *Filesystem, path string) fs.File

func (*Entry) Path

func (e *Entry) Path() string

func (*Entry) Size

func (e *Entry) Size() int64

func (*Entry) Stat

func (e *Entry) Stat() *objects.FileInfo

func (*Entry) ToBytes

func (e *Entry) ToBytes() ([]byte, error)

func (*Entry) Type

func (e *Entry) Type() fs.FileMode

func (*Entry) Xattr

func (e *Entry) Xattr(fsc *Filesystem, xattrName string) (io.ReadSeeker, error)

type ErrorItem

type ErrorItem struct {
	Version versioning.Version `msgpack:"version" json:"version"`
	Name    string             `msgpack:"name" json:"name"`
	Error   string             `msgpack:"error" json:"error"`
}

func ErrorItemFromBytes

func ErrorItemFromBytes(bytes []byte) (*ErrorItem, error)

func NewErrorItem

func NewErrorItem(path, error string) *ErrorItem

func (*ErrorItem) ToBytes

func (e *ErrorItem) ToBytes() ([]byte, error)

type ExtendedAttribute

type ExtendedAttribute struct {
	Name  string `msgpack:"name" json:"name"`
	Value []byte `msgpack:"value" json:"value"`
}

type FileSummary

type FileSummary struct {
	Size        uint64      `msgpack:"size" json:"size"`
	Objects     uint64      `msgpack:"objects" json:"objects"`
	Chunks      uint64      `msgpack:"chunks" json:"chunks"`
	Mode        fs.FileMode `msgpack:"mode" json:"mode"`
	ModTime     int64       `msgpack:"mod_time" json:"mod_time"`
	ContentType string      `msgpack:"content_type" json:"content_type"`
	Entropy     float64     `msgpack:"entropy" json:"entropy"`
}

func FileSummaryFromBytes

func FileSummaryFromBytes(data []byte) (*FileSummary, error)

func (*FileSummary) Serialize

func (f *FileSummary) Serialize() ([]byte, error)

type Filesystem

type Filesystem struct {
	// contains filtered or unexported fields
}

func NewFilesystem

func NewFilesystem(repo *repository.Repository, root, xattrs, errors objects.MAC) (*Filesystem, error)

func (*Filesystem) Children

func (fsc *Filesystem) Children(path string) (iter.Seq2[string, error], error)

func (*Filesystem) Errors

func (fsc *Filesystem) Errors(beneath string) (iter.Seq2[*ErrorItem, error], error)

func (*Filesystem) FileMacs

func (fsc *Filesystem) FileMacs() (iter.Seq2[objects.MAC, error], error)

func (*Filesystem) Files

func (fsc *Filesystem) Files() iter.Seq2[string, error]

func (*Filesystem) GetEntry

func (fsc *Filesystem) GetEntry(path string) (*Entry, error)

func (*Filesystem) IterErrorNodes

func (fsc *Filesystem) IterErrorNodes() iterator.Iterator[objects.MAC, *btree.Node[string, objects.MAC, objects.MAC]]

func (*Filesystem) IterNodes

func (*Filesystem) Open

func (fsc *Filesystem) Open(path string) (fs.File, error)

func (*Filesystem) Pathnames

func (fsc *Filesystem) Pathnames() iter.Seq2[string, error]

func (*Filesystem) ReadDir

func (fsc *Filesystem) ReadDir(path string) (entries []fs.DirEntry, err error)

func (*Filesystem) ResolveEntry

func (fsc *Filesystem) ResolveEntry(csum objects.MAC) (*Entry, error)

func (*Filesystem) WalkDir

func (fsc *Filesystem) WalkDir(root string, fn WalkDirFunc) error

func (*Filesystem) XattrNodes

type ObjectReader

type ObjectReader struct {
	// contains filtered or unexported fields
}

func NewObjectReader

func NewObjectReader(repo *repository.Repository, object *objects.Object, size int64) *ObjectReader

func (*ObjectReader) Read

func (or *ObjectReader) Read(p []byte) (int, error)

func (*ObjectReader) Seek

func (or *ObjectReader) Seek(offset int64, whence int) (int64, error)

type Score

type Score struct {
	Key   string  `msgpack:"key" json:"key"`
	Value float64 `msgpack:"value" json:"value"`
}

type Summary

type Summary struct {
	Directory Directory `msgpack:"directory,omitempty" json:"directory"`
	Below     Below     `msgpack:"below,omitempty" json:"below"`
}

func SummaryFromBytes

func SummaryFromBytes(data []byte) (*Summary, error)

func (*Summary) ToBytes

func (s *Summary) ToBytes() ([]byte, error)

func (*Summary) UpdateAverages

func (s *Summary) UpdateAverages()

func (*Summary) UpdateBelow

func (s *Summary) UpdateBelow(below *Summary)

func (*Summary) UpdateWithFileSummary

func (s *Summary) UpdateWithFileSummary(fileSummary *FileSummary)

type WalkDirFunc

type WalkDirFunc func(path string, entry *Entry, err error) error

type Xattr

type Xattr struct {
	Version versioning.Version `msgpack:"version" json:"version"`
	Path    string             `msgpack:"path" json:"path"`
	Name    string             `msgpack:"name" json:"name"`
	Size    int64              `msgpack:"size" json:"size"`
	Type    objects.Attribute  `msgpack:"type" json:"type"`
	Object  objects.MAC        `msgpack:"object,omitempty" json:"-"`

	// This the true object, resolved when opening the
	// xattr. Beware we serialize it as "Object" only for json to
	// not break API compat.
	ResolvedObject *objects.Object `msgpack:"-" json:"object,omitempty"`
}

func NewXattr

func NewXattr(record *importer.ScanRecord, object *objects.Object) *Xattr

func XattrFromBytes

func XattrFromBytes(bytes []byte) (*Xattr, error)

func (*Xattr) ToBytes

func (x *Xattr) ToBytes() ([]byte, error)

func (*Xattr) ToPath

func (x *Xattr) ToPath() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL