common

package
v0.2.2-0...-6c0b2be Latest Latest
Warning

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

Go to latest
Published: Mar 23, 2020 License: AGPL-3.0 Imports: 33 Imported by: 0

Documentation

Index

Constants

View Source
const (
	APP_VERSION       = "v0.4rc"
	LOG_PATH          = "data/state/log/"
	CONFIG_PATH       = "data/state/config/"
	DB_PATH           = "data/state/db/"
	FTS_PATH          = "data/state/search/"
	CERT_PATH         = "data/state/certs/"
	TMP_PATH          = "data/cache/tmp/"
	COOKIE_NAME_AUTH  = "auth"
	COOKIE_NAME_PROOF = "proof"
	COOKIE_NAME_ADMIN = "admin"
	COOKIE_PATH_ADMIN = "/admin/api/"
	COOKIE_PATH       = "/api/"
	FILE_INDEX        = "./data/public/index.html"
	FILE_ASSETS       = "./data/public/"
	URL_SETUP         = "/admin/setup"
	RGW_ENABLED       = true
)
View Source
const (
	PluginTypeBackend    = "backend"
	PluginTypeMiddleware = "middleware"
)
View Source
const (
	ADMIN_CLAIM = "ADMIN"
)
View Source
const BACKEND_NIL = "_nothing_"
View Source
const OverrideVideoSourceMapper = "/overrides/video-transcoder.js"
View Source
const PASSWORD_DUMMY = "{{PASSWORD}}"

Variables

View Source
var (
	BUILD_REF                     string
	BUILD_DATE                    string
	SECRET_KEY                    string
	SECRET_KEY_DERIVATE_FOR_PROOF string
	SECRET_KEY_DERIVATE_FOR_ADMIN string
	SECRET_KEY_DERIVATE_FOR_USER  string
	SECRET_KEY_DERIVATE_FOR_HASH  string
)
View Source
var (
	ErrNotFound          error = NewError("Not Found", 404)
	ErrNotAllowed        error = NewError("Not Allowed", 403)
	ErrPermissionDenied  error = NewError("Permission Denied", 403)
	ErrNotValid          error = NewError("Not Valid", 405)
	ErrConflict          error = NewError("Already exist", 409)
	ErrNotReachable      error = NewError("Cannot Reach Destination", 502)
	ErrInvalidPassword         = NewError("Invalid Password", 403)
	ErrNotImplemented          = NewError("Not Implemented", 501)
	ErrNotSupported            = NewError("This feature is not supported", 501)
	ErrFilesystemError         = NewError("Can't use filesystem", 503)
	ErrMissingDependency       = NewError("Missing dependency", 424)
	ErrNotAuthorized           = NewError("Not authorized", 401)
	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: NewTransormedTransport(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: NewTransormedTransport(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 MOCK_CURRENT_DIR string
View Source
var MimeTypes map[string]string = map[string]string{
	"txt":   "text/plain",
	"svg":   "image/svg+xml",
	"png":   "image/png",
	"woff2": "font/woff2",
	"js":    "application/javascript",
	"json":  "application/json",
}
View Source
var USER_AGENT = fmt.Sprintf("Filestash/%s.%s (http://filestash.app)", APP_VERSION, BUILD_DATE)

Functions

func AllMimeTypes

func AllMimeTypes() map[string]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 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)

* 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

* Join 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 NewInt

func NewInt(t int) *int

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 NewTransormedTransport

func NewTransormedTransport(transport http.Transport) http.RoundTripper

func Page

func Page(stuff string) string

func PrettyPrint

func PrettyPrint(json_dirty []byte) []byte

func PrintMemUsage

func PrintMemUsage()

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 (this AdminToken) IsAdmin() bool

func (AdminToken) IsValid

func (this AdminToken) IsValid() bool

type App

type App struct {
	Backend IBackend
	Body    map[string]interface{}
	Session map[string]string
	Share   Share
}

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
)

func NewConfiguration

func NewConfiguration() Configuration

func (Configuration) Bool

func (this Configuration) Bool() bool

func (*Configuration) Debug

func (this *Configuration) Debug() *FormElement

func (*Configuration) Default

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

func (Configuration) Export

func (this Configuration) Export() interface{}

func (*Configuration) Get

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

func (*Configuration) Initialise

func (this *Configuration) Initialise()

func (Configuration) Int

func (this Configuration) Int() int

func (Configuration) Interface

func (this Configuration) Interface() interface{}

func (*Configuration) ListenForChange

func (this *Configuration) ListenForChange() ChangeListener

func (*Configuration) Load

func (this *Configuration) Load()

func (Configuration) MarshalJSON

func (this Configuration) MarshalJSON() ([]byte, error)

func (Configuration) Save

func (this Configuration) Save() Configuration

func (*Configuration) Schema

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

func (*Configuration) Set

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

func (Configuration) String

func (this Configuration) String() string

func (*Configuration) UnlistenForChange

func (this *Configuration) UnlistenForChange(c 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 (this *Form) Iterator() []FormIterator

func (Form) MarshalJSON

func (this 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 (this Get) FrontendOverrides() []string

func (Get) HttpEndpoint

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

func (Get) ProcessFileContentBeforeSend

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

func (Get) Starter

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

func (Get) XDGOpen

func (this 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 (this *KeyValueStore) Clear()

func (*KeyValueStore) Get

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

func (*KeyValueStore) Set

func (this *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 (this Register) FrontendOverrides(url string)

func (Register) HttpEndpoint

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

func (Register) ProcessFileContentBeforeSend

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

func (Register) Starter

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

func (Register) XDGOpen

func (this 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 (this *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