| 374 | } |
| 375 | |
| 376 | func getSecretsFromOptions(opts *SetOptions) (map[string][]byte, error) { |
| 377 | secrets := make(map[string][]byte) |
| 378 | |
| 379 | if opts.EnvFile != "" { |
| 380 | var r io.Reader |
| 381 | if opts.EnvFile == "-" { |
| 382 | defer opts.IO.In.Close() |
| 383 | r = opts.IO.In |
| 384 | } else { |
| 385 | f, err := os.Open(opts.EnvFile) |
| 386 | if err != nil { |
| 387 | return nil, fmt.Errorf("failed to open env file: %w", err) |
| 388 | } |
| 389 | defer f.Close() |
| 390 | r = f |
| 391 | } |
| 392 | envs, err := godotenv.Parse(r) |
| 393 | if err != nil { |
| 394 | return nil, fmt.Errorf("error parsing env file: %w", err) |
| 395 | } |
| 396 | if len(envs) == 0 { |
| 397 | return nil, fmt.Errorf("no secrets found in file") |
| 398 | } |
| 399 | for key, value := range envs { |
| 400 | secrets[key] = []byte(value) |
| 401 | } |
| 402 | return secrets, nil |
| 403 | } |
| 404 | |
| 405 | body, err := getBody(opts) |
| 406 | if err != nil { |
| 407 | return nil, fmt.Errorf("did not understand secret body: %w", err) |
| 408 | } |
| 409 | secrets[opts.SecretName] = body |
| 410 | return secrets, nil |
| 411 | } |
| 412 | |
| 413 | func getBody(opts *SetOptions) ([]byte, error) { |
| 414 | if opts.Body != "" { |