Files
neko/server/internal/plugins/filetransfer/config.go
T
Abdellatif Anaflous 613647c72c fix(filetransfer): allow non-admin file uploads and downloads (#679)
* fix(filetransfer): remove auth.AdminsOnly middleware wrapper from routes

* fix(filetransfer): add config option to allow non-admin users to download and upload files.

* fix(filetransfer): implement user permissions for file download and upload in client.

---------

Co-authored-by: Miroslav Šedivý <sedivy.miro@gmail.com>
2026-08-05 22:33:17 +02:00

78 lines
2.6 KiB
Go

package filetransfer
import (
"path/filepath"
"time"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
type Config struct {
Enabled bool
RootDir string
RefreshInterval time.Duration
UserDownload bool
UserUpload bool
}
func (Config) Init(cmd *cobra.Command) error {
cmd.PersistentFlags().Bool("filetransfer.enabled", false, "whether file transfer is enabled")
if err := viper.BindPFlag("filetransfer.enabled", cmd.PersistentFlags().Lookup("filetransfer.enabled")); err != nil {
return err
}
cmd.PersistentFlags().String("filetransfer.dir", "/home/neko/Downloads", "root directory for file transfer")
if err := viper.BindPFlag("filetransfer.dir", cmd.PersistentFlags().Lookup("filetransfer.dir")); err != nil {
return err
}
cmd.PersistentFlags().Duration("filetransfer.refresh_interval", 30*time.Second, "interval to refresh file list")
if err := viper.BindPFlag("filetransfer.refresh_interval", cmd.PersistentFlags().Lookup("filetransfer.refresh_interval")); err != nil {
return err
}
cmd.PersistentFlags().Bool("filetransfer.user_download", false, "allow non-admin users to download files")
if err := viper.BindPFlag("filetransfer.user_download", cmd.PersistentFlags().Lookup("filetransfer.user_download")); err != nil {
return err
}
cmd.PersistentFlags().Bool("filetransfer.user_upload", false, "allow non-admin users to upload files")
if err := viper.BindPFlag("filetransfer.user_upload", cmd.PersistentFlags().Lookup("filetransfer.user_upload")); err != nil {
return err
}
// v2 config
cmd.PersistentFlags().Bool("file_transfer_enabled", false, "enable file transfer feature")
if err := viper.BindPFlag("file_transfer_enabled", cmd.PersistentFlags().Lookup("file_transfer_enabled")); err != nil {
return err
}
cmd.PersistentFlags().String("file_transfer_path", "", "path to use for file transfer")
if err := viper.BindPFlag("file_transfer_path", cmd.PersistentFlags().Lookup("file_transfer_path")); err != nil {
return err
}
return nil
}
func (s *Config) Set() {
s.Enabled = viper.GetBool("filetransfer.enabled")
rootDir := viper.GetString("filetransfer.dir")
s.RootDir = filepath.Clean(rootDir)
s.RefreshInterval = viper.GetDuration("filetransfer.refresh_interval")
s.UserDownload = viper.GetBool("filetransfer.user_download")
s.UserUpload = viper.GetBool("filetransfer.user_upload")
// v2 config
if viper.IsSet("file_transfer_enabled") {
s.Enabled = viper.GetBool("file_transfer_enabled")
}
if viper.IsSet("file_transfer_path") {
rootDir = viper.GetString("file_transfer_path")
s.RootDir = filepath.Clean(rootDir)
}
}