From 9d8049cf45e677d3177e3c2d50eddce9b8b47f56 Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Mon, 13 May 2019 18:49:14 +0200 Subject: [PATCH] Rename cli command "external-auth" to "auth", move jwt subcmd --- system/cli/auth.go | 87 +++++++++++++++++++++++++++++++++++++ system/cli/cli.go | 2 +- system/cli/external-auth.go | 41 ----------------- system/cli/users.go | 44 ------------------- 4 files changed, 88 insertions(+), 86 deletions(-) create mode 100644 system/cli/auth.go delete mode 100644 system/cli/external-auth.go diff --git a/system/cli/auth.go b/system/cli/auth.go new file mode 100644 index 000000000..1f312cd1f --- /dev/null +++ b/system/cli/auth.go @@ -0,0 +1,87 @@ +package cli + +import ( + "context" + "regexp" + "strconv" + + "github.com/spf13/cobra" + "github.com/titpetric/factory" + + "github.com/crusttech/crust/internal/auth" + "github.com/crusttech/crust/internal/settings" + "github.com/crusttech/crust/system/internal/auth/external" + "github.com/crusttech/crust/system/internal/repository" + "github.com/crusttech/crust/system/types" +) + +// Will perform OpenID connect auto-configuration +func authCmd(ctx context.Context, db *factory.DB, settingsService settings.Service) *cobra.Command { + cmd := &cobra.Command{ + Use: "auth", + Short: "External authentication", + } + + autoDiscoverCmd := &cobra.Command{ + Use: "auto-discovery [name] [url]", + Short: "Auto discovers new OIDC client", + Args: cobra.ExactArgs(2), + Run: func(cmd *cobra.Command, args []string) { + var name, url = args[0], args[1] + + if eas, err := external.ExternalAuthSettings(settingsService); err != nil { + exit(cmd, err) + } else if eap, err := external.RegisterNewOpenIdClient(ctx, eas, name, url); err != nil { + exit(cmd, err) + } else if vv, err := eap.MakeValueSet("openid-connect." + name); err != nil { + exit(cmd, err) + } else if err := settingsService.BulkSet(vv); err != nil { + exit(cmd, err) + } + }, + } + + jwtCmd := &cobra.Command{ + Use: "jwt [email-or-id]", + Short: "Generates new JWT for a user", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + var ( + userRepo = repository.User(ctx, db) + roleRepo = repository.Role(ctx, db) + // authSvc = service.Auth(ctx) + + user *types.User + err error + ID uint64 + rr types.RoleSet + + userStr = args[0] + ) + + if user, err = userRepo.FindByEmail(userStr); repository.ErrUserNotFound.Eq(err) { + if regexp.MustCompile(`/^\d+$/`).MatchString(userStr) { + if ID, err = strconv.ParseUint(userStr, 10, 64); err == nil { + user, err = userRepo.FindByID(ID) + } + } + } + + if err == nil { + rr, err = roleRepo.FindByMemberID(user.ID) + } + + if err != nil { + exit(cmd, err) + } + + user.SetRoles(rr.IDs()) + + cmd.Println(auth.DefaultJwtHandler.Encode(user)) + }, + } + + cmd.AddCommand(autoDiscoverCmd, jwtCmd) + + return cmd +} diff --git a/system/cli/cli.go b/system/cli/cli.go index ced1e8f2d..7c6490815 100644 --- a/system/cli/cli.go +++ b/system/cli/cli.go @@ -21,7 +21,7 @@ func StartCLI(ctx context.Context) { cmd.AddCommand( settingsCmd(ctx, settingsService), - externalAuthCmd(ctx, settingsService), + authCmd(ctx, db, settingsService), usersCmd(ctx, db), rolesCmd(ctx, db), ) diff --git a/system/cli/external-auth.go b/system/cli/external-auth.go deleted file mode 100644 index 8014a20e9..000000000 --- a/system/cli/external-auth.go +++ /dev/null @@ -1,41 +0,0 @@ -package cli - -import ( - "context" - - "github.com/spf13/cobra" - - "github.com/crusttech/crust/internal/settings" - "github.com/crusttech/crust/system/internal/auth/external" -) - -// Will perform OpenID connect auto-configuration -func externalAuthCmd(ctx context.Context, settingsService settings.Service) *cobra.Command { - cmd := &cobra.Command{ - Use: "external-auth", - Short: "External authentication", - } - - autoDiscoverCmd := &cobra.Command{ - Use: "auto-discovery [name] [url]", - Short: "Auto discovers new OIDC client", - Args: cobra.ExactArgs(2), - Run: func(cmd *cobra.Command, args []string) { - var name, url = args[0], args[1] - - if eas, err := external.ExternalAuthSettings(settingsService); err != nil { - exit(cmd, err) - } else if eap, err := external.RegisterNewOpenIdClient(ctx, eas, name, url); err != nil { - exit(cmd, err) - } else if vv, err := eap.MakeValueSet("openid-connect." + name); err != nil { - exit(cmd, err) - } else if err := settingsService.BulkSet(vv); err != nil { - exit(cmd, err) - } - }, - } - - cmd.AddCommand(autoDiscoverCmd) - - return cmd -} diff --git a/system/cli/users.go b/system/cli/users.go index 7a33dbf87..3609dd6eb 100644 --- a/system/cli/users.go +++ b/system/cli/users.go @@ -3,15 +3,12 @@ package cli import ( "context" "fmt" - "regexp" - "strconv" "syscall" "github.com/spf13/cobra" "github.com/titpetric/factory" "golang.org/x/crypto/ssh/terminal" - "github.com/crusttech/crust/internal/auth" "github.com/crusttech/crust/system/internal/repository" "github.com/crusttech/crust/system/internal/service" "github.com/crusttech/crust/system/types" @@ -130,51 +127,10 @@ func usersCmd(ctx context.Context, db *factory.DB) *cobra.Command { }, } - jwtCmd := &cobra.Command{ - Use: "jwt [email-or-id]", - Short: "Generates new JWT for a user", - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - var ( - userRepo = repository.User(ctx, db) - roleRepo = repository.Role(ctx, db) - // authSvc = service.Auth(ctx) - - user *types.User - err error - ID uint64 - rr types.RoleSet - - userStr = args[0] - ) - - if user, err = userRepo.FindByEmail(userStr); repository.ErrUserNotFound.Eq(err) { - if regexp.MustCompile(`/^\d+$/`).MatchString(userStr) { - if ID, err = strconv.ParseUint(userStr, 10, 64); err == nil { - user, err = userRepo.FindByID(ID) - } - } - } - - if err == nil { - rr, err = roleRepo.FindByMemberID(user.ID) - } - - if err != nil { - exit(cmd, err) - } - - user.SetRoles(rr.IDs()) - - cmd.Println(auth.DefaultJwtHandler.Encode(user)) - }, - } - cmd.AddCommand( listCmd, addCmd, pwdCmd, - jwtCmd, ) return cmd