feat(secrets): Inserting secret data from stdin
This can be usefull for scripting and gives a lot of flexibility
This commit is contained in:
@ -3,6 +3,7 @@ package app
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -28,7 +29,8 @@ var AppSecretGenerateCommand = &cobra.Command{
|
|||||||
ValidArgsFunction: func(
|
ValidArgsFunction: func(
|
||||||
cmd *cobra.Command,
|
cmd *cobra.Command,
|
||||||
args []string,
|
args []string,
|
||||||
toComplete string) ([]string, cobra.ShellCompDirective) {
|
toComplete string,
|
||||||
|
) ([]string, cobra.ShellCompDirective) {
|
||||||
switch l := len(args); l {
|
switch l := len(args); l {
|
||||||
case 0:
|
case 0:
|
||||||
return autocomplete.AppNameComplete()
|
return autocomplete.AppNameComplete()
|
||||||
@ -155,12 +157,16 @@ environment. Typically, you can let Abra generate them for you on app creation
|
|||||||
abra app secret insert 1312.net my_secret v1 mySuperSecret
|
abra app secret insert 1312.net my_secret v1 mySuperSecret
|
||||||
|
|
||||||
# insert secret as file
|
# insert secret as file
|
||||||
abra app secret insert 1312.net my_secret v1 secret.txt -f`),
|
abra app secret insert 1312.net my_secret v1 secret.txt -f
|
||||||
Args: cobra.MinimumNArgs(4),
|
|
||||||
|
# insert secret from stdin
|
||||||
|
echo "mmySuperSecret" | abra app secret insert 1312.net my_secret v1`),
|
||||||
|
Args: cobra.MinimumNArgs(3),
|
||||||
ValidArgsFunction: func(
|
ValidArgsFunction: func(
|
||||||
cmd *cobra.Command,
|
cmd *cobra.Command,
|
||||||
args []string,
|
args []string,
|
||||||
toComplete string) ([]string, cobra.ShellCompDirective) {
|
toComplete string,
|
||||||
|
) ([]string, cobra.ShellCompDirective) {
|
||||||
switch l := len(args); l {
|
switch l := len(args); l {
|
||||||
case 0:
|
case 0:
|
||||||
return autocomplete.AppNameComplete()
|
return autocomplete.AppNameComplete()
|
||||||
@ -188,7 +194,30 @@ environment. Typically, you can let Abra generate them for you on app creation
|
|||||||
|
|
||||||
name := args[1]
|
name := args[1]
|
||||||
version := args[2]
|
version := args[2]
|
||||||
data := args[3]
|
var data string
|
||||||
|
if len(args) == 4 {
|
||||||
|
data = args[3]
|
||||||
|
} else if len(args) == 3 {
|
||||||
|
if insertFromFile {
|
||||||
|
log.Fatal("can not insert from file and read from stdin")
|
||||||
|
}
|
||||||
|
|
||||||
|
fi, err := os.Stdin.Stat()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
if fi.Mode()&os.ModeNamedPipe == 0 {
|
||||||
|
log.Fatal("need to provide secret data or stdin stream")
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug("reading secret data from stdin")
|
||||||
|
bytes, err := io.ReadAll(os.Stdin)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("reading data from stdin: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
data = string(bytes)
|
||||||
|
}
|
||||||
|
|
||||||
composeFiles, err := app.Recipe.GetComposeFiles(app.Env)
|
composeFiles, err := app.Recipe.GetComposeFiles(app.Env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -210,7 +239,7 @@ environment. Typically, you can let Abra generate them for you on app creation
|
|||||||
log.Fatal(i18n.G("no secret %s available for recipe %s?", name, app.Recipe.Name))
|
log.Fatal(i18n.G("no secret %s available for recipe %s?", name, app.Recipe.Name))
|
||||||
}
|
}
|
||||||
|
|
||||||
if insertFromFile {
|
if insertFromFile && len(args) == 4 {
|
||||||
raw, err := os.ReadFile(data)
|
raw, err := os.ReadFile(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(i18n.G("reading secret from file: %s", err))
|
log.Fatal(i18n.G("reading secret from file: %s", err))
|
||||||
@ -269,7 +298,8 @@ match those configured in the recipe beforehand.`),
|
|||||||
ValidArgsFunction: func(
|
ValidArgsFunction: func(
|
||||||
cmd *cobra.Command,
|
cmd *cobra.Command,
|
||||||
args []string,
|
args []string,
|
||||||
toComplete string) ([]string, cobra.ShellCompDirective) {
|
toComplete string,
|
||||||
|
) ([]string, cobra.ShellCompDirective) {
|
||||||
switch l := len(args); l {
|
switch l := len(args); l {
|
||||||
case 0:
|
case 0:
|
||||||
return autocomplete.AppNameComplete()
|
return autocomplete.AppNameComplete()
|
||||||
@ -376,7 +406,8 @@ var AppSecretLsCommand = &cobra.Command{
|
|||||||
ValidArgsFunction: func(
|
ValidArgsFunction: func(
|
||||||
cmd *cobra.Command,
|
cmd *cobra.Command,
|
||||||
args []string,
|
args []string,
|
||||||
toComplete string) ([]string, cobra.ShellCompDirective) {
|
toComplete string,
|
||||||
|
) ([]string, cobra.ShellCompDirective) {
|
||||||
return autocomplete.AppNameComplete()
|
return autocomplete.AppNameComplete()
|
||||||
},
|
},
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
@ -208,6 +208,9 @@ teardown(){
|
|||||||
|
|
||||||
run $ABRA app secret insert "$TEST_APP_DOMAIN" bar baz
|
run $ABRA app secret insert "$TEST_APP_DOMAIN" bar baz
|
||||||
assert_failure
|
assert_failure
|
||||||
|
|
||||||
|
run bash -c "echo foo | $ABRA app secret insert $TEST_APP_DOMAIN bar baz -f"
|
||||||
|
assert_failure
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "insert: cannot insert unknown secret" {
|
@test "insert: cannot insert unknown secret" {
|
||||||
@ -248,6 +251,20 @@ teardown(){
|
|||||||
assert_output --partial 'true'
|
assert_output --partial 'true'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "insert: create secret from stdin" {
|
||||||
|
run $ABRA app secret ls "$TEST_APP_DOMAIN"
|
||||||
|
assert_success
|
||||||
|
assert_output --partial 'false'
|
||||||
|
|
||||||
|
run bash -c "echo foo | $ABRA app secret insert $TEST_APP_DOMAIN test_pass_one v1"
|
||||||
|
assert_success
|
||||||
|
assert_output --partial 'successfully stored on server'
|
||||||
|
|
||||||
|
run $ABRA app secret ls "$TEST_APP_DOMAIN"
|
||||||
|
assert_success
|
||||||
|
assert_output --partial 'true'
|
||||||
|
}
|
||||||
|
|
||||||
@test "rm: validate arguments" {
|
@test "rm: validate arguments" {
|
||||||
run $ABRA app secret rm
|
run $ABRA app secret rm
|
||||||
assert_failure
|
assert_failure
|
||||||
|
Reference in New Issue
Block a user