Skip to content

Commit 3bfa949

Browse files
committed
add support for TLS client auth
1 parent 7df899f commit 3bfa949

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ docker run -d -p 3000:3000 \
2121

2222
* Authentication:
2323
* HTTP Basic
24+
* TLS client authentication
2425
* Raw SQL editor only, no query builder yet
2526
* Macros
2627

pkg/trino/driver/driver.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package driver
33
import (
44
"crypto/tls"
55
"database/sql"
6+
"errors"
7+
"fmt"
68
"net/http"
79

810
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
@@ -17,14 +19,28 @@ const DriverName string = "trino"
1719
func Open(settings models.TrinoDatasourceSettings) (*sql.DB, error) {
1820
skipVerify := false
1921
sslCert := ""
22+
var clientCert []tls.Certificate
2023
if settings.Opts.TLS != nil {
2124
skipVerify = settings.Opts.TLS.InsecureSkipVerify
2225
sslCert = settings.Opts.TLS.CACertificate
2326
}
27+
if settings.Opts.TLS.ClientCertificate != "" {
28+
if settings.Opts.TLS.ClientKey == "" {
29+
return nil, errors.New("client certificate was configured without a client key")
30+
}
31+
cert, err := tls.X509KeyPair(
32+
[]byte(settings.Opts.TLS.ClientCertificate),
33+
[]byte(settings.Opts.TLS.ClientKey))
34+
if err != nil {
35+
return nil, fmt.Errorf("failed to load client certificate: %w", err)
36+
}
37+
clientCert = append(clientCert, cert)
38+
}
2439
client := &http.Client{
2540
Transport: &http.Transport{
2641
TLSClientConfig: &tls.Config{
2742
InsecureSkipVerify: skipVerify,
43+
Certificates: clientCert,
2844
},
2945
},
3046
}

0 commit comments

Comments
 (0)