Skip to content

Commit 57dda9a

Browse files
committed
Pass remote encryption key if provided
1 parent 48da1bb commit 57dda9a

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

libsql.go

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ func init() {
4141
}
4242

4343
type config struct {
44-
authToken *string
45-
readYourWrites *bool
46-
encryptionKey *string
44+
authToken *string
45+
readYourWrites *bool
46+
encryptionKey *string
4747
remoteEncryptionKey *string
48-
syncInterval *time.Duration
48+
syncInterval *time.Duration
4949
}
5050

5151
type Option interface {
@@ -217,8 +217,9 @@ func (d driver) OpenConnector(dbAddress string) (sqldriver.Connector, error) {
217217
fallthrough
218218
case "libsql":
219219
authToken := u.Query().Get("authToken")
220+
remoteEncryptionKey := u.Query().Get("remoteEncryptionKey")
220221
u.RawQuery = ""
221-
return openRemoteConnector(u.String(), authToken)
222+
return openRemoteConnector(u.String(), authToken, remoteEncryptionKey)
222223
}
223224
return nil, fmt.Errorf("unsupported URL scheme: %s\nThis driver supports only URLs that start with libsql://, file:, https:// or http://", u.Scheme)
224225
}
@@ -242,8 +243,8 @@ func openLocalConnector(dbPath string) (*Connector, error) {
242243
return &Connector{nativeDbPtr: nativeDbPtr}, nil
243244
}
244245

245-
func openRemoteConnector(primaryUrl, authToken string) (*Connector, error) {
246-
nativeDbPtr, err := libsqlOpenRemote(primaryUrl, authToken)
246+
func openRemoteConnector(primaryUrl, authToken, remoteEncryptionKey string) (*Connector, error) {
247+
nativeDbPtr, err := libsqlOpenRemote(primaryUrl, authToken, remoteEncryptionKey)
247248
if err != nil {
248249
return nil, err
249250
}
@@ -346,15 +347,26 @@ func libsqlOpenLocal(dataSourceName string) (C.libsql_database_t, error) {
346347
return db, nil
347348
}
348349

349-
func libsqlOpenRemote(url, authToken string) (C.libsql_database_t, error) {
350+
func libsqlOpenRemote(url, authToken, remoteEncryptionKey string) (C.libsql_database_t, error) {
350351
connectionString := C.CString(url)
351352
defer C.free(unsafe.Pointer(connectionString))
352353
authTokenNativeString := C.CString(authToken)
353354
defer C.free(unsafe.Pointer(authTokenNativeString))
354355

356+
var remoteEncryptionKeyNativeString *C.char
357+
if remoteEncryptionKey != "" {
358+
remoteEncryptionKeyNativeString = C.CString(remoteEncryptionKey)
359+
defer C.free(unsafe.Pointer(remoteEncryptionKeyNativeString))
360+
}
361+
355362
var db C.libsql_database_t
356363
var errMsg *C.char
357-
statusCode := C.libsql_open_remote(connectionString, authTokenNativeString, &db, &errMsg)
364+
var statusCode C.int
365+
if remoteEncryptionKey == "" {
366+
statusCode = C.libsql_open_remote(connectionString, authTokenNativeString, &db, &errMsg)
367+
} else {
368+
statusCode = C.libsql_open_remote_with_remote_encryption(connectionString, authTokenNativeString, remoteEncryptionKeyNativeString, &db, &errMsg)
369+
}
358370
if statusCode != 0 {
359371
return nil, libsqlError(fmt.Sprint("failed to open remote database ", url), statusCode, errMsg)
360372
}

0 commit comments

Comments
 (0)