provider

package
v0.23.0 Latest Latest
Warning

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

Go to latest
Published: Sep 14, 2022 License: MIT Imports: 32 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// MetadataDirectoryName directory where metadata are stored
	MetadataDirectoryName = "/.fibr"

	// MaxConcurrency defines how many concurrent task can be launch in parallel when possible
	MaxConcurrency = uint64(6)
)

Variables

View Source
var (
	ArchiveExtensions = map[string]bool{".zip": true, ".tar": true, ".gz": true, ".rar": true}
	AudioExtensions   = map[string]bool{".mp3": true}
	CodeExtensions    = map[string]bool{".html": true, ".css": true, ".js": true, ".jsx": true, ".json": true, ".yml": true, ".yaml": true, ".toml": true, ".md": true, ".go": true, ".py": true, ".java": true, ".xml": true}
	ExcelExtensions   = map[string]bool{".xls": true, ".xlsx": true, ".xlsm": true}
	ImageExtensions   = map[string]bool{".jpg": true, ".jpeg": true, ".png": true, ".gif": true, ".svg": true, ".tiff": true, ".webp": true}
	PdfExtensions     = map[string]bool{".pdf": true}
	VideoExtensions   = map[string]string{".mp4": "video/mp4", ".mov": "video/mp4", ".avi": "video/x-msvideo", ".ogg": "video/ogg", ".mkv": "video/x-matroska"}
	StreamExtensions  = map[string]bool{".ts": true}
	WordExtensions    = map[string]bool{".doc": true, ".docx": true, ".docm": true}

	// ThumbnailExtensions contains extensions of file eligible to thumbnail
	ThumbnailExtensions = map[string]bool{".jpg": true, ".jpeg": true, ".png": true, ".gif": true, ".tiff": true, ".webp": true, ".pdf": true, ".mp4": true, ".mov": true, ".avi": true, ".ogg": true, ".mkv": true}
)
View Source
var (
	// GridDisplay format
	GridDisplay = "grid"
	// ListDisplay format
	ListDisplay = "list"
	// StoryDisplay format
	StoryDisplay = "story"

	// DefaultDisplay format
	DefaultDisplay = GridDisplay

	// LayoutPathsCookieName for saving preferences
	LayoutPathsCookieName = "layout_paths"
)
View Source
var (
	BufferPool = sync.Pool{
		New: func() any {
			return bytes.NewBuffer(make([]byte, 4*1024))
		},
	}

	SlowClient = request.CreateClient(5*time.Minute, request.NoRedirection)
)
View Source
var WebhookKindValues = []string{"raw", "discord", "slack", "telegram"}

WebhookKindValues string values

Functions

func Dirname added in v0.9.0

func Dirname(name string) string

func DoneWriter added in v0.13.0

func DoneWriter(isDone func() bool, w io.Writer, content string)

func EtagMatch added in v0.15.0

func EtagMatch(w http.ResponseWriter, r *http.Request, hash string) (etag string, match bool)

func FindPath added in v0.16.0

func FindPath(arr []string, value string) int

func GetIP added in v0.10.0

func GetIP(r *http.Request) string

func GetPathname

func GetPathname(folder, name string, share Share) string

func HandleClose added in v0.11.0

func HandleClose(closer io.Closer, err error) error

func Join added in v0.13.0

func Join(parts ...string) string

func LoadJSON added in v0.11.0

func LoadJSON(ctx context.Context, storageApp absto.Storage, filename string, content any) (err error)

func LogClose added in v0.15.0

func LogClose(closer io.Closer, fn, item string)

func MetadataDirectory added in v0.18.0

func MetadataDirectory(item absto.Item) string

func RemoveIndex

func RemoveIndex(arr []string, index int) []string

func RenameDirectory added in v0.18.0

func RenameDirectory(ctx context.Context, storageApp absto.Storage, renamers []Renamer, old, new absto.Item)

func SafeWrite

func SafeWrite(w io.Writer, content string)

func SanitizeName

func SanitizeName(name string, removeSlash bool) (string, error)

func SaveJSON added in v0.10.0

func SaveJSON(ctx context.Context, storageApp absto.Storage, filename string, content any) error

func SendLargeFile added in v0.9.0

func SendLargeFile(ctx context.Context, storageApp absto.Storage, item absto.Item, req request.Request) (*http.Response, error)

func SetPrefsCookie added in v0.4.1

func SetPrefsCookie(w http.ResponseWriter, request Request)

func URL added in v0.4.1

func URL(folder, name string, share Share) string

func WriteToStorage added in v0.14.0

func WriteToStorage(ctx context.Context, storageApp absto.Storage, output string, size int64, reader io.Reader) error

Types

type Aggregate added in v0.7.0

type Aggregate struct {
	Start    time.Time `json:"start,omitempty"`
	End      time.Time `json:"end,omitempty"`
	Location string    `json:"location,omitempty"`
	Cover    string    `json:"cover,omitempty"`
}

type Auth added in v0.8.0

type Auth interface {
	IsAuthenticated(*http.Request) (ident.Provider, model.User, error)
	IsAuthorized(context.Context, string) bool
}

type ByHybridSort added in v0.9.0

type ByHybridSort []absto.Item

ByHybridSort implements Sorter by type then modification time

func (ByHybridSort) Len added in v0.9.0

func (a ByHybridSort) Len() int

func (ByHybridSort) Less added in v0.9.0

func (a ByHybridSort) Less(i, j int) bool

func (ByHybridSort) Swap added in v0.9.0

func (a ByHybridSort) Swap(i, j int)

type ByID added in v0.23.0

type ByID []absto.Item

func (ByID) Len added in v0.23.0

func (a ByID) Len() int

func (ByID) Less added in v0.23.0

func (a ByID) Less(i, j int) bool

func (ByID) Swap added in v0.23.0

func (a ByID) Swap(i, j int)

type Event added in v0.7.0

type Event struct {
	Time         time.Time         `json:"time"`
	New          *absto.Item       `json:"new,omitempty"`
	Metadata     map[string]string `json:"metadata,omitempty"`
	URL          string            `json:"url,omitempty"`
	ShareableURL string            `json:"shareable_url,omitempty"`
	Item         absto.Item        `json:"item"`
	Type         EventType         `json:"type"`
}

func NewAccessEvent added in v0.8.0

func NewAccessEvent(item absto.Item, r *http.Request) Event

func NewDeleteEvent added in v0.7.0

func NewDeleteEvent(request Request, item absto.Item, rendererApp renderer.App) Event

func NewDescriptionEvent added in v0.20.0

func NewDescriptionEvent(item absto.Item, shareableURL string, description string, rendererApp renderer.App) Event

func NewRenameEvent added in v0.7.0

func NewRenameEvent(old, new absto.Item, shareableURL string, rendererApp renderer.App) Event

func NewRestartEvent added in v0.16.0

func NewRestartEvent(item absto.Item, subset string) Event

func NewStartEvent added in v0.7.0

func NewStartEvent(item absto.Item) Event

func NewUploadEvent added in v0.7.0

func NewUploadEvent(request Request, item absto.Item, shareableURL string, rendererApp renderer.App) Event

func (Event) BrowserURL added in v0.22.0

func (e Event) BrowserURL() string

func (Event) GetMetadata added in v0.14.0

func (e Event) GetMetadata(key string) string

func (Event) GetName added in v0.14.0

func (e Event) GetName() string

func (Event) GetTo added in v0.14.0

func (e Event) GetTo() string

func (Event) GetURL added in v0.13.0

func (e Event) GetURL() string

func (Event) IsForcedFor added in v0.18.0

func (e Event) IsForcedFor(key string) bool

IsForcedFor check if event is forced for given key

func (Event) StoryURL added in v0.22.0

func (e Event) StoryURL(id string) string

type EventBus added in v0.7.0

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

EventBus describes a channel for exchanging Event

func NewEventBus added in v0.7.0

func NewEventBus(size uint64, prometheusRegisterer prometheus.Registerer, tracer trace.Tracer) (EventBus, error)

func (EventBus) Push added in v0.7.0

func (e EventBus) Push(event Event) error

func (EventBus) Start added in v0.7.0

func (e EventBus) Start(done <-chan struct{}, storageApp absto.Storage, renamers []Renamer, consumers ...EventConsumer)

type EventConsumer added in v0.7.0

type EventConsumer func(context.Context, Event)

EventConsumer is a func that consume an event

type EventProducer added in v0.7.0

type EventProducer func(Event) error

EventProducer is a func that push an event

type EventType added in v0.7.0

type EventType uint

EventType is the enumeration of event that can happen

const (
	// UploadEvent occurs when someone upload a file
	UploadEvent EventType = iota
	// CreateDir occurs when a directory is created
	CreateDir
	// RenameEvent occurs when an item is renamed
	RenameEvent
	// DeleteEvent occurs when an item is deleted
	DeleteEvent
	// StartEvent occurs when fibr start
	StartEvent
	// AccessEvent occurs when content is accessed
	AccessEvent
	// DescriptionEvent occurs when a description is added
	DescriptionEvent
)

func ParseEventType added in v0.8.0

func ParseEventType(value string) (EventType, error)

func (EventType) MarshalJSON added in v0.8.0

func (et EventType) MarshalJSON() ([]byte, error)

MarshalJSON marshals the enum as a quoted json string

func (EventType) String added in v0.8.0

func (et EventType) String() string

func (*EventType) UnmarshalJSON added in v0.8.0

func (et *EventType) UnmarshalJSON(b []byte) error

type ExifManager added in v0.16.0

type ExifManager interface {
	ListDir(ctx context.Context, item absto.Item) ([]absto.Item, error)
	GetAggregateFor(ctx context.Context, item absto.Item) (Aggregate, error)
	ListAggregateFor(ctx context.Context, items ...absto.Item) (map[string]Aggregate, error)
	SaveAggregateFor(ctx context.Context, item absto.Item, aggregate Aggregate) error
	GetExifFor(ctx context.Context, item absto.Item) (exas.Exif, error)
	ListExifFor(ctx context.Context, items ...absto.Item) (map[string]exas.Exif, error)
	SaveExifFor(ctx context.Context, item absto.Item, exif exas.Exif) error
}

type ExifResponse added in v0.10.0

type ExifResponse struct {
	Exif exas.Exif  `json:"exif"`
	Item absto.Item `json:"item"`
}

type Preferences

type Preferences struct {
	LayoutPaths map[string]string
}

func ParsePreferences added in v0.16.0

func ParsePreferences(value string) Preferences

func (Preferences) AddLayout added in v0.16.0

func (p Preferences) AddLayout(path, display string) Preferences

func (Preferences) RemoveLayout added in v0.16.0

func (p Preferences) RemoveLayout(path string) Preferences

type Renamer added in v0.18.0

type Renamer func(context.Context, absto.Item, absto.Item) error

Renamer is a func that rename an item

type RenderItem

type RenderItem struct {
	Aggregate
	URL  string
	Path string
	absto.Item
	HasThumbnail bool
	IsCover      bool
}

func StorageToRender added in v0.12.0

func StorageToRender(item absto.Item, request Request) RenderItem

func (RenderItem) IsImage added in v0.14.0

func (r RenderItem) IsImage() bool

func (RenderItem) IsVideo added in v0.14.0

func (r RenderItem) IsVideo() bool

func (RenderItem) IsZero added in v0.15.0

func (r RenderItem) IsZero() bool

func (RenderItem) Mime added in v0.13.0

func (r RenderItem) Mime() string

type Request

type Request struct {
	Path        string
	Item        string
	Display     string
	Preferences Preferences
	Share       Share
	CanEdit     bool
	CanShare    bool
	CanWebhook  bool
}

func (Request) AbsoluteURL added in v0.12.0

func (r Request) AbsoluteURL(name string) string

func (Request) DeletePreference added in v0.16.0

func (r Request) DeletePreference(path string) Request

func (Request) Description added in v0.4.1

func (r Request) Description() string

func (Request) Filepath added in v0.12.0

func (r Request) Filepath() string

func (Request) IsStory added in v0.18.1

func (r Request) IsStory() bool

func (Request) LayoutPath

func (r Request) LayoutPath(path string) string

func (Request) RelativeURL added in v0.12.0

func (r Request) RelativeURL(item absto.Item) string

func (Request) SubPath added in v0.12.0

func (r Request) SubPath(name string) string

func (Request) Title added in v0.4.1

func (r Request) Title() string

func (Request) UpdatePreferences added in v0.16.0

func (r Request) UpdatePreferences() Request

type Share

type Share struct {
	Creation time.Time     `json:"creation"`
	ID       string        `json:"id"`
	Path     string        `json:"path"`
	RootName string        `json:"rootName"`
	Password string        `json:"password"`
	Duration time.Duration `json:"duration"`
	Edit     bool          `json:"edit"`
	Story    bool          `json:"story"`
	File     bool          `json:"file"`
}

func (Share) CheckPassword

func (s Share) CheckPassword(authorizationHeader string) error

func (Share) IsExpired added in v0.4.0

func (s Share) IsExpired(now time.Time) bool

func (Share) IsZero added in v0.12.0

func (s Share) IsZero() bool

type ShareByID added in v0.15.0

type ShareByID []Share

ShareByID sort Share by ID

func (ShareByID) Len added in v0.15.0

func (a ShareByID) Len() int

func (ShareByID) Less added in v0.15.0

func (a ShareByID) Less(i, j int) bool

func (ShareByID) Swap added in v0.15.0

func (a ShareByID) Swap(i, j int)

type ShareManager added in v0.8.0

type ShareManager interface {
	Get(string) Share
	Create(context.Context, string, bool, bool, string, bool, time.Duration) (string, error)
	Delete(context.Context, string) error
	List() []Share
}

type StoryItem added in v0.16.0

type StoryItem struct {
	Exif model.Exif
	RenderItem
}

func StorageToStory added in v0.16.0

func StorageToStory(item absto.Item, request Request, exif model.Exif) StoryItem

type Webhook added in v0.8.0

type Webhook struct {
	ID        string      `json:"id"`
	Pathname  string      `json:"pathname"`
	URL       string      `json:"url"`
	Types     []EventType `json:"types"`
	Kind      WebhookKind `json:"kind"`
	Recursive bool        `json:"recursive"`
}

func (Webhook) Match added in v0.8.0

func (w Webhook) Match(e Event) bool

type WebhookByID added in v0.15.0

type WebhookByID []Webhook

func (WebhookByID) Len added in v0.15.0

func (a WebhookByID) Len() int

func (WebhookByID) Less added in v0.15.0

func (a WebhookByID) Less(i, j int) bool

func (WebhookByID) Swap added in v0.15.0

func (a WebhookByID) Swap(i, j int)

type WebhookKind added in v0.12.0

type WebhookKind int

WebhookKind defines constant for webhook kind

const (
	// Raw webhook
	Raw WebhookKind = iota
	// Discord webhook
	Discord
	// Slack webhook
	Slack
	// Telegram webhook
	Telegram
)

func ParseWebhookKind added in v0.12.0

func ParseWebhookKind(value string) (WebhookKind, error)

ParseWebhookKind parse raw string into a WebhookKind

func (WebhookKind) MarshalJSON added in v0.12.0

func (r WebhookKind) MarshalJSON() ([]byte, error)

MarshalJSON marshals the enum as a quoted json string

func (WebhookKind) String added in v0.12.0

func (r WebhookKind) String() string

func (*WebhookKind) UnmarshalJSON added in v0.12.0

func (r *WebhookKind) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshal JSON

type WebhookManager added in v0.8.0

type WebhookManager interface {
	Create(context.Context, string, bool, WebhookKind, string, []EventType) (string, error)
	Delete(context.Context, string) error
	List() []Webhook
}

Jump to

Keyboard shortcuts

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