2023-04-24 20:52:12 +02:00
|
|
|
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 {
|
2024-03-27 17:47:39 +01:00
|
|
|
return errors.Wrap(err, "could not load configuration")
|
2023-04-24 20:52:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
subject := ctx.String("subject")
|
|
|
|
role := ctx.String("role")
|
|
|
|
|
2024-03-27 17:47:39 +01:00
|
|
|
token, _, err := jwt.GenerateTokenWithPrivateKey(ctx.Context, string(conf.Admin.Auth.PrivateKey), string(conf.Admin.Auth.Issuer), subject, jwt.Role(role))
|
2023-04-24 20:52:12 +02:00
|
|
|
if err != nil {
|
2024-03-27 17:47:39 +01:00
|
|
|
return errors.Wrap(err, "could not generate token")
|
2023-04-24 20:52:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Println(token)
|
|
|
|
|
|
|
|
return nil
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|