github.com/fedir/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  }