1515package db
1616
1717import (
18+ "bufio"
1819 "encoding/json"
1920 "os"
21+ "regexp"
2022 "strconv"
2123
2224 "github.com/rs/zerolog/log"
@@ -28,6 +30,11 @@ import (
2830
2931const DefaultApiVersion = "710"
3032
33+ var (
34+ tls = false
35+ netopts fdb.NetworkOptions
36+ )
37+
3138func getFdb () fdb.Database {
3239 clusterFile := os .Getenv ("FDB_CLUSTER_FILE" )
3340 if clusterFile == "" {
@@ -42,8 +49,48 @@ func getFdb() fdb.Database {
4249 if err != nil {
4350 log .Error ().Str ("FDB_API_VERSION" , apiVersionStr ).Msg ("Could not convert api version to integer" )
4451 }
52+ tlsCaFile := os .Getenv ("FDB_TLS_CA_FILE" )
53+ tlsCertFile := os .Getenv ("FDB_TLS_CERT_FILE" )
54+ tlsKeyFile := os .Getenv ("FDB_TLS_KEY_FILE" )
55+ tlsCheckValid := os .Getenv ("FDB_TLS_VERIFY_PEERS" )
4556
4657 fdb .MustAPIVersion (apiVersion )
58+ netopts = fdb .Options ()
59+
60+ // Check TLS in clusterfile
61+ tls = isTLSmode (& clusterFile )
62+ if tls {
63+ // TLS params for fdbclient
64+ if len (tlsCaFile ) > 0 {
65+ err := netopts .SetTLSCaPath (tlsCaFile )
66+ if err != nil {
67+ log .Error ().Err (err ).Str ("msg" , "Error cannot set CA" ).Msg ("TLS CA error" )
68+ }
69+ log .Info ().Str ("msg" , "TLS CA File" ).Str ("fdb.tls-ca-file" , tlsCaFile ).Msg ("TLS CA file set" )
70+ }
71+
72+ if len (tlsCertFile ) > 0 {
73+ err := netopts .SetTLSCertPath (tlsCertFile )
74+ if err != nil {
75+ log .Error ().Err (err ).Str ("msg" , "Error cannot set Cert" ).Msg ("TLS Cert error" )
76+ }
77+ log .Info ().Str ("msg" , "TLS Cert File" ).Str ("fdb.tls-cert-file" , tlsCertFile ).Msg ("TLS cert file set" )
78+ }
79+
80+ if len (tlsKeyFile ) > 0 {
81+ err := netopts .SetTLSKeyPath (tlsKeyFile )
82+ if err != nil {
83+ log .Error ().Err (err ).Str ("msg" , "Error cannot set Key" ).Msg ("TLS Key error" )
84+ }
85+ log .Info ().Str ("msg" , "TLS Private Key" ).Str ("fdb.tls-key-file" , tlsKeyFile ).Msg ("TLS private key set" )
86+ }
87+
88+ err := netopts .SetTLSVerifyPeers ([]byte (tlsCheckValid ))
89+ if err != nil {
90+ log .Error ().Err (err ).Str ("msg" , "Error cannot set VerifyPeers" ).Msg ("TLS VerifyPeers error" )
91+ }
92+ log .Info ().Str ("msg" , "TLS VerifyPeers" ).Str ("fdb.tls-check-valid" , tlsCheckValid ).Msg ("TLS VerifyPeers set" )
93+ }
4794 db , err := fdb .OpenDatabase (clusterFile )
4895 if err != nil {
4996 log .Error ().Str ("cluster_file" , clusterFile ).Msg ("failed to open database using cluster file" )
@@ -73,3 +120,31 @@ func GetStatus() (*models.FullStatus, error) {
73120 }
74121 return & status , nil
75122}
123+
124+ func isTLSmode (c * string ) bool {
125+ // Find if must run in TLS mode
126+ file , err := os .Open (* c )
127+ if err != nil {
128+ log .Fatal ().Err (err ).Msgf ("failed to open %s" , * c )
129+ }
130+
131+ scanner := bufio .NewScanner (file )
132+ scanner .Split (bufio .ScanLines )
133+ var text []string
134+
135+ for scanner .Scan () {
136+ text = append (text , scanner .Text ())
137+ }
138+
139+ // The method os.File.Close() is called
140+ // on the os.File object to close the file
141+ file .Close ()
142+
143+ // and then a loop iterates through
144+ // and prints each of the slice values.
145+ for _ , eachLn := range text {
146+ //docker:[email protected] :4500:tls 147+ tls , err = regexp .Match (`[0-9]+:tls` , []byte (eachLn ))
148+ }
149+ return tls
150+ }
0 commit comments