github.com/bscott/buffalo@v0.11.1/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.Printf("-> %s\n", a.Name) 53 fmt.Printf("%v\n", a.Middleware.String()) 54 for _, x := range a.children { 55 printMiddleware(x) 56 } 57 } 58 59 func routesGrift(a *App) { 60 grift.Desc("routes", "Print out all defined routes") 61 grift.Add("routes", func(c *grift.Context) error { 62 routes := a.Routes() 63 w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', tabwriter.Debug) 64 fmt.Fprintln(w, "METHOD\t PATH\t ALIASES\t NAME\t HANDLER") 65 fmt.Fprintln(w, "------\t ----\t -------\t ----\t -------") 66 for _, r := range routes { 67 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) 68 } 69 w.Flush() 70 return nil 71 }) 72 }