461 lines
33 KiB
Go
461 lines
33 KiB
Go
package settings
|
|
|
|
import (
|
|
"github.com/gtsteffaniak/filebrowser/backend/database/users"
|
|
)
|
|
|
|
type AllowedMethods string
|
|
|
|
var Env Environment
|
|
|
|
const (
|
|
ProxyAuth AllowedMethods = "proxyAuth"
|
|
NoAuth AllowedMethods = "noAuth"
|
|
PasswordAuth AllowedMethods = "passwordAuth"
|
|
)
|
|
|
|
type Settings struct {
|
|
Server Server `json:"server"`
|
|
Auth Auth `json:"auth"`
|
|
Frontend Frontend `json:"frontend"`
|
|
UserDefaults UserDefaults `json:"userDefaults"`
|
|
Integrations Integrations `json:"integrations"`
|
|
}
|
|
|
|
type Environment struct {
|
|
IsPlaywright bool `json:"-"`
|
|
IsDevMode bool `json:"-"`
|
|
IsFirstLoad bool `json:"-"` // used internally to track if this is the first load of the application
|
|
MuPdfAvailable bool `json:"-"` // used internally if compiled with mupdf support
|
|
EmbeddedFs bool `json:"-"` // used internally if compiled with embedded fs support
|
|
FFmpegPath string `json:"-"`
|
|
FFprobePath string `json:"-"`
|
|
LoginIconPath string `json:"-"` // resolved login icon path (filesystem or embedded)
|
|
LoginIconIsCustom bool `json:"-"` // true if login icon is from custom filesystem path
|
|
LoginIconEmbeddedPath string `json:"-"` // embedded asset path for default icon
|
|
FaviconPath string `json:"-"` // resolved favicon path (filesystem or embedded)
|
|
FaviconIsCustom bool `json:"-"` // true if favicon is from custom filesystem path
|
|
FaviconEmbeddedPath string `json:"-"` // embedded asset path for default favicon
|
|
}
|
|
|
|
type Server struct {
|
|
MinSearchLength int `json:"minSearchLength" yaml:"minSearchLength"` // minimum length of search query to begin searching (default: 3)
|
|
DisableUpdateCheck bool `json:"disableUpdateCheck"` // disables backend update check service
|
|
NumImageProcessors int `json:"numImageProcessors"` // number of concurrent image processing jobs used to create previews, default is number of cpu cores available.
|
|
Socket string `json:"socket"` // socket to listen on
|
|
TLSKey string `json:"tlsKey"` // path to TLS key
|
|
TLSCert string `json:"tlsCert"` // path to TLS cert
|
|
DisablePreviews bool `json:"disablePreviews"` // disable all previews thumbnails, simple icons will be used
|
|
DisableResize bool `json:"disablePreviewResize"` // disable resizing of previews for faster loading over slow connections
|
|
DisableTypeDetectionByHeader bool `json:"disableTypeDetectionByHeader"` // disable type detection by header, useful if filesystem is slow.
|
|
Port int `json:"port"` // port to listen on
|
|
ListenAddress string `json:"listen"` // address to listen on (default: 0.0.0.0)
|
|
BaseURL string `json:"baseURL"` // base URL for the server, the subpath that the server is running on.
|
|
Logging []LogConfig `json:"logging" yaml:"logging"`
|
|
Database string `json:"database"` // path to the database file
|
|
Sources []*Source `json:"sources" validate:"required,dive"`
|
|
ExternalUrl string `json:"externalUrl"` // used by share links if set (eg. http://mydomain.com)
|
|
InternalUrl string `json:"internalUrl"` // used by integrations if set, this is the base domain that an integration service will use to communicate with filebrowser (eg. http://localhost:8080)
|
|
CacheDir string `json:"cacheDir"` // path to the cache directory, used for thumbnails and other cached files
|
|
CacheDirCleanup bool `json:"cacheDirCleanup"` // whether to automatically cleanup the cache directory. Note: docker must also mount a persistent volume to persist the cache (default: false)
|
|
MaxArchiveSizeGB int64 `json:"maxArchiveSize"` // maximum archive/unarchive size in GB. 0 means no limit. (default: 20)
|
|
Filesystem Filesystem `json:"filesystem"` // filesystem settings
|
|
IndexSqlConfig IndexSqlConfig `json:"indexSqlConfig"` // Index database SQL configuration
|
|
DisableWebDAV bool `json:"disableWebDAV"` // disable webdav support (default: false)
|
|
// not exposed to config
|
|
SourceMap map[string]*Source `json:"-" validate:"omitempty"` // uses realpath as key
|
|
NameToSource map[string]*Source `json:"-" validate:"omitempty"` // uses name as key
|
|
}
|
|
|
|
type Filesystem struct {
|
|
CreateFilePermission string `json:"createFilePermission" validate:"required,file_permission"` // Unix permissions like 644, 755, 2755 (default: 644)
|
|
CreateDirectoryPermission string `json:"createDirectoryPermission" validate:"required,file_permission"` // Unix permissions like 755, 2755, 1777 (default: 755)
|
|
}
|
|
|
|
// Index SQL startup integrity modes (IndexSqlConfig.StartupIntegrityCheck).
|
|
const (
|
|
// IndexStartupIntegrityQuickCheck runs PRAGMA quick_check (default). Slower on very large DBs but thorough.
|
|
IndexStartupIntegrityQuickCheck = "quickCheck"
|
|
// IndexStartupIntegrityProbe verifies sqlite_master and optionally one row read only; fast for large indexes.
|
|
IndexStartupIntegrityProbe = "probe"
|
|
// IndexStartupIntegrityOff skips startup checks beyond sql.Open Ping; least safe, fastest boot.
|
|
IndexStartupIntegrityOff = "off"
|
|
)
|
|
|
|
type IndexSqlConfig struct {
|
|
BatchSize int `json:"batchSize"` // number of items to batch in a single transaction, typically 500-5000. higher = faster but could use more memory.
|
|
CacheSizeMB int `json:"cacheSizeMB"` // size of the SQLite cache in MB
|
|
WalMode bool `json:"walMode"` // enable the more complex WAL journaling mode. Slower, more memory usage, but better for deployments with constant user activity.
|
|
DisableReuse bool `json:"disableReuse"` // enable to always create a new indexing database on startup.
|
|
StartupIntegrityCheck string `json:"startupIntegrityCheck,omitempty" validate:"omitempty,oneof=quickCheck probe off"` // the method used to check the integrity of the index database on startup (default: quickCheck)
|
|
}
|
|
|
|
type Integrations struct {
|
|
OnlyOffice OnlyOffice `json:"office" validate:"omitempty"`
|
|
Media Media `json:"media" validate:"omitempty"`
|
|
}
|
|
|
|
// onlyoffice secret is stored in the local.json file
|
|
// docker exec <containerID> /var/www/onlyoffice/documentserver/npm/json -f /etc/onlyoffice/documentserver/local.json 'services.CoAuthoring.secret.session.string'
|
|
type OnlyOffice struct {
|
|
Url string `json:"url" validate:"required"` // The URL to the OnlyOffice Document Server, needs to be accessible to the user.
|
|
InternalUrl string `json:"internalUrl"` // An optional internal address that the filebrowser server can use to communicate with the OnlyOffice Document Server, could be useful to bypass proxy.
|
|
Secret string `json:"secret" validate:"required"` // secret: authentication key for OnlyOffice integration
|
|
ViewOnly bool `json:"viewOnly"` // view only mode for OnlyOffice
|
|
}
|
|
|
|
type Media struct {
|
|
FfmpegPath string `json:"ffmpegPath"` // path to ffmpeg directory with ffmpeg and ffprobe (eg. /usr/local/bin)
|
|
Convert FfmpegConvert `json:"convert"` // config for ffmpeg conversion settings
|
|
Debug bool `json:"debug"` // output ffmpeg stdout for media integration -- careful can produces lots of output!
|
|
ExtractEmbeddedSubtitles bool `json:"extractEmbeddedSubtitles"` // extract embedded subtitles from media files
|
|
ExiftoolPath string `json:"exiftoolPath"` // path to exiftool executable
|
|
}
|
|
|
|
type FfmpegConvert struct {
|
|
ImagePreview map[ImagePreviewType]*bool `json:"imagePreview"` // supported image preview formats. defaults vary by type (see individual type docs)
|
|
VideoPreview map[VideoPreviewType]*bool `json:"videoPreview"` // supported video preview formats. defaults to true for all types unless explicitly disabled.
|
|
}
|
|
|
|
type ImagePreviewType string
|
|
|
|
const (
|
|
HEICImagePreview ImagePreviewType = "heic"
|
|
JPEGImagePreview ImagePreviewType = "jpeg" // only used as fallback for JPEG formats that can't otherwise be decoded
|
|
//RAWImagePreview ImagePreviewType = "raw"
|
|
)
|
|
|
|
func (i ImagePreviewType) String() string {
|
|
return string(i)
|
|
}
|
|
|
|
// AllImagePreviewTypes contains all supported image preview types.
|
|
var AllImagePreviewTypes = []ImagePreviewType{
|
|
HEICImagePreview,
|
|
JPEGImagePreview,
|
|
//RAWImagePreview,
|
|
}
|
|
|
|
type VideoPreviewType string
|
|
|
|
const (
|
|
MP4VideoPreview VideoPreviewType = "mp4"
|
|
WebMVideoPreview VideoPreviewType = "webm"
|
|
MOVVideoPreview VideoPreviewType = "mov"
|
|
AVIVideoPreview VideoPreviewType = "avi"
|
|
MKVVideoPreview VideoPreviewType = "mkv"
|
|
FLVVideoPreview VideoPreviewType = "flv"
|
|
WMVVideoPreview VideoPreviewType = "wmv"
|
|
M4VVideoPreview VideoPreviewType = "m4v"
|
|
ThreeGPVideoPreview VideoPreviewType = "3gp"
|
|
ThreeGP2VideoPreview VideoPreviewType = "3g2"
|
|
TSVideoPreview VideoPreviewType = "ts"
|
|
M2TSVideoPreview VideoPreviewType = "m2ts"
|
|
VOBVideoPreview VideoPreviewType = "vob"
|
|
ASFVideoPreview VideoPreviewType = "asf"
|
|
MPGVideoPreview VideoPreviewType = "mpg"
|
|
MPEGVideoPreview VideoPreviewType = "mpeg"
|
|
F4VVideoPreview VideoPreviewType = "f4v"
|
|
OGVVideoPreview VideoPreviewType = "ogv"
|
|
)
|
|
|
|
func (v VideoPreviewType) String() string {
|
|
return string(v)
|
|
}
|
|
|
|
// AllVideoPreviewTypes contains all supported video preview types.
|
|
var AllVideoPreviewTypes = []VideoPreviewType{
|
|
MP4VideoPreview,
|
|
WebMVideoPreview,
|
|
MOVVideoPreview,
|
|
AVIVideoPreview,
|
|
MKVVideoPreview,
|
|
FLVVideoPreview,
|
|
WMVVideoPreview,
|
|
M4VVideoPreview,
|
|
ThreeGPVideoPreview,
|
|
ThreeGP2VideoPreview,
|
|
TSVideoPreview,
|
|
M2TSVideoPreview,
|
|
VOBVideoPreview,
|
|
ASFVideoPreview,
|
|
MPGVideoPreview,
|
|
MPEGVideoPreview,
|
|
F4VVideoPreview,
|
|
OGVVideoPreview,
|
|
}
|
|
|
|
type LogConfig struct {
|
|
Levels string `json:"levels" yaml:"levels"` // separated list of log levels to enable. (eg. "info|warning|error|debug")
|
|
ApiLevels string `json:"apiLevels" yaml:"apiLevels"` // separated list of log levels to enable for the API. (eg. "info|warning|error")
|
|
Output string `json:"output" yaml:"output"` // output location. (eg. "stdout" or "path/to/file.log")
|
|
NoColors bool `json:"noColors" yaml:"noColors"` // disable colors in the output
|
|
Json bool `json:"json" yaml:"json"` // output in json format
|
|
Utc bool `json:"utc" yaml:"utc"` // use UTC time in the output instead of local time.
|
|
ApiFilter string `json:"apiFilter" yaml:"apiFilter"` // regex filter that excludes matching full api paths from being logged. (eg. '/user\?id\=self') Defaults to '^/health|^/favicon.ico|^/static|^/public/static'
|
|
}
|
|
type Source struct {
|
|
Path string `json:"path" validate:"required"` // file system path. (Can be relative)
|
|
Name string `json:"name"` // display name
|
|
Config SourceConfig `json:"config,omitempty"`
|
|
}
|
|
|
|
type SourceConfig struct {
|
|
DenyByDefault bool `json:"denyByDefault,omitempty"` // deny access unless an "allow" access rule was specifically created.
|
|
Private bool `json:"private"` // designate as source as private -- currently just means no sharing permitted.
|
|
Disabled bool `json:"disabled,omitempty"` // disable the source, this is useful so you don't need to remove it from the config file
|
|
IndexingInterval uint32 `json:"indexingIntervalMinutes,omitempty"` // deprecated: create a rule with indexingIntervalMinutes to set the indexing interval for this source
|
|
Conditionals ConditionalFilter `json:"conditionals"` // deprecated: use source.rules instead
|
|
Rules []ConditionalRule `json:"rules"` // list of item rules to apply to specific paths
|
|
DefaultUserScope string `json:"defaultUserScope"` // defaults to root of index "/" should match folders under path
|
|
DefaultEnabled bool `json:"defaultEnabled"` // should be added as a default source for new users?
|
|
CreateUserDir bool `json:"createUserDir"` // create a user directory for each user under defaultUserScope + username
|
|
UseLogicalSize bool `json:"useLogicalSize"` // calculate sizes based on logical size instead of disk utilization (du -sh), folders will be 0 bytes when empty.
|
|
// hidden but used internally - optimized map lookups for conditional rules
|
|
ResolvedRules ResolvedRulesConfig `json:"-"`
|
|
}
|
|
|
|
type ConditionalFilter struct {
|
|
Hidden bool `json:"hidden"` // deprecated: use ignoreHidden instead. eg, FolderPath: "/" and ignoreHidden: true will exclude hidden files and folders under the root folder.
|
|
IgnoreHidden bool `json:"ignoreHidden"` // deprecated: use ignoreHidden instead. eg, FolderPath: "/" and ignoreHidden: true will exclude hidden files and folders under the root folder.
|
|
ZeroSizeFolders bool `json:"ignoreZeroSizeFolders"` // deprecated: use ignoreZeroSizeFolders instead. eg, FolderPath: "/" and ignoreZeroSizeFolders: true will ignore folders with 0 size under the root folder.
|
|
ItemRules []ConditionalRule `json:"rules"` // list of item rules to apply to specific paths
|
|
}
|
|
|
|
type ConditionalRule struct {
|
|
NeverWatchPath string `json:"neverWatchPath"` // index the folder in the first pass to get included in search, but never re-indexed.
|
|
IncludeRootItem string `json:"includeRootItem"` // include only these items at root folder level
|
|
FileStartsWith string `json:"fileStartsWith"` // (global) exclude files that start with these prefixes. Eg. "archive-" or "backup-"
|
|
FolderStartsWith string `json:"folderStartsWith"` // (global) exclude folders that start with these prefixes. Eg. "archive-" or "backup-"
|
|
FileEndsWith string `json:"fileEndsWith"` // (global) exclude files that end with these suffixes. Eg. ".jpg" or ".txt"
|
|
FolderEndsWith string `json:"folderEndsWith"` // (global) exclude folders that end with these suffixes. Eg. ".thumbnails" or ".git"
|
|
FolderPath string `json:"folderPath"` // (global) exclude folders that match this path. Eg. "/path/to/folder" or "/path/to/folder/subfolder"
|
|
FilePath string `json:"filePath"` // (global) exclude files that match this path. Eg. "/path/to/file.txt" or "/path/to/file.txt/subfile.txt"
|
|
FileNames string `json:"fileNames"` // deprecated: exclude files that match these names. Eg. "file.txt" or "test.csv"
|
|
FolderNames string `json:"folderNames"` // deprecated: exclude folders that match these names. Eg. "folder" or "subfolder"
|
|
FileName string `json:"fileName"` // (global) exclude files that match these names. Eg. "file.txt" or "test.csv"
|
|
FolderName string `json:"folderName"` // (global) exclude folders that match these names. Eg. "folder" or "subfolder"
|
|
|
|
Viewable bool `json:"viewable"` // Enable viewing in UI but exclude from indexing
|
|
IgnoreHidden bool `json:"ignoreHidden"` // Excludes only hidden files and folders
|
|
IgnoreZeroSizeFolders bool `json:"ignoreZeroSizeFolders"` // Excludes only folders with 0 size
|
|
IgnoreSymlinks bool `json:"ignoreSymlinks"` // Excludes symbolic links
|
|
}
|
|
|
|
// ConditionalMaps provides O(1) lookup performance for conditional rules
|
|
// Maps are built from ConditionalFilter during initialization
|
|
type ResolvedRulesConfig struct {
|
|
// Exact match maps - O(1) lookup (only for names, not StartsWith/EndsWith)
|
|
FileNames map[string]ConditionalRule // key: file name
|
|
FolderNames map[string]ConditionalRule // key: folder name
|
|
|
|
// exact match for paths
|
|
FilePaths map[string]ConditionalRule // key: file path
|
|
FolderPaths map[string]ConditionalRule // key: folder path
|
|
|
|
FileEndsWith []ConditionalRule // list of item rules that have been resolved for specific paths
|
|
FolderEndsWith []ConditionalRule // list of item rules that have been resolved for specific paths
|
|
FileStartsWith []ConditionalRule // list of item rules that have been resolved for specific paths
|
|
FolderStartsWith []ConditionalRule // list of item rules that have been resolved for specific paths
|
|
|
|
// NeverWatch paths map - O(1) lookup for all paths with neverWatch: true
|
|
// This replaces the old NeverWatchPaths slice
|
|
NeverWatchPaths map[string]struct{} // key: full folder path
|
|
IncludeRootItems map[string]struct{} // key: inclusive root item
|
|
|
|
IgnoreAllHidden bool // Excludes all hidden files and folders
|
|
IgnoreAllZeroSizeFolders bool // Excludes all folders with 0 size
|
|
IgnoreAllSymlinks bool // Excludes all symbolic links
|
|
IndexingDisabled bool // Excludes all files and folders from indexing
|
|
NoRules bool // No rules are configured
|
|
}
|
|
|
|
type Frontend struct {
|
|
Name string `json:"name"` // display name
|
|
DisableDefaultLinks bool `json:"disableDefaultLinks"` // disable default links in the sidebar
|
|
DisableUsedPercentage bool `json:"disableUsedPercentage"` // disable used percentage for the sources in the sidebar
|
|
ExternalLinks []ExternalLink `json:"externalLinks"`
|
|
DisableNavButtons bool `json:"disableNavButtons"` // disable the nav buttons in the sidebar
|
|
Styling StylingConfig `json:"styling"`
|
|
Favicon string `json:"favicon"` // path to a favicon to use for the frontend
|
|
Description string `json:"description"` // description that shows up in html head meta description
|
|
LoginIcon string `json:"loginIcon"` // path to an image file for the login page icon
|
|
LoginButtonText string `json:"loginButtonText"` // text to display on the login button
|
|
OIDCLoginButtonText string `json:"oidcLoginButtonText"` // text to display on the OIDC login button
|
|
}
|
|
|
|
type StylingConfig struct {
|
|
DisableEventBasedThemes bool `json:"disableEventThemes"` // disable the event based themes,
|
|
CustomCSS string `json:"customCSS"` // if a valid path to a css file is provided, it will be applied for all users. (eg. "reduce-rounded-corners.css")
|
|
CustomCSSRaw string `json:"-"` // The css raw content to use for the custom css.
|
|
LightBackground string `json:"lightBackground"` // specify a valid CSS color property value to use as the background color in light mode
|
|
DarkBackground string `json:"darkBackground"` // Specify a valid CSS color property value to use as the background color in dark mode
|
|
CustomThemes map[string]CustomTheme `json:"customThemes"` // A list of custom css files that each user can select to override the default styling. if "default" is key name then it will be the default option.
|
|
// In-memory (not exposed to config)
|
|
CustomThemeOptions map[string]CustomTheme `json:"-"` // not exposed
|
|
}
|
|
|
|
type CustomTheme struct {
|
|
Description string `json:"description"` // The description of the theme to display in the UI.
|
|
CSS string `json:"css,omitempty"` // The css file path and filename to use for the theme.
|
|
CssRaw string `json:"-"` // The css raw content to use for the theme.
|
|
}
|
|
|
|
type ExternalLink struct {
|
|
Text string `json:"text" validate:"required"` // the text to display on the link
|
|
Title string `json:"title"` // the title to display on hover
|
|
Url string `json:"url" validate:"required"` // the url to link to
|
|
}
|
|
|
|
// UserDefaultsPermissions holds permission settings with pointer types for defaults
|
|
type UserDefaultsPermissions struct {
|
|
Api bool `json:"api"` // deprecated: use account.permissions.api instead. allow api access
|
|
Admin bool `json:"admin"` // deprecated: use account.permissions.admin instead. allow admin access
|
|
Modify bool `json:"modify"` // deprecated: use account.permissions.modify instead. allow modifying files
|
|
Share bool `json:"share"` // deprecated: use account.permissions.share instead. allow sharing files
|
|
Realtime bool `json:"realtime"` // deprecated: use account.permissions.realtime instead. allow realtime updates
|
|
Delete bool `json:"delete"` // deprecated: use account.permissions.delete instead. allow deleting files
|
|
Create bool `json:"create"` // deprecated: use account.permissions.create instead. allow creating or uploading files
|
|
Download *bool `json:"download"` // deprecated: use account.permissions.download instead. allow downloading files
|
|
}
|
|
|
|
// New organized structures for UserDefaults
|
|
|
|
// UserDefaultsSidebar holds sidebar-related settings
|
|
type UserDefaultsSidebar struct {
|
|
DisableQuickToggles bool `json:"disableQuickToggles"` // disable the quick toggles in the sidebar
|
|
HideFileActions bool `json:"hideFileActions"` // hide the file actions in the sidebar
|
|
DisableHideOnPreview bool `json:"disableHideOnPreview"` // keep sidebar open when previewing files (was preview.disableHideSidebar)
|
|
Sticky bool `json:"sticky"` // keep sidebar open when navigating
|
|
HideFiles bool `json:"hideFiles"` // hide files in the sidebar tree navigation, when true, will show only directories
|
|
ShowTools *bool `json:"showTools"` // show sidebar links with category "tool"; default is true
|
|
}
|
|
|
|
// UserDefaultsListing holds file listing display settings
|
|
type UserDefaultsListing struct {
|
|
DeleteWithoutConfirming bool `json:"deleteWithoutConfirming"` // delete files without confirmation
|
|
DateFormat bool `json:"dateFormat"` // when false, the date is relative, when true, the date is an exact timestamp
|
|
ShowHidden bool `json:"showHidden"` // show hidden files in the UI. On windows this includes files starting with a dot and windows hidden files
|
|
QuickDownload bool `json:"quickDownload"` // show icon to download in one click
|
|
ShowSelectMultiple bool `json:"showSelectMultiple"` // show select multiple files on desktop
|
|
SingleClick bool `json:"singleClick"` // open directory on single click, also enables middle click to open in new tab
|
|
HideFileExt string `json:"hideFileExt"` // space separated list of file extensions to hide in UI
|
|
ShowCopyPath bool `json:"showCopyPath"` // show copy path button in the context menu
|
|
DeleteAfterArchive bool `json:"deleteAfterArchive"` // delete source files after successful creation/extraction of archives
|
|
ViewMode string `json:"viewMode"` // view mode to use: eg. normal, list, grid, or compact
|
|
GallerySize int `json:"gallerySize"` // 0-9 - the size of the gallery thumbnails
|
|
}
|
|
|
|
// UserDefaultsPreview holds preview-related settings
|
|
type UserDefaultsPreview struct {
|
|
Image *bool `json:"image"` // show thumbnails for image files
|
|
Video *bool `json:"video"` // show thumbnails for video files
|
|
Audio *bool `json:"audio"` // show thumbnails for audio files
|
|
MotionVideoPreview *bool `json:"motionVideoPreview"` // show multiple frames for videos in thumbnail preview when hovering
|
|
Office *bool `json:"office"` // show thumbnails for office files
|
|
PopUp *bool `json:"popup"` // show larger popup preview when hovering over thumbnail
|
|
DisablePreviewExt string `json:"disablePreviewExt"` // comma separated list of file extensions to disable preview for
|
|
HighQuality *bool `json:"highQuality"` // high quality preview thumbnails
|
|
Folder *bool `json:"folder"` // show thumbnails for folders that have previewable contents
|
|
Models *bool `json:"models"` // show live thumbnails for 3D models files
|
|
// deprecated fields
|
|
DisableHideSidebar bool `json:"disableHideSidebar"` // deprecated: use sidebar.disableHideOnPreview instead. disable the hide sidebar preview for previews and editors
|
|
DefaultMediaPlayer bool `json:"defaultMediaPlayer"` // deprecated: use fileViewer.defaultMediaPlayer instead. disable the styled feature-rich media player for browser default
|
|
AutoplayMedia bool `json:"autoplayMedia"` // deprecated: use fileViewer.autoplayMedia instead. autoplay media files in preview
|
|
}
|
|
|
|
// UserDefaultsFileViewer holds file viewer/editor settings
|
|
type UserDefaultsFileViewer struct {
|
|
EditorQuickSave bool `json:"editorQuickSave"` // show quick save button in editor
|
|
AutoplayMedia *bool `json:"autoplayMedia"` // autoplay media files in preview
|
|
DisableViewingExt string `json:"disableViewingExt"` // comma separated list of file extensions to disable viewing for
|
|
DisableOnlyOfficeExt string `json:"disableOnlyOfficeExt"` // list of file extensions to disable onlyoffice editor for
|
|
PreferEditorForMarkdown bool `json:"preferEditorForMarkdown"` // prefer editor first for markdown files instead of the Markdown Viewer
|
|
DebugOffice bool `json:"debugOffice"` // debug onlyoffice editor
|
|
DefaultMediaPlayer bool `json:"defaultMediaPlayer"` // disable the styled feature-rich media player for browser default
|
|
}
|
|
|
|
// UserDefaultsSearch holds search-related settings
|
|
type UserDefaultsSearch struct {
|
|
DisableOptions bool `json:"disableOptions"` // disable the search options in the search bar
|
|
}
|
|
|
|
// UserDefaultsUI holds UI/appearance settings
|
|
type UserDefaultsUI struct {
|
|
DarkMode *bool `json:"darkMode"` // should dark mode be enabled
|
|
ThemeColor string `json:"themeColor"` // theme color to use: eg. #ff0000, or var(--red), var(--purple), etc
|
|
CustomTheme string `json:"customTheme"` // Name of theme to use chosen from custom themes config
|
|
Locale string `json:"locale"` // language to use: eg. de, en, or fr
|
|
|
|
}
|
|
|
|
// UserDefaultsAccount holds account/security settings
|
|
type UserDefaultsAccount struct {
|
|
Permissions UserDefaultsAccountPermissions `json:"permissions"`
|
|
LockPassword bool `json:"lockPassword"` // disable the user from changing their password
|
|
DisableSettings bool `json:"disableSettings"` // disable the user from viewing the settings page
|
|
LoginMethod string `json:"loginMethod,omitempty"` // login method to use: eg. password, proxy, oidc
|
|
DisableUpdateNotifications bool `json:"disableUpdateNotifications"` // disable update notifications banner for admin users
|
|
}
|
|
|
|
// UserDefaultsAccountPermissions holds permission settings
|
|
type UserDefaultsAccountPermissions struct {
|
|
Api bool `json:"api"` // allow api access
|
|
Admin bool `json:"admin"` // allow admin access
|
|
Modify bool `json:"modify"` // allow modifying files
|
|
Share bool `json:"share"` // allow sharing files
|
|
Realtime bool `json:"realtime"` // allow realtime updates
|
|
Delete bool `json:"delete"` // allow deleting files
|
|
Create bool `json:"create"` // allow creating or uploading files
|
|
Download *bool `json:"download"` // allow downloading files
|
|
}
|
|
|
|
// UserDefaults is a type that holds the default values for some fields on User.
|
|
type UserDefaults struct {
|
|
// New organized structure
|
|
Sidebar UserDefaultsSidebar `json:"sidebar,omitempty"`
|
|
Listing UserDefaultsListing `json:"listing,omitempty"`
|
|
Preview UserDefaultsPreview `json:"preview,omitempty"`
|
|
FileViewer UserDefaultsFileViewer `json:"fileViewer,omitempty"`
|
|
Search UserDefaultsSearch `json:"search,omitempty"`
|
|
UI UserDefaultsUI `json:"ui,omitempty"`
|
|
FileLoading users.FileLoading `json:"fileLoading,omitempty"`
|
|
Account UserDefaultsAccount `json:"account,omitempty"`
|
|
|
|
// Deprecated fields - kept for backwards compatibility
|
|
EditorQuickSave bool `json:"editorQuickSave,omitempty"` // deprecated: use fileViewer.editorQuickSave instead
|
|
HideSidebarFileActions bool `json:"hideSidebarFileActions,omitempty"` // deprecated: use sidebar.hideSidebarFileActions instead
|
|
DisableQuickToggles bool `json:"disableQuickToggles,omitempty"` // deprecated: use sidebar.disableQuickToggles instead
|
|
DisableSearchOptions bool `json:"disableSearchOptions,omitempty"` // deprecated: use search.disableOptions instead
|
|
StickySidebar bool `json:"stickySidebar,omitempty"` // deprecated: use sidebar.stickySidebar instead
|
|
HideFilesInTree bool `json:"hideFilesInTree,omitempty"` // deprecated: use sidebar.hideFilesInTree instead
|
|
DarkMode *bool `json:"darkMode,omitempty"` // deprecated: use sidebar.darkMode instead
|
|
Locale string `json:"locale,omitempty"` // deprecated: use ui.locale instead
|
|
ViewMode string `json:"viewMode,omitempty"` // deprecated: use sidebar.viewMode instead
|
|
SingleClick bool `json:"singleClick,omitempty"` // deprecated: use sidebar.singleClick instead
|
|
ShowHidden bool `json:"showHidden,omitempty"` // deprecated: use listing.showHidden instead
|
|
HideFileExt string `json:"hideFileExt,omitempty"` // deprecated: use listing.hideFileExt instead
|
|
DateFormat bool `json:"dateFormat,omitempty"` // deprecated: use listing.dateFormat instead
|
|
GallerySize int `json:"gallerySize,omitempty"` // deprecated: use sidebar.gallerySize instead
|
|
ThemeColor string `json:"themeColor,omitempty"` // deprecated: use ui.themeColor instead
|
|
QuickDownload bool `json:"quickDownload,omitempty"` // deprecated: use listing.quickDownload instead
|
|
DisablePreviewExt string `json:"disablePreviewExt,omitempty"` // deprecated: use preview.disablePreviewExt instead
|
|
DisableViewingExt string `json:"disableViewingExt,omitempty"` // deprecated: use fileViewer.disableViewingExt instead
|
|
LockPassword bool `json:"lockPassword,omitempty"` // deprecated: use account.lockPassword instead
|
|
DisableSettings bool `json:"disableSettings,omitempty"` // deprecated: use account.disableSettings instead
|
|
DefaultScopes []users.SourceScope `json:"-"`
|
|
Permissions UserDefaultsPermissions `json:"permissions,omitempty"` // deprecated: use account.permissions instead
|
|
LoginMethod string `json:"loginMethod,omitempty"` // deprecated: use account.loginMethod instead
|
|
DisableUpdateNotifications bool `json:"disableUpdateNotifications,omitempty"` // deprecated: use account.disableUpdateNotifications instead
|
|
DeleteWithoutConfirming bool `json:"deleteWithoutConfirming,omitempty"` // deprecated: use listing.deleteWithoutConfirming instead
|
|
DeleteAfterArchive bool `json:"deleteAfterArchive,omitempty"` // deprecated: use listing.deleteAfterArchive instead
|
|
DisableOfficePreviewExt string `json:"disableOfficePreviewExt,omitempty"` // deprecated: use disablePreviewExt instead
|
|
DisableOnlyOfficeExt string `json:"disableOnlyOfficeExt,omitempty"` // deprecated: use fileViewer.disableOnlyOfficeExt instead
|
|
CustomTheme string `json:"customTheme,omitempty"` // deprecated: use ui.customTheme instead
|
|
ShowSelectMultiple bool `json:"showSelectMultiple,omitempty"` // deprecated: use listing.showSelectMultiple instead
|
|
ShowToolsInSidebar *bool `json:"showToolsInSidebar,omitempty"` // deprecated: use sidebar.showToolsInSidebar instead
|
|
DebugOffice bool `json:"debugOffice,omitempty"` // deprecated: use fileViewer.debugOffice instead
|
|
PreferEditorForMarkdown bool `json:"preferEditorForMarkdown,omitempty"` // deprecated: use fileViewer.preferEditorForMarkdown instead
|
|
ShowCopyPath bool `json:"showCopyPath,omitempty"` // deprecated: use listing.showCopyPath instead
|
|
}
|