mirror of
https://github.com/m1k1o/neko.git
synced 2026-11-03 00:11:48 -06:00
d6a4200b36
* feat(filetransfer): allow file deletion and add user delete config option * fix(client): make user_delete required boolean in payload * lint. * feat(filetransfer): add confirmation dialog for file deletion. * feat(filetransfer): add delete file confirmation messages in multiple languages * lint. --------- Co-authored-by: Miroslav Šedivý <sedivy.miro@gmail.com>
85 lines
2.9 KiB
Go
85 lines
2.9 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
|
|
UserDelete 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
|
|
}
|
|
|
|
cmd.PersistentFlags().Bool("filetransfer.user_delete", false, "allow non-admin users to delete files")
|
|
if err := viper.BindPFlag("filetransfer.user_delete", cmd.PersistentFlags().Lookup("filetransfer.user_delete")); 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")
|
|
s.UserDelete = viper.GetBool("filetransfer.user_delete")
|
|
|
|
// 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)
|
|
}
|
|
}
|