package auth import ( "fmt" "forge.cadoles.com/cadoles/bouncer/internal/auth/jwt" "forge.cadoles.com/cadoles/bouncer/internal/command/common" "github.com/lithammer/shortuuid/v4" "github.com/pkg/errors" "github.com/urfave/cli/v2" ) func CreateTokenCommand() *cli.Command { return &cli.Command{ Name: "create-token", Usage: "Create a new authentication token", Flags: []cli.Flag{ &cli.StringFlag{ Name: "role", Usage: fmt.Sprintf("associate `ROLE` to the token (available: %v)", []jwt.Role{jwt.RoleReader, jwt.RoleWriter}), Value: string(jwt.RoleReader), }, &cli.StringFlag{ Name: "subject", Usage: "associate `SUBJECT` to the token", Value: fmt.Sprintf("user-%s", shortuuid.New()), }, }, Action: func(ctx *cli.Context) error { conf, err := common.LoadConfig(ctx) if err != nil { return errors.Wrap(err, "could not load configuration") } subject := ctx.String("subject") role := ctx.String("role") token, _, err := jwt.GenerateTokenWithPrivateKey(ctx.Context, string(conf.Admin.Auth.PrivateKey), string(conf.Admin.Auth.Issuer), subject, jwt.Role(role)) if err != nil { return errors.Wrap(err, "could not generate token") } fmt.Println(token) return nil }, } }