Skip to content

Commit e35ce5e

Browse files
committed
Add TURSO_DB_REMOTE_ENCRYPTION_KEY to specify encryption key via env
1 parent 9b25cc6 commit e35ce5e

4 files changed

Lines changed: 23 additions & 10 deletions

File tree

internal/cmd/db_create.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ func CreateDatabase(name string) error {
108108
spinner := prompt.Spinner(fmt.Sprintf("Creating database %s in group %s...", internal.Emph(name), internal.Emph(groupName)))
109109
defer spinner.Stop()
110110

111-
if _, err = client.Databases.Create(name, location, "", "", groupName, schemaFlag, typeFlag == "schema", seed, sizeLimitFlag, remoteEncryptionCipherFlag, remoteEncryptionKeyFlag, spinner); err != nil {
111+
if _, err = client.Databases.Create(name, location, "", "", groupName, schemaFlag, typeFlag == "schema", seed, sizeLimitFlag, remoteEncryptionCipherFlag, remoteEncryptionKeyFlag(), spinner); err != nil {
112112
return fmt.Errorf("could not create database %s: %w", name, err)
113113
}
114114

@@ -218,18 +218,19 @@ func shouldAutoCreateGroup(name string, groups []turso.Group) bool {
218218
}
219219

220220
func validateEncryptionFlags() error {
221-
if remoteEncryptionKeyFlag == "" && remoteEncryptionCipherFlag == "" {
221+
remoteEncryptionKey := remoteEncryptionKeyFlag()
222+
if remoteEncryptionKey == "" && remoteEncryptionCipherFlag == "" {
222223
return nil
223224
}
224225
// if key flag is empty, then user passed only the cipher, which is invalid
225-
if remoteEncryptionKeyFlag == "" {
226+
if remoteEncryptionKey == "" {
226227
return fmt.Errorf("remote encryption key must be provided when remote encryption cipher is set")
227228
}
228229

229230
// if key is provided, lets verify its in base64 encoded
230-
_, err := base64.StdEncoding.DecodeString(remoteEncryptionKeyFlag)
231+
_, err := base64.StdEncoding.DecodeString(remoteEncryptionKey)
231232
if err != nil {
232-
return fmt.Errorf("encryption key (%s) is not valid base64: %w", remoteEncryptionKeyFlag, err)
233+
return fmt.Errorf("encryption key (%s) is not valid base64: %w", remoteEncryptionKey, err)
233234
}
234235

235236
if remoteEncryptionCipherFlag != "" {

internal/cmd/db_export.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func ExportDatabase(dbName, outputFile string, withMetadata bool, overwrite bool
5050
return fmt.Errorf("failed to find database: %w", err)
5151
}
5252
dbUrl := getDatabaseHttpUrl(&db)
53-
err = client.Databases.Export(dbName, dbUrl, outputFile, withMetadata, overwrite, remoteEncryptionKeyFlag)
53+
err = client.Databases.Export(dbName, dbUrl, outputFile, withMetadata, overwrite, remoteEncryptionKeyFlag())
5454
if err != nil {
5555
return err
5656
}

internal/cmd/db_shell.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ var shellCmd = &cobra.Command{
231231
DbUri: dbUrl,
232232
Proxy: proxy,
233233
AuthToken: authToken,
234-
RemoteEncryptionKey: remoteEncryptionKeyFlag,
234+
RemoteEncryptionKey: remoteEncryptionKeyFlag(),
235235
InF: cmd.InOrStdin(),
236236
OutF: cmd.OutOrStdout(),
237237
ErrF: cmd.ErrOrStderr(),

internal/cmd/encryption_flag.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
package cmd
22

3-
import "github.com/spf13/cobra"
3+
import (
4+
"os"
45

5-
var remoteEncryptionKeyFlag string
6+
"github.com/spf13/cobra"
7+
)
8+
9+
// unexported, don't use directly. Consider using remoteEncryptionKeyFlag()
10+
var remoteEncryptionKeyArg string
611
var remoteEncryptionCipherFlag string
712

813
func addRemoteEncryptionKeyFlag(cmd *cobra.Command) {
9-
cmd.Flags().StringVar(&remoteEncryptionKeyFlag, "remote-encryption-key", "", "Encryption key (in base64) for accessing encrypted databases on Turso cloud")
14+
cmd.Flags().StringVar(&remoteEncryptionKeyArg, "remote-encryption-key", "", "Encryption key (in base64) for accessing encrypted databases on Turso cloud")
1015
}
1116

1217
func addRemoteEncryptionCipherFlag(cmd *cobra.Command) {
1318
cmd.Flags().StringVar(&remoteEncryptionCipherFlag, "remote-encryption-cipher", "", "Cipher to use for database encryption")
1419
}
20+
21+
func remoteEncryptionKeyFlag() string {
22+
if remoteEncryptionKeyArg != "" {
23+
return remoteEncryptionKeyArg
24+
}
25+
return os.Getenv("TURSO_DB_REMOTE_ENCRYPTION_KEY")
26+
}

0 commit comments

Comments
 (0)