Files
filebrowser/cmd/rules.go
T

114 lines
2.3 KiB
Go
Raw Normal View History

2019-01-05 22:44:33 +00:00
package cmd
import (
"fmt"
2020-06-01 01:12:36 +02:00
"github.com/spf13/cobra"
"github.com/spf13/pflag"
2019-01-05 22:44:33 +00:00
"github.com/filebrowser/filebrowser/v2/rules"
"github.com/filebrowser/filebrowser/v2/settings"
"github.com/filebrowser/filebrowser/v2/storage"
"github.com/filebrowser/filebrowser/v2/users"
)
func init() {
rootCmd.AddCommand(rulesCmd)
rulesCmd.PersistentFlags().StringP("username", "u", "", "username of user to which the rules apply")
rulesCmd.PersistentFlags().UintP("id", "i", 0, "id of user to which the rules apply")
}
var rulesCmd = &cobra.Command{
2020-06-01 01:12:36 +02:00
Use: "rules",
Short: "Rules management utility",
2019-01-05 23:01:16 +00:00
Long: `On each subcommand you'll have available at least two flags:
2019-01-05 22:44:33 +00:00
"username" and "id". You must either set only one of them
or none. If you set one of them, the command will apply to
an user, otherwise it will be applied to the global set or
rules.`,
2019-01-05 23:01:16 +00:00
Args: cobra.NoArgs,
2019-01-05 22:44:33 +00:00
}
func runRules(st *storage.Storage, cmd *cobra.Command, usersFn func(*users.User) error, globalFn func(*settings.Settings) error) error {
id, err := getUserIdentifier(cmd.Flags())
if err != nil {
return err
}
2019-01-05 22:44:33 +00:00
if id != nil {
var user *users.User
user, err = st.Users.Get("", id)
if err != nil {
return err
}
2019-01-05 22:44:33 +00:00
2020-06-01 01:12:36 +02:00
if usersFn != nil {
err = usersFn(user)
if err != nil {
return err
}
2019-01-05 22:44:33 +00:00
}
printRules(user.Rules, id)
return nil
2019-01-05 22:44:33 +00:00
}
2019-01-08 19:40:14 +01:00
s, err := st.Settings.Get()
if err != nil {
return err
}
2019-01-05 22:44:33 +00:00
2020-06-01 01:12:36 +02:00
if globalFn != nil {
err = globalFn(s)
if err != nil {
return err
}
2019-01-05 22:44:33 +00:00
}
2019-01-08 19:40:14 +01:00
printRules(s.Rules, id)
return nil
2019-01-05 22:44:33 +00:00
}
func getUserIdentifier(flags *pflag.FlagSet) (interface{}, error) {
id, err := getUint(flags, "id")
if err != nil {
return nil, err
}
username, err := getString(flags, "username")
if err != nil {
return nil, err
}
2019-01-05 22:44:33 +00:00
if id != 0 {
return id, nil
2019-01-05 22:44:33 +00:00
} else if username != "" {
return username, nil
2019-01-05 22:44:33 +00:00
}
return nil, nil
2019-01-05 22:44:33 +00:00
}
2020-06-01 01:12:36 +02:00
func printRules(rulez []rules.Rule, id interface{}) {
2019-01-05 22:44:33 +00:00
if id == nil {
fmt.Printf("Global Rules:\n\n")
} else {
fmt.Printf("Rules for user %v:\n\n", id)
}
2020-06-01 01:12:36 +02:00
for id, rule := range rulez {
2019-01-05 22:44:33 +00:00
fmt.Printf("(%d) ", id)
if rule.Regex {
2019-01-06 13:21:31 +00:00
if rule.Allow {
fmt.Printf("Allow Regex: \t%s\n", rule.Regexp.Raw)
} else {
fmt.Printf("Disallow Regex: \t%s\n", rule.Regexp.Raw)
}
2019-01-05 22:44:33 +00:00
} else {
2019-01-06 13:21:31 +00:00
if rule.Allow {
fmt.Printf("Allow Path: \t%s\n", rule.Path)
} else {
fmt.Printf("Disallow Path: \t%s\n", rule.Path)
}
2019-01-05 22:44:33 +00:00
}
}
}