diff --git a/cmd/lk/cloud.go b/cmd/lk/cloud.go index 894059e4..32091d88 100644 --- a/cmd/lk/cloud.go +++ b/cmd/lk/cloud.go @@ -70,6 +70,11 @@ var ( Before: initAuth, Action: handleAuth, Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "id", + Usage: "Project `ID` to authenticate. If not provided, you can choose from your existing projects in the browser", + Required: false, + }, &cli.BoolFlag{ Name: "revoke", Aliases: []string{"R"}, @@ -271,6 +276,7 @@ func tryAuthIfNeeded(ctx context.Context, cmd *cli.Command) error { // get devicename if err := huh.NewInput(). Title("What is the name of this device?"). + Description("A short name you can use to find and manage generated API keys on the LiveKit Cloud dashboard"). Value(&cliConfig.DeviceName). WithTheme(util.Theme). Run(); err != nil { @@ -290,7 +296,11 @@ func tryAuthIfNeeded(ctx context.Context, cmd *cli.Command) error { return err } - authURL, err := generateConfirmURL(token.Token) + projectId := cmd.String("id") + if projectId == "" && cmd.Args().Present() { + projectId = cmd.Args().First() + } + authURL, err := generateConfirmURL(token.Token, projectId) if err != nil { return err } @@ -352,6 +362,7 @@ func tryAuthIfNeeded(ctx context.Context, cmd *cli.Command) error { // persist to config file cliConfig.Projects = append(cliConfig.Projects, config.ProjectConfig{ Name: name, + ProjectId: ak.ProjectId, APIKey: ak.Key, APISecret: ak.Secret, URL: ak.URL, @@ -367,7 +378,7 @@ func tryAuthIfNeeded(ctx context.Context, cmd *cli.Command) error { return err } -func generateConfirmURL(token string) (*url.URL, error) { +func generateConfirmURL(token, projectId string) (*url.URL, error) { base, err := url.Parse(dashboardURL + confirmAuthEndpoint) if err != nil { return nil, err @@ -375,6 +386,9 @@ func generateConfirmURL(token string) (*url.URL, error) { params := url.Values{} params.Add("t", token) + if projectId != "" { + params.Add("project_id", projectId) + } base.RawQuery = params.Encode() return base, nil } diff --git a/cmd/lk/project.go b/cmd/lk/project.go index 45d76b2a..fd3df48d 100644 --- a/cmd/lk/project.go +++ b/cmd/lk/project.go @@ -262,7 +262,7 @@ func listProjects(ctx context.Context, cmd *cli.Command) error { return baseStyle } }). - Headers("Name", "URL", "API Key") + Headers("Name", "ID", "URL", "API Key") for _, p := range cliConfig.Projects { var pName string if p.Name == cliConfig.DefaultProject { @@ -270,7 +270,11 @@ func listProjects(ctx context.Context, cmd *cli.Command) error { } else { pName = " " + p.Name } - table.Row(pName, p.URL, p.APIKey) + pID := p.ProjectId + if pID == "" { + pID = "-" + } + table.Row(pName, pID, p.URL, p.APIKey) } fmt.Println(table) } diff --git a/pkg/config/config.go b/pkg/config/config.go index 0a55ea9f..7976f14e 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -35,6 +35,7 @@ type CLIConfig struct { type ProjectConfig struct { Name string `yaml:"name"` + ProjectId string `yaml:"id"` URL string `yaml:"url"` APIKey string `yaml:"api_key"` APISecret string `yaml:"api_secret"`