common

package
v0.2.2-0...-eaa9271 Latest Latest
Warning

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

Go to latest
Published: Aug 26, 2021 License: AGPL-3.0 Imports: 33 Imported by: 0

Documentation

Index

Constants

View Source
const (
	AppVersion      = "v0.5"
	LogPath         = "data/state/log/"
	ConfigPath      = "data/state/config/"
	DbPath          = "data/state/db/"
	FtsPath         = "data/state/search/"
	CertPath        = "data/state/certs/"
	TmpPath         = "data/cache/tmp/"
	CookieNameAuth  = "auth"
	CookieNameProof = "proof"
	CookieNameAdmin = "admin"
	CookiePathAdmin = "/admin/api/"
	CookiePath      = "/api/"
	FileIndex       = "./data/public/index.html"
	FileAssets      = "./data/public/"
	UrlSetup        = "/admin/setup"
)
View Source
const (
	AdminClaim = "ADMIN"
)
View Source
const AuthAdmin = "auth.admin"
View Source
const BackendNil = "_nothing_"
View Source
const OverrideVideoSourceMapper = "/overrides/video-transcoder.js"
View Source
const PasswordDummy = "{{PASSWORD}}"

Variables

View Source
var (
	BuildRef                  string
	BuildDate                 string
	SecretKey                 string
	SecretKeyDerivateForProof string
	SecretKeyDerivateForAdmin string
	SecretKeyDerivateForUser  string
	SecretKeyDerivateForHash  string
)
View Source
var (
	ErrNotFound             = NewError("Not Found", 404)
	ErrNotAllowed           = NewError("Not Allowed", 403)
	ErrPermissionDenied     = NewError("Permission Denied", 403)
	ErrNotValid             = NewError("Not Valid", 405)
	ErrConflict             = NewError("Already exist", 409)
	ErrNotReachable         = NewError("Cannot establish a connection", 502)
	ErrInvalidPassword      = NewError("Invalid Password", 403)
	ErrNotImplemented       = NewError("Not Implemented", 501)
	ErrNotSupported         = NewError("Not supported", 501)
	ErrFilesystemError      = NewError("Can't use filesystem", 503)
	ErrMissingDependency    = NewError("Missing dependency", 424)
	ErrNotAuthorized        = NewError("Not authorised", 401)
	ErrAuthenticationFailed = NewError("Invalid account", 400)
	ErrCongestion           = NewError("Traffic congestion, try again later", 500)
	ErrTimeout              = NewError("Timeout", 500)
)
View Source
var Backend = NewDriver()
View Source
var HTTP = http.Client{
	Timeout: 10000 * time.Millisecond,
	Transport: NewTransformedTransport(http.Transport{
		Dial: (&net.Dialer{
			Timeout:   5000 * time.Millisecond,
			KeepAlive: 5000 * time.Millisecond,
		}).Dial,
		TLSHandshakeTimeout:   5000 * time.Millisecond,
		IdleConnTimeout:       5000 * time.Millisecond,
		ResponseHeaderTimeout: 5000 * time.Millisecond,
	}),
}
View Source
var HTTPClient = http.Client{
	Timeout: 5 * time.Hour,
	Transport: NewTransformedTransport(http.Transport{
		Dial: (&net.Dialer{
			Timeout:   10 * time.Second,
			KeepAlive: 10 * time.Second,
		}).Dial,
		TLSHandshakeTimeout:   5 * time.Second,
		IdleConnTimeout:       60 * time.Second,
		ResponseHeaderTimeout: 60 * time.Second,
	}),
}
View Source
var Hooks = struct {
	Get      Get
	Register Register
}{
	Get:      Get{},
	Register: Register{},
}
View Source
var Letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
View Source
var Log = func() log {
	l := log{}
	l.Enable(true)
	return l
}()
View Source
var MimeTypes = map[string]string{}/* 167 elements not displayed */
View Source
var MockCurrentDir string
View Source
var UserAgent = fmt.Sprintf("Filestash/%s.%s (http://filestash.app)", AppVersion, BuildDate)

Functions

func AllMimeTypes

func AllMimeTypes() map[string]string

func ConfigAuthAdmin

func ConfigAuthAdmin() string

func DecryptString

func DecryptString(secret string, data string) (string, error)

func EncryptString

func EncryptString(secret string, data string) (string, error)

func EnforceDirectory

func EnforceDirectory(path string) string

func GenerateID

func GenerateID(ctx *App) string

Create a unique ID that can be use to identify different session

func GenerateMachineID

func GenerateMachineID() string

Create an ID that identify a machine

func GetAbsolutePath

func GetAbsolutePath(p string) string

func GetCurrentDir

func GetCurrentDir() string

func GetHomeDir

func GetHomeDir() string

func GetMimeType

func GetMimeType(p string) string

func HTTPFriendlyStatus

func HTTPFriendlyStatus(n int) string

func Hash

func Hash(str string, n int) string

func HashStream

func HashStream(r io.Reader, n int) string

func InitSecretDerivate

func InitSecretDerivate(secret string)

InitSecretDerivate Improve security by calculating derivative of the secret key to restrict the attack surface in the worst case scenario with one compromise secret key

func IsDirectory

func IsDirectory(path string) bool

func JoinPath

func JoinPath(base, file string) string

JoinPath joins 2 path together, result has a file

func NewBool

func NewBool(t bool) *bool

func NewBoolFromInterface

func NewBoolFromInterface(val interface{}) bool

func NewError

func NewError(message string, status int) error

func NewInt64pFromInterface

func NewInt64pFromInterface(val interface{}) *int64

func NewNilLogger

func NewNilLogger() *slog.Logger

func NewReadCloserFromBytes

func NewReadCloserFromBytes(t []byte) io.ReadCloser

func NewReadCloserFromReader

func NewReadCloserFromReader(r io.Reader) io.ReadCloser

func NewString

func NewString(t string) *string

func NewStringFromInterface

func NewStringFromInterface(val interface{}) string

func NewStringpFromInterface

func NewStringpFromInterface(val interface{}) *string

func NewTransformedTransport

func NewTransformedTransport(transport http.Transport) http.RoundTripper

func Page

func Page(stuff string) string

func PrettyPrint

func PrettyPrint(json_dirty []byte) []byte

func QuickHash

func QuickHash(str string, n int) string

func QuickString

func QuickString(n int) string

func RandomString

func RandomString(n int) string

func ReversedBaseChange

func ReversedBaseChange(alphabet []rune, i int) string

func SendErrorResult

func SendErrorResult(res http.ResponseWriter, err error)

func SendSuccessResult

func SendSuccessResult(res http.ResponseWriter, data interface{})

func SendSuccessResultWithEtagAndGzip

func SendSuccessResultWithEtagAndGzip(res http.ResponseWriter, req *http.Request, data interface{})

func SendSuccessResults

func SendSuccessResults(res http.ResponseWriter, data interface{})

func SendSuccessResultsWithMetadata

func SendSuccessResultsWithMetadata(res http.ResponseWriter, data interface{}, p interface{})

Types

type APIErrorMessage

type APIErrorMessage struct {
	Status  string `json:"status"`
	Message string `json:"message,omitempty"`
}

type APISuccessResult

type APISuccessResult struct {
	Status string      `json:"status"`
	Result interface{} `json:"result,omitempty"`
}

type APISuccessResults

type APISuccessResults struct {
	Status  string      `json:"status"`
	Results interface{} `json:"results"`
}

type APISuccessResultsWithMetadata

type APISuccessResultsWithMetadata struct {
	Status   string      `json:"status"`
	Results  interface{} `json:"results"`
	Metadata interface{} `json:"metadata,omitempty"`
}

type AdminToken

type AdminToken struct {
	Claim  string    `json:"token"`
	Expire time.Time `json:"time"`
}

func NewAdminToken

func NewAdminToken() AdminToken

func (AdminToken) IsAdmin

func (t AdminToken) IsAdmin() bool

func (AdminToken) IsValid

func (t AdminToken) IsValid() bool

type App

type App struct {
	Backend    IBackend
	Body       map[string]interface{}
	Session    map[string]string
	Share      Share
	LogEnabled bool
	R          *mux.Router
}

type AppCache

type AppCache struct {
	Cache *cache.Cache
}

func NewAppCache

func NewAppCache(arg ...time.Duration) AppCache

func NewQuickCache

func NewQuickCache(arg ...time.Duration) AppCache

func (*AppCache) Del

func (a *AppCache) Del(key map[string]string)

func (*AppCache) Get

func (a *AppCache) Get(key interface{}) interface{}

func (*AppCache) OnEvict

func (a *AppCache) OnEvict(fn func(string, interface{}))

func (*AppCache) Set

func (a *AppCache) Set(key map[string]string, value interface{})

func (*AppCache) SetKey

func (a *AppCache) SetKey(key string, value interface{})

type AppError

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

func (AppError) Error

func (e AppError) Error() string

func (AppError) Status

func (e AppError) Status() int

type ChangeListener

type ChangeListener struct {
	Id       string
	Listener chan interface{}
}

type Configuration

type Configuration struct {
	Conn []map[string]interface{}
	// contains filtered or unexported fields
}
var (
	Config         Configuration
	ConfigJSONPath = filepath.Join(GetHomeDir(), "filestash_config.json")
)

func NewConfiguration

func NewConfiguration() Configuration

func (*Configuration) Bool

func (c *Configuration) Bool() bool

func (*Configuration) Debug

func (c *Configuration) Debug() *FormElement

func (*Configuration) Default

func (c *Configuration) Default(value interface{}) *Configuration

func (*Configuration) Export

func (c *Configuration) Export() interface{}

func (*Configuration) Get

func (c *Configuration) Get(key string) *Configuration

func (*Configuration) Initialise

func (c *Configuration) Initialise()

func (*Configuration) Int

func (c *Configuration) Int() int

func (*Configuration) Interface

func (c *Configuration) Interface() interface{}

func (*Configuration) ListenForChange

func (c *Configuration) ListenForChange() ChangeListener

func (*Configuration) Load

func (c *Configuration) Load()

func (*Configuration) MarshalJSON

func (c *Configuration) MarshalJSON() ([]byte, error)

func (*Configuration) Save

func (c *Configuration) Save() *Configuration

func (*Configuration) Schema

func (c *Configuration) Schema(fn func(*FormElement) *FormElement) *Configuration

func (*Configuration) Set

func (c *Configuration) Set(value interface{}) *Configuration

func (*Configuration) String

func (c *Configuration) String() string

func (*Configuration) UnlistenForChange

func (c *Configuration) UnlistenForChange(l ChangeListener)

type Driver

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

func NewDriver

func NewDriver() Driver

func (*Driver) Drivers

func (d *Driver) Drivers() map[string]IBackend

func (*Driver) Get

func (d *Driver) Get(name string) IBackend

func (*Driver) Register

func (d *Driver) Register(name string, driver IBackend)

type File

type File struct {
	FName     string `json:"name"`
	FType     string `json:"type"`
	FTime     int64  `json:"time"`
	FSize     int64  `json:"size"`
	FPath     string `json:"path,omitempty"`
	CanRename *bool  `json:"can_rename,omitempty"`
	CanMove   *bool  `json:"can_move_directory,omitempty"`
	CanDelete *bool  `json:"can_delete,omitempty"`
}

func (File) IsDir

func (f File) IsDir() bool

func (File) ModTime

func (f File) ModTime() time.Time

func (File) Mode

func (f File) Mode() os.FileMode

func (File) Name

func (f File) Name() string

func (File) Size

func (f File) Size() int64

func (File) Sys

func (f File) Sys() interface{}

type Form

type Form struct {
	Title  string
	Form   []Form
	Elmnts []FormElement
}

func (*Form) Iterator

func (f *Form) Iterator() []FormIterator

func (Form) MarshalJSON

func (f Form) MarshalJSON() ([]byte, error)

type FormElement

type FormElement struct {
	Id          string      `json:"id,omitempty"`
	Name        string      `json:"label"`
	Type        string      `json:"type"`
	Description string      `json:"description,omitempty"`
	Placeholder string      `json:"placeholder,omitempty"`
	Opts        []string    `json:"options,omitempty"`
	Target      []string    `json:"target,omitempty"`
	ReadOnly    bool        `json:"readonly"`
	Default     interface{} `json:"default"`
	Value       interface{} `json:"value"`
	MultiValue  bool        `json:"multi,omitempty"`
	Datalist    []string    `json:"datalist,omitempty"`
	Order       int         `json:"-"`
	Required    bool        `json:"required"`
}

type FormIterator

type FormIterator struct {
	Path string
	*FormElement
}

type Get

type Get struct{}

func (Get) FrontendOverrides

func (g Get) FrontendOverrides() []string

func (Get) HttpEndpoint

func (g Get) HttpEndpoint() []func(*mux.Router, *App) error

func (Get) ProcessFileContentBeforeSend

func (g Get) ProcessFileContentBeforeSend() []func(io.ReadCloser, *App, *http.ResponseWriter, *http.Request) (io.ReadCloser, error)

func (Get) Starter

func (g Get) Starter() []func(*mux.Router)

func (Get) XDGOpen

func (g Get) XDGOpen() []string

type IBackend

type IBackend interface {
	Init(params map[string]string, app *App) (IBackend, error)
	Ls(path string) ([]os.FileInfo, error)
	Cat(path string) (io.ReadCloser, error)
	Mkdir(path string) error
	Rm(path string) error
	Mv(from string, to string) error
	Save(path string, file io.Reader) error
	Touch(path string) error
	LoginForm() Form
}

type JSONIterator

type JSONIterator struct {
	Path  string
	Value interface{}
}

func JsonIterator

func JsonIterator(json string) []JSONIterator

type KeyValueStore

type KeyValueStore struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewKeyValueStore

func NewKeyValueStore() KeyValueStore

func (*KeyValueStore) Clear

func (s *KeyValueStore) Clear()

func (*KeyValueStore) Get

func (s *KeyValueStore) Get(key string) interface{}

func (*KeyValueStore) Set

func (s *KeyValueStore) Set(key string, value interface{})

type Metadata

type Metadata struct {
	CanSee             *bool      `json:"can_read,omitempty"`
	CanCreateFile      *bool      `json:"can_create_file,omitempty"`
	CanCreateDirectory *bool      `json:"can_create_directory,omitempty"`
	CanRename          *bool      `json:"can_rename,omitempty"`
	CanMove            *bool      `json:"can_move,omitempty"`
	CanUpload          *bool      `json:"can_upload,omitempty"`
	CanDelete          *bool      `json:"can_delete,omitempty"`
	CanShare           *bool      `json:"can_share,omitempty"`
	HideExtension      *bool      `json:"hide_extension,omitempty"`
	RefreshOnCreate    *bool      `json:"refresh_on_create,omitempty"`
	Expire             *time.Time `json:"-"`
}

type Nothing

type Nothing struct{}

func (Nothing) Cat

func (b Nothing) Cat(path string) (io.ReadCloser, error)

func (Nothing) Init

func (b Nothing) Init(params map[string]string, app *App) (IBackend, error)

func (Nothing) LoginForm

func (b Nothing) LoginForm() Form

func (Nothing) Ls

func (b Nothing) Ls(path string) ([]os.FileInfo, error)

func (Nothing) Mkdir

func (b Nothing) Mkdir(path string) error

func (Nothing) Mv

func (b Nothing) Mv(from string, to string) error

func (Nothing) Rm

func (b Nothing) Rm(path string) error

func (Nothing) Save

func (b Nothing) Save(path string, file io.Reader) error

func (Nothing) Touch

func (b Nothing) Touch(path string) error

type Plugin

type Plugin struct {
	Type   string
	Enable bool
}

type Register

type Register struct{}

func (Register) FrontendOverrides

func (r Register) FrontendOverrides(url string)

func (Register) HttpEndpoint

func (r Register) HttpEndpoint(fn func(*mux.Router, *App) error)

func (Register) ProcessFileContentBeforeSend

func (r Register) ProcessFileContentBeforeSend(fn func(io.ReadCloser, *App, *http.ResponseWriter, *http.Request) (io.ReadCloser, error))

func (Register) Starter

func (r Register) Starter(fn func(*mux.Router))

func (Register) XDGOpen

func (r Register) XDGOpen(jsString string)

type Share

type Share struct {
	Id           string  `json:"id"`
	Backend      string  `json:"-"`
	Auth         string  `json:"auth,omitempty"`
	Path         string  `json:"path"`
	Password     *string `json:"password,omitempty"`
	Users        *string `json:"users,omitempty"`
	Expire       *int64  `json:"expire,omitempty"`
	Url          *string `json:"url,omitempty"`
	CanShare     bool    `json:"can_share"`
	CanManageOwn bool    `json:"can_manage_own"`
	CanRead      bool    `json:"can_read"`
	CanWrite     bool    `json:"can_write"`
	CanUpload    bool    `json:"can_upload"`
}

func (Share) IsValid

func (s Share) IsValid() error

func (*Share) MarshalJSON

func (s *Share) MarshalJSON() ([]byte, error)

func (*Share) UnmarshallJSON

func (s *Share) UnmarshallJSON(b []byte) error

type TransformedTransport

type TransformedTransport struct {
	Orig http.RoundTripper
}

func (*TransformedTransport) RoundTrip

func (t *TransformedTransport) RoundTrip(req *http.Request) (*http.Response, error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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