corso/src/cli/help/env.go
Abin Simon bfea3dea34 Add autocompletion for cli commands and flags
This add autocompletion for all flags and commands in the cli.
To use this you'll have to source the completions file generated by
`corso completion [bash|zsh|fish|powershell]`.

You can do that by doing the following (example for bash):

``` bash
corso completion bash > /tmp/corso_completions
source /tmp/corso_completions
```
2023-11-16 18:43:14 +05:30

105 lines
2.7 KiB
Go

package help
import (
"github.com/spf13/cobra"
. "github.com/alcionai/corso/src/cli/print"
"github.com/alcionai/corso/src/cli/utils"
)
// AddCommands attaches all `corso env * *` commands to the parent.
func AddCommands(cmd *cobra.Command) {
cmd.AddCommand(envCmd())
}
// The env command: purely a help display.
// `corso env [--help]`
func envCmd() *cobra.Command {
envCmd := &cobra.Command{
Use: "env",
Short: "env var guide",
Long: `A guide to using environment variables in Corso.`,
RunE: handleEnvCmd,
Args: utils.SubcommandsRequiredWithSuggestions,
}
envCmd.SetHelpFunc(envGuide)
return envCmd
}
// Handler for flat calls to `corso env`.
// Produces the same output as `corso env --help`.
func handleEnvCmd(cmd *cobra.Command, args []string) error {
return cmd.Help()
}
type envVar struct {
category string
name string
description string
}
// interface compliance check
var _ Printable = &envVar{}
// no modifications needed, just passthrough.
func (ev envVar) MinimumPrintable() any {
return ev
}
func (ev envVar) Headers(bool) []string {
// NOTE: skipID does not make sense in this context
return []string{ev.category, " "}
}
func (ev envVar) Values(bool) []string {
return []string{ev.name, ev.description}
}
// headers
const (
corso = "Corso"
azure = "Azure AD App Credentials"
aws = "AWS Credentials"
)
var (
corsoEVs = []envVar{
{corso, "CORSO_PASSPHRASE", "Passphrase to protect encrypted repository contents. " +
"It is impossible to use the repository or recover any backups without this key."},
}
azureEVs = []envVar{
{azure, "AZURE_CLIENT_ID", "Client ID for your Azure AD application used to access your M365 tenant."},
{azure, "AZURE_TENANT_ID", "ID for the M365 tenant where the Azure AD application is registered."},
{azure, "AZURE_CLIENT_SECRET", "Azure secret for your Azure AD application used to access your M365 tenant."},
}
awsEVs = []envVar{
{aws, "AWS_ACCESS_KEY_ID", "Access key for an IAM user or role for accessing an S3 bucket."},
{aws, "AWS_SECRET_ACCESS_KEY", "Secret key associated with the access key."},
{aws, "AWS_SESSION_TOKEN", "Session token required when using temporary credentials."},
}
)
func toPrintable(evs []envVar) []Printable {
ps := []Printable{}
for _, ev := range evs {
ps = append(ps, ev)
}
return ps
}
// envGuide outputs a help menu for setting env vars in Corso.
func envGuide(cmd *cobra.Command, args []string) {
ctx := cmd.Context()
Info(ctx,
"\n--- Environment Variable Guide ---\n",
"As a best practice, Corso retrieves credentials and sensitive information from environment variables.\n ",
"\n")
Table(ctx, toPrintable(corsoEVs))
Info(ctx, "\n")
Table(ctx, toPrintable(azureEVs))
Info(ctx, "\n")
Table(ctx, toPrintable(awsEVs))
}