Skip to content

Commit

Permalink
feat: add bcrypt command
Browse files Browse the repository at this point in the history
  • Loading branch information
hacdias committed Dec 22, 2024
1 parent dce6010 commit eaf42b0
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,8 @@ users:
- username: admin
password: admin
# Example 'john' user with bcrypt encrypted password, with custom directory.
# You can generate a bcrypt-encrypted password by using the 'webdav bcrypt'
# command lint utility.
- username: john
password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
directory: /another/path
Expand Down
49 changes: 49 additions & 0 deletions cmd/bcrypt.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package cmd

import (
"errors"
"fmt"

"github.com/spf13/cobra"
"golang.org/x/crypto/bcrypt"
)

func init() {
flags := bcryptCmd.Flags()
flags.IntP("cost", "c", bcrypt.DefaultCost, "cost used to generate password, higher cost leads to slower verification times")

rootCmd.AddCommand(bcryptCmd)
}

var bcryptCmd = &cobra.Command{
Use: "bcrypt",
Short: "Generate a bcrypt encrypted password",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
cost, err := cmd.Flags().GetInt("cost")
if err != nil {
return err
}

if cost < bcrypt.MinCost {
return fmt.Errorf("given cost cannot be under minimum cost of %d", bcrypt.MinCost)
}

if cost > bcrypt.MaxCost {
return fmt.Errorf("given cost cannot be over maximum cost of %d", bcrypt.MaxCost)
}

pwd := args[0]
if pwd == "" {
return errors.New("password argument must not be empty")
}

hash, err := bcrypt.GenerateFromPassword([]byte(pwd), cost)
if err != nil {
return err
}

fmt.Println(string(hash))
return nil
},
}

0 comments on commit eaf42b0

Please sign in to comment.