Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rename get-token and try-login commands to test login and test token #100

Merged
merged 5 commits into from
Feb 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 0 additions & 91 deletions internal/cli/get_token.go

This file was deleted.

5 changes: 2 additions & 3 deletions internal/cli/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func Execute() {
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
// If the user is trying to login, no need to go
// through setup.
if cmd.Use == "login" {
if cmd.Use == "login" && cmd.Parent().Use == "auth0" {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh good catch! 👍

return nil
}

Expand Down Expand Up @@ -62,10 +62,9 @@ func Execute() {
rootCmd.AddCommand(quickstartCmd(cli))
rootCmd.AddCommand(clientsCmd(cli))
rootCmd.AddCommand(apisCmd(cli))
rootCmd.AddCommand(tryLoginCmd(cli))
rootCmd.AddCommand(testCmd(cli))
rootCmd.AddCommand(logsCmd(cli))
rootCmd.AddCommand(actionsCmd(cli))
rootCmd.AddCommand(getTokenCmd(cli))

// keep completion at the bottom:
rootCmd.AddCommand(completionCmd(cli))
Expand Down
179 changes: 179 additions & 0 deletions internal/cli/test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
package cli

import (
"fmt"

"github.com/auth0/auth0-cli/internal/ansi"
"github.com/auth0/auth0-cli/internal/auth/authutil"
"github.com/spf13/cobra"
)

func testCmd(cli *cli) *cobra.Command {
cmd := &cobra.Command{
Use: "test",
Short: "Try your universal login box or get a token",
}

cmd.SetUsageTemplate(resourceUsageTemplate())
cmd.AddCommand(testTokenCmd(cli))
cmd.AddCommand(testLoginCmd(cli))

return cmd
}

func testLoginCmd(cli *cli) *cobra.Command {
var clientID string
var connectionName string

cmd := &cobra.Command{
Use: "login",
Short: "Try out your universal login box",
Long: `auth0 test login
Launch a browser to try out your universal login box for the given client.
`,
RunE: func(cmd *cobra.Command, args []string) error {
var userInfo *authutil.UserInfo

tenant, err := cli.getTenant()
if err != nil {
return err
}

// use the client ID as passed in by the user, or default to the
// "CLI Login Testing" client if none passed. This client is only
// used for testing login from the CLI and will be created if it
// does not exist.
if clientID == "" {
client, err := getOrCreateCLITesterClient(cli.api.Client)
if err != nil {
return err
}
clientID = client.GetClientID()
}

client, err := cli.api.Client.Read(clientID)
if err != nil {
return err
}

if proceed := runLoginFlowPreflightChecks(cli, client); !proceed {
return nil
}

tokenResponse, err := runLoginFlow(
cli,
tenant,
client,
connectionName,
"", // audience is only supported for the test token command
"login", // force a login page when using the test login command
cliLoginTestingScopes,
)
if err != nil {
return err
}

if err := ansi.Spinner("Fetching user metadata", func() error {
// Use the access token to fetch user information from the /userinfo
// endpoint.
userInfo, err = authutil.FetchUserInfo(tenant.Domain, tokenResponse.AccessToken)
return err
}); err != nil {
return err
}

fmt.Fprint(cli.renderer.MessageWriter, "\n")
cli.renderer.TryLogin(userInfo, tokenResponse)
return nil
},
}

cmd.SetUsageTemplate(resourceUsageTemplate())
cmd.Flags().StringVarP(&clientID, "client-id", "c", "", "Client Id for which to test login.")
cmd.Flags().StringVarP(&connectionName, "connection", "", "", "Connection to test during login.")
return cmd
}

func testTokenCmd(cli *cli) *cobra.Command {
var clientID string
var audience string
var scopes []string

cmd := &cobra.Command{
Use: "token",
Short: "Fetch a token for the given client and API",
Long: `auth0 test token
Fetch an access token for the given client and API.
`,
RunE: func(cmd *cobra.Command, args []string) error {
tenant, err := cli.getTenant()
if err != nil {
return err
}

// use the client ID as passed in by the user, or default to the
// "CLI Login Testing" client if none passed. This client is only
// used for testing login from the CLI and will be created if it
// does not exist.
if clientID == "" {
client, err := getOrCreateCLITesterClient(cli.api.Client)
if err != nil {
return err
}
clientID = client.GetClientID()
}

client, err := cli.api.Client.Read(clientID)
if err != nil {
return err
}

appType := client.GetAppType()

cli.renderer.Infof("Domain: " + tenant.Domain)
cli.renderer.Infof("ClientID: " + clientID)
cli.renderer.Infof("Type: " + appType + "\n")

// We can check here if the client is an m2m client, and if so
// initiate the client credentials flow instead to fetch a token,
// avoiding the browser and HTTP server shenanigans altogether.
if appType == "non_interactive" {
tokenResponse, err := runClientCredentialsFlow(cli, client, clientID, audience, tenant)
if err != nil {
return err
}

fmt.Fprint(cli.renderer.MessageWriter, "\n")
cli.renderer.GetToken(client, tokenResponse)
return nil
}

if proceed := runLoginFlowPreflightChecks(cli, client); !proceed {
return nil
}

tokenResponse, err := runLoginFlow(
cli,
tenant,
client,
"", // specifying a connection is only supported for the test login command
audience,
"", // We don't want to force a prompt for the test token command
scopes,
)
if err != nil {
return err
}

fmt.Fprint(cli.renderer.MessageWriter, "\n")
cli.renderer.GetToken(client, tokenResponse)
return nil
},
}

cmd.SetUsageTemplate(resourceUsageTemplate())
cmd.Flags().StringVarP(&clientID, "client-id", "c", "", "Client ID for which to fetch a token.")
cmd.Flags().StringVarP(&audience, "audience", "a", "", "The unique identifier of the target API you want to access.")
cmd.Flags().StringSliceVarP(&scopes, "scope", "s", []string{}, "Client ID for which to test login.")
return cmd
}
82 changes: 0 additions & 82 deletions internal/cli/try_login.go

This file was deleted.