Use SaltedKeyFromPassphrase in Uplink CLI and Gateway (#2637)
Co-authored-by: Jeff Wendling <leterip@gmail.com>
This commit is contained in:
parent
dd7c8610bb
commit
175c30048d
@ -285,28 +285,52 @@ func (flags GatewayFlags) openProject(ctx context.Context) (*libuplink.Project,
|
|||||||
func (flags GatewayFlags) interactive(
|
func (flags GatewayFlags) interactive(
|
||||||
cmd *cobra.Command, setupDir string, encryptionKeyFilepath string, overrides map[string]interface{},
|
cmd *cobra.Command, setupDir string, encryptionKeyFilepath string, overrides map[string]interface{},
|
||||||
) error {
|
) error {
|
||||||
|
ctx := process.Ctx(cmd)
|
||||||
|
|
||||||
satelliteAddress, err := wizard.PromptForSatellite(cmd)
|
satelliteAddress, err := wizard.PromptForSatellite(cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Error.Wrap(err)
|
return Error.Wrap(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
apiKey, err := wizard.PromptForAPIKey()
|
apiKeyString, err := wizard.PromptForAPIKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Error.Wrap(err)
|
return Error.Wrap(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
humanReadableKey, err := wizard.PromptForEncryptionKey()
|
apiKey, err := libuplink.ParseAPIKey(apiKeyString)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Error.Wrap(err)
|
return Error.Wrap(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = setup.SaveEncryptionKey(humanReadableKey, encryptionKeyFilepath)
|
passphrase, err := wizard.PromptForEncryptionPassphrase()
|
||||||
|
if err != nil {
|
||||||
|
return Error.Wrap(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
uplk, err := libuplink.NewUplink(ctx, nil)
|
||||||
|
if err != nil {
|
||||||
|
return Error.Wrap(err)
|
||||||
|
}
|
||||||
|
defer func() { err = errs.Combine(err, uplk.Close()) }()
|
||||||
|
|
||||||
|
project, err := uplk.OpenProject(ctx, satelliteAddress, apiKey)
|
||||||
|
if err != nil {
|
||||||
|
return Error.Wrap(err)
|
||||||
|
}
|
||||||
|
defer func() { err = errs.Combine(err, project.Close()) }()
|
||||||
|
|
||||||
|
key, err := project.SaltedKeyFromPassphrase(ctx, passphrase)
|
||||||
|
if err != nil {
|
||||||
|
return Error.Wrap(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = setup.SaveEncryptionKey(string(key[:]), encryptionKeyFilepath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Error.Wrap(err)
|
return Error.Wrap(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
overrides["satellite-addr"] = satelliteAddress
|
overrides["satellite-addr"] = satelliteAddress
|
||||||
overrides["api-key"] = apiKey
|
overrides["api-key"] = apiKeyString
|
||||||
overrides["enc.key-filepath"] = encryptionKeyFilepath
|
overrides["enc.key-filepath"] = encryptionKeyFilepath
|
||||||
|
|
||||||
err = process.SaveConfigWithAllDefaults(cmd.Flags(), filepath.Join(setupDir, "config.yaml"), overrides)
|
err = process.SaveConfigWithAllDefaults(cmd.Flags(), filepath.Join(setupDir, "config.yaml"), overrides)
|
||||||
|
@ -122,8 +122,8 @@ func PromptForAPIKey() (string, error) {
|
|||||||
return apiKey, nil
|
return apiKey, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// PromptForEncryptionKey handles user input for an encryption key to be used with wizards
|
// PromptForEncryptionPassphrase handles user input for an encryption passphrase to be used with wizards
|
||||||
func PromptForEncryptionKey() (string, error) {
|
func PromptForEncryptionPassphrase() (string, error) {
|
||||||
_, err := fmt.Print("Enter your encryption passphrase: ")
|
_, err := fmt.Print("Enter your encryption passphrase: ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
@ -11,9 +11,11 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"github.com/zeebo/errs"
|
||||||
|
|
||||||
"storj.io/storj/cmd/internal/wizard"
|
"storj.io/storj/cmd/internal/wizard"
|
||||||
"storj.io/storj/internal/fpath"
|
"storj.io/storj/internal/fpath"
|
||||||
|
libuplink "storj.io/storj/lib/uplink"
|
||||||
"storj.io/storj/pkg/cfgstruct"
|
"storj.io/storj/pkg/cfgstruct"
|
||||||
"storj.io/storj/pkg/process"
|
"storj.io/storj/pkg/process"
|
||||||
"storj.io/storj/uplink/setup"
|
"storj.io/storj/uplink/setup"
|
||||||
@ -105,29 +107,52 @@ func cmdSetupNonInteractive(cmd *cobra.Command, setupDir string, encryptionKeyFi
|
|||||||
// encryptionKeyFilepath should be set to the filepath indicated by the user or
|
// encryptionKeyFilepath should be set to the filepath indicated by the user or
|
||||||
// or to a default path whose directory tree exists.
|
// or to a default path whose directory tree exists.
|
||||||
func cmdSetupInteractive(cmd *cobra.Command, setupDir string, encryptionKeyFilepath string) error {
|
func cmdSetupInteractive(cmd *cobra.Command, setupDir string, encryptionKeyFilepath string) error {
|
||||||
|
ctx := process.Ctx(cmd)
|
||||||
|
|
||||||
satelliteAddress, err := wizard.PromptForSatellite(cmd)
|
satelliteAddress, err := wizard.PromptForSatellite(cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
apiKey, err := wizard.PromptForAPIKey()
|
apiKeyString, err := wizard.PromptForAPIKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return Error.Wrap(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
humanReadableKey, err := wizard.PromptForEncryptionKey()
|
apiKey, err := libuplink.ParseAPIKey(apiKeyString)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return Error.Wrap(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = setup.SaveEncryptionKey(humanReadableKey, encryptionKeyFilepath)
|
passphrase, err := wizard.PromptForEncryptionPassphrase()
|
||||||
|
if err != nil {
|
||||||
|
return Error.Wrap(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
uplk, err := libuplink.NewUplink(ctx, nil)
|
||||||
|
if err != nil {
|
||||||
|
return Error.Wrap(err)
|
||||||
|
}
|
||||||
|
defer func() { err = errs.Combine(err, uplk.Close()) }()
|
||||||
|
|
||||||
|
project, err := uplk.OpenProject(ctx, satelliteAddress, apiKey)
|
||||||
|
if err != nil {
|
||||||
|
return Error.Wrap(err)
|
||||||
|
}
|
||||||
|
defer func() { err = errs.Combine(err, project.Close()) }()
|
||||||
|
|
||||||
|
key, err := project.SaltedKeyFromPassphrase(ctx, passphrase)
|
||||||
|
if err != nil {
|
||||||
|
return Error.Wrap(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = setup.SaveEncryptionKey(string(key[:]), encryptionKeyFilepath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var override = map[string]interface{}{
|
var override = map[string]interface{}{
|
||||||
"api-key": apiKey,
|
"api-key": apiKeyString,
|
||||||
"satellite-addr": satelliteAddress,
|
"satellite-addr": satelliteAddress,
|
||||||
"enc.key-filepath": encryptionKeyFilepath,
|
"enc.key-filepath": encryptionKeyFilepath,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user