From 893147d23a87d20834a10cfea10d4681f91dbef8 Mon Sep 17 00:00:00 2001 From: Mariano Cano Date: Wed, 9 Nov 2022 12:01:56 -0800 Subject: [PATCH] Create context for automatic RAs It creates a new context with the given name if the flags --token and --context are passed, and the context does not exist. Fixes #1047 --- commands/app.go | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/commands/app.go b/commands/app.go index 66030be2..31d62f87 100644 --- a/commands/app.go +++ b/commands/app.go @@ -121,7 +121,13 @@ func appAction(ctx *cli.Context) error { // Allow custom contexts. if caCtx := ctx.String("context"); caCtx != "" { - if err := step.Contexts().SetCurrent(caCtx); err != nil { + if _, ok := step.Contexts().Get(caCtx); ok { + if err := step.Contexts().SetCurrent(caCtx); err != nil { + return err + } + } else if token == "" { + return fmt.Errorf("context %q not found", caCtx) + } else if err := createContext(caCtx); err != nil { return err } } @@ -234,6 +240,26 @@ To get a linked authority token: return nil } +// createContext creates a new context using the given name for the context, +// authority and profile. +func createContext(name string) error { + if err := step.Contexts().Add(&step.Context{ + Name: name, Authority: name, Profile: name, + }); err != nil { + return fmt.Errorf("error adding context: %w", err) + } + if err := step.Contexts().SaveCurrent(name); err != nil { + return fmt.Errorf("error saving context: %w", err) + } + if err := step.Contexts().SetCurrent(name); err != nil { + return fmt.Errorf("error setting context: %w", err) + } + if err := os.MkdirAll(step.Path(), 0700); err != nil { + return fmt.Errorf("error creating directory: %w", err) + } + return nil +} + // fatal writes the passed error on the standard error and exits with the exit // code 1. If the environment variable STEPDEBUG is set to 1 it shows the // stack trace of the error.