Skip to content

Commit

Permalink
Merge pull request filebrowser#618 from filebrowser/chores-version
Browse files Browse the repository at this point in the history
Former-commit-id: e4a254c445bb6f9e6012800101812847f2f7a165 [formerly 39f8661c8cb8a37dd379bc87685fa266e2c98cc9] [formerly ad43c963e3adce98b64edb3324f9c4912b4a5623 [formerly 58edf87]]
Former-commit-id: 66301024e8d6c34070382fb0b9db8e25a1055da1 [formerly cb29ecd9eec4ae6ae0cb422457ee1d794a51df20]
Former-commit-id: d4eff084d7aad39e384ec9cc0cd3227250a195d3
  • Loading branch information
hacdias authored Jan 8, 2019
2 parents 6ab8779 + 438371f commit 2e15535
Show file tree
Hide file tree
Showing 11 changed files with 74 additions and 70 deletions.
9 changes: 5 additions & 4 deletions cmd/cmds.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@ func init() {
}

var cmdsCmd = &cobra.Command{
Use: "cmds",
Short: "Command runner management utility",
Long: `Command runner management utility.`,
Args: cobra.NoArgs,
Use: "cmds",
Version: rootCmd.Version,
Short: "Command runner management utility",
Long: `Command runner management utility.`,
Args: cobra.NoArgs,
}

func printEvents(m map[string][]string) {
Expand Down
9 changes: 5 additions & 4 deletions cmd/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@ func init() {
}

var configCmd = &cobra.Command{
Use: "config",
Short: "Configuration management utility",
Long: `Configuration management utility.`,
Args: cobra.NoArgs,
Use: "config",
Version: rootCmd.Version,
Short: "Configuration management utility",
Long: `Configuration management utility.`,
Args: cobra.NoArgs,
}

func addConfigFlags(flags *pflag.FlagSet) {
Expand Down
9 changes: 5 additions & 4 deletions cmd/hash.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@ func init() {
}

var hashCmd = &cobra.Command{
Use: "hash <password>",
Short: "Hashes a password",
Long: `Hashes a password using bcrypt algorithm.`,
Args: cobra.ExactArgs(1),
Use: "hash <password>",
Version: rootCmd.Version,
Short: "Hashes a password",
Long: `Hashes a password using bcrypt algorithm.`,
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
pwd, err := users.HashPwd(args[0])
checkErr(err)
Expand Down
13 changes: 9 additions & 4 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ import (
"github.com/filebrowser/filebrowser/v2/settings"
"github.com/filebrowser/filebrowser/v2/storage"
"github.com/filebrowser/filebrowser/v2/users"
"github.com/mitchellh/go-homedir"
"github.com/filebrowser/filebrowser/v2/version"
homedir "github.com/mitchellh/go-homedir"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
v "github.com/spf13/viper"
Expand All @@ -29,6 +30,9 @@ var (

func init() {
cobra.OnInitialize(initConfig)

rootCmd.SetVersionTemplate("File Browser version {{printf \"%s\" .Version}}\n")

flags := rootCmd.Flags()
persistent := rootCmd.PersistentFlags()

Expand Down Expand Up @@ -87,12 +91,13 @@ func mustGetStringViperFlag(flags *pflag.FlagSet, key string) string {
}

var rootCmd = &cobra.Command{
Use: "filebrowser",
Short: "A stylish web-based file browser",
Use: "filebrowser",
Short: "A stylish web-based file browser",
Version: version.Version,
Long: `File Browser CLI lets you create the database to use with File Browser,
manage your users and all the configurations without acessing the
web interface.
If you've never run File Browser, you'll need to have a database for
it. Don't worry: you don't need to setup a separate database server.
We're using Bolt DB which is a single file database and all managed
Expand Down
5 changes: 3 additions & 2 deletions cmd/rules.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ func init() {
}

var rulesCmd = &cobra.Command{
Use: "rules",
Short: "Rules management utility",
Use: "rules",
Version: rootCmd.Version,
Short: "Rules management utility",
Long: `On each subcommand you'll have available at least two flags:
"username" and "id". You must either set only one of them
or none. If you set one of them, the command will apply to
Expand Down
5 changes: 3 additions & 2 deletions cmd/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ func init() {
}

var upgradeCmd = &cobra.Command{
Use: "upgrade",
Short: "Upgrades an old configuration",
Use: "upgrade",
Version: rootCmd.Version,
Short: "Upgrades an old configuration",
Long: `Upgrades an old configuration. This command DOES NOT
import share links because they are incompatible with
this version.`,
Expand Down
9 changes: 5 additions & 4 deletions cmd/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@ func init() {
}

var usersCmd = &cobra.Command{
Use: "users",
Short: "Users management utility",
Long: `Users management utility.`,
Args: cobra.NoArgs,
Use: "users",
Version: rootCmd.Version,
Short: "Users management utility",
Long: `Users management utility.`,
Args: cobra.NoArgs,
}

func printUsers(users []*users.User) {
Expand Down
3 changes: 1 addition & 2 deletions cmd/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ import (

func checkErr(err error) {
if err != nil {
fmt.Println(err)
os.Exit(1)
log.Fatal(err)
}
}

Expand Down
20 changes: 16 additions & 4 deletions cmd/version.go
Original file line number Diff line number Diff line change
@@ -1,20 +1,32 @@
package cmd

import (
"fmt"
"text/template"

"github.com/filebrowser/filebrowser/v2/version"
"github.com/spf13/cobra"
)

func init() {
rootCmd.AddCommand(versionCmd)
cmdsCmd.AddCommand(versionCmd)
configCmd.AddCommand(versionCmd)
hashCmd.AddCommand(versionCmd)
upgradeCmd.AddCommand(versionCmd)
rulesCmd.AddCommand(versionCmd)
usersCmd.AddCommand(versionCmd)
}

var versionCmd = &cobra.Command{
Use: "version",
Short: "Print the version number",
Short: "Print the version number of File Browser",
Long: `All software has versions. This is File Browser's`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("File Browser Version " + version.Version)
// https://github.com/spf13/cobra/issues/724
t := template.New("version")
template.Must(t.Parse(rootCmd.VersionTemplate()))
err := t.Execute(rootCmd.OutOrStdout(), rootCmd)
if err != nil {
rootCmd.Println(err)
}
},
}
37 changes: 17 additions & 20 deletions storage/bolt/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,32 +12,29 @@ type usersBackend struct {
db *storm.DB
}

func (st usersBackend) GetByID(id uint) (*users.User, error) {
user := &users.User{}
err := st.db.One("ID", id, user)
if err == storm.ErrNotFound {
return nil, errors.ErrNotExist
}

if err != nil {
return nil, err
func (st usersBackend) GetBy(i interface{}) (user *users.User, err error) {
user = &users.User{}

var arg string
switch i.(type) {
case uint:
arg = "ID"
case string:
arg = "Username"
default:
return nil, errors.ErrInvalidDataType
}

return user, nil
}

func (st usersBackend) GetByUsername(username string) (*users.User, error) {
user := &users.User{}
err := st.db.One("Username", username, user)
if err == storm.ErrNotFound {
return nil, errors.ErrNotExist
}
err = st.db.One(arg, i, user)

if err != nil {
if err == storm.ErrNotFound {
return nil, errors.ErrNotExist
}
return nil, err
}

return user, nil
return
}

func (st usersBackend) Gets() ([]*users.User, error) {
Expand Down Expand Up @@ -82,7 +79,7 @@ func (st usersBackend) DeleteByID(id uint) error {
}

func (st usersBackend) DeleteByUsername(username string) error {
user, err := st.GetByUsername(username)
user, err := st.GetBy(username)
if err != nil {
return err
}
Expand Down
25 changes: 5 additions & 20 deletions users/storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ import (

// StorageBackend is the interface to implement for a users storage.
type StorageBackend interface {
GetByID(uint) (*User, error)
GetByUsername(string) (*User, error)
GetBy(interface{}) (*User, error)
Gets() ([]*User, error)
Save(u *User) error
Update(u *User, fields ...string) error
Expand All @@ -36,27 +35,13 @@ func NewStorage(back StorageBackend) *Storage {
// Get allows you to get a user by its name or username. The provided
// id must be a string for username lookup or a uint for id lookup. If id
// is neither, a ErrInvalidDataType will be returned.
func (s *Storage) Get(baseScope string, id interface{}) (*User, error) {
var (
user *User
err error
)

switch id.(type) {
case string:
user, err = s.back.GetByUsername(id.(string))
case uint:
user, err = s.back.GetByID(id.(uint))
default:
return nil, errors.ErrInvalidDataType
}

func (s *Storage) Get(baseScope string, id interface{}) (user *User, err error) {
user, err = s.back.GetBy(id)
if err != nil {
return nil, err
return
}

user.Clean(baseScope)
return user, err
return
}

// Gets gets a list of all users.
Expand Down

0 comments on commit 2e15535

Please sign in to comment.