github.com/bketelsen/buffalo@v0.9.5/grifts.go (about) 1 package buffalo 2 3 import ( 4 "fmt" 5 "os" 6 "regexp" 7 "strings" 8 "text/tabwriter" 9 10 "github.com/markbates/going/randx" 11 "github.com/markbates/grift/grift" 12 "github.com/pkg/errors" 13 "golang.org/x/crypto/bcrypt" 14 ) 15 16 // Grifts decorates the app with tasks 17 func Grifts(app *App) { 18 routesGrift(app) 19 middlewareGrift(app) 20 secretGrift() 21 } 22 23 func secretGrift() { 24 grift.Desc("secret", "Generate a cryptographically secure secret key") 25 grift.Add("secret", func(c *grift.Context) error { 26 bb := []byte{} 27 for i := 0; i < 4; i++ { 28 b := []byte(randx.String(64)) 29 b, err := bcrypt.GenerateFromPassword(b, bcrypt.DefaultCost) 30 if err != nil { 31 return errors.WithStack(err) 32 } 33 bb = append(bb, b...) 34 } 35 rx := regexp.MustCompile(`(\W+)`) 36 bb = rx.ReplaceAll(bb, []byte("")) 37 s := randx.String(6) + string(bb) 38 fmt.Println(s[:127]) 39 return nil 40 }) 41 } 42 43 func middlewareGrift(a *App) { 44 grift.Desc("middleware", "Prints out your middleware stack") 45 grift.Add("middleware", func(c *grift.Context) error { 46 printMiddleware(a) 47 return nil 48 }) 49 } 50 51 func printMiddleware(a *App) { 52 fmt.Println(fmt.Sprintf("-> %s", a.Name)) 53 fmt.Println(a.Middleware.String()) 54 fmt.Println() 55 for _, x := range a.children { 56 printMiddleware(x) 57 } 58 } 59 60 func routesGrift(a *App) { 61 grift.Desc("routes", "Print out all defined routes") 62 grift.Add("routes", func(c *grift.Context) error { 63 routes := a.Routes() 64 w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', tabwriter.Debug) 65 fmt.Fprintln(w, "METHOD\t PATH\t ALIASES\t NAME\t HANDLER") 66 fmt.Fprintln(w, "------\t ----\t -------\t ----\t -------") 67 for _, r := range routes { 68 fmt.Fprintf(w, "%s\t %s\t %s\t %s\t %s\n", r.Method, r.Path, strings.Join(r.Aliases, " "), r.PathName, r.HandlerName) 69 } 70 w.Flush() 71 return nil 72 }) 73 }