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

fix: login/logout using the configured domain #4050

Merged
merged 5 commits into from
Apr 11, 2023
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
41 changes: 20 additions & 21 deletions core/src/commands/login.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@ import { ConfigurationError, InternalError, TimeoutError } from "../exceptions"
import { AuthRedirectServer } from "../cloud/auth"
import { EventBus } from "../events"
import { getCloudDistributionName } from "../util/util"
import { ProjectResource } from "../config/project"
import { findProjectConfig } from "../config/base"

const loginTimeoutSec = 60

export class LoginCommand extends Command {
name = "login"
help = "Log in to Garden Cloud."
hidden = true

/**
* Since we're logging in, we don't want to resolve e.g. the project config (since it may use secrets, which are
Expand All @@ -37,27 +38,25 @@ export class LoginCommand extends Command {
printHeader(headerLog, "Login", "☁️")
}

async action({ cli, garden, log }: CommandParams): Promise<CommandResult> {
// The Enterprise API is missing from the Garden class for commands with noProject
// so we initialize it here.
const globalConfigStore = garden.globalConfigStore

let configuredDomain = garden.cloudDomain

if (!configuredDomain) {
const projectConfig = await cli?.getProjectConfig(log, garden.projectRoot)

// Fail if this is not run within a garden project
if (!projectConfig) {
throw new ConfigurationError(
`Not a project directory (or any of the parent directories): ${garden.projectRoot}`,
{
root: garden.projectRoot,
}
)
}
async action({ garden, log }: CommandParams): Promise<CommandResult> {
// NOTE: The Cloud API is missing from the Garden class for commands with noProject
// so we initialize it here. noProject also make sure that the project config is not
// initialized in the garden class, so we need to read it in here to get the cloud
// domain.
const projectConfig: ProjectResource | undefined = await findProjectConfig(log, garden.projectRoot)

// Fail if this is not run within a garden project
if (!projectConfig) {
throw new ConfigurationError(
`Not a project directory (or any of the parent directories): ${garden.projectRoot}`,
{
root: garden.projectRoot,
}
)
}

const globalConfigStore = garden.globalConfigStore

// Garden works by default without Garden Cloud. In order to use cloud, a domain
// must be known to cloud for any command needing a logged in user.
//
Expand All @@ -68,7 +67,7 @@ export class LoginCommand extends Command {
//
// If the fallback was used, we rely on the token to decide if the Cloud API instance
// should use the default domain or not. The token lifecycle ends on logout.
let cloudDomain: string = getGardenCloudDomain(configuredDomain)
let cloudDomain: string = getGardenCloudDomain(projectConfig?.domain)

const distroName = getCloudDistributionName(cloudDomain)

Expand Down
29 changes: 13 additions & 16 deletions core/src/commands/logout.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ import { CloudApi, getGardenCloudDomain } from "../cloud/api"
import { dedent } from "../util/string"
import { getCloudDistributionName } from "../util/util"
import { ConfigurationError } from "../exceptions"
import { ProjectResource } from "../config/project"
import { findProjectConfig } from "../config/base"

export class LogOutCommand extends Command {
name = "logout"
help = "Log out of Garden Cloud."
hidden = true
noProject = true

description = dedent`
Expand All @@ -27,26 +28,22 @@ export class LogOutCommand extends Command {
printHeader(headerLog, "Log out", "☁️")
}

async action({ cli, garden, log }: CommandParams): Promise<CommandResult> {
async action({ garden, log }: CommandParams): Promise<CommandResult> {
// The Enterprise API is missing from the Garden class for commands with noProject
// so we initialize it here.
let configuredDomain = garden.cloudDomain
const projectConfig: ProjectResource | undefined = await findProjectConfig(log, garden.projectRoot)

if (!configuredDomain) {
const projectConfig = await cli?.getProjectConfig(log, garden.projectRoot)

// Fail if this is not run within a garden project
if (!projectConfig) {
throw new ConfigurationError(
`Not a project directory (or any of the parent directories): ${garden.projectRoot}`,
{
root: garden.projectRoot,
}
)
}
// Fail if this is not run within a garden project
if (!projectConfig) {
throw new ConfigurationError(
`Not a project directory (or any of the parent directories): ${garden.projectRoot}`,
{
root: garden.projectRoot,
}
)
}

const cloudDomain: string | undefined = getGardenCloudDomain(configuredDomain)
const cloudDomain: string | undefined = getGardenCloudDomain(projectConfig?.domain)

const distroName = getCloudDistributionName(cloudDomain)

Expand Down
24 changes: 24 additions & 0 deletions docs/reference/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -3010,6 +3010,30 @@ sources:
path:
```

### garden login

**Log in to Garden Cloud.**

Logs you in to Garden Cloud. Subsequent commands will have access to cloud features.

#### Usage

garden login



### garden logout

**Log out of Garden Cloud.**

Logs you out of Garden Cloud.

#### Usage

garden logout



### garden logs

**Retrieves the most recent logs for the specified Deploy(s).**
Expand Down