/
connector.go
92 lines (69 loc) · 1.65 KB
/
connector.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package writer
import (
"context"
"crypto/tls"
"crypto/x509"
"io/ioutil"
log "github.com/sirupsen/logrus"
"github.com/spf13/viper"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
type MongoDBConnector struct {
client *mongo.Client
}
func NewMongoDBConnector() *MongoDBConnector {
return &MongoDBConnector{}
}
func (mdb *MongoDBConnector) Connect() error {
uri := viper.GetString("mongodb.uri")
log.WithFields(log.Fields{
"uri": uri,
}).Info("Connect to MongoDB")
// Set client options
clientOptions := options.Client().ApplyURI(uri)
// Load CA file
caFile := viper.GetString("mongodb.ca_file")
if len(caFile) > 0 {
tlsConfig, err := mdb.LoadCert(caFile)
if err != nil {
return err
}
clientOptions.SetTLSConfig(tlsConfig)
}
// Connect to MongoDB
client, err := mongo.Connect(context.Background(), clientOptions)
if err != nil {
return err
}
mdb.client = client
// Check the connection
err = client.Ping(context.TODO(), nil)
if err != nil {
return err
}
log.Info("Connected to MongoDB Successfully")
// Initializing database
return mdb.InitializeDatabase()
}
func (mdb *MongoDBConnector) LoadCert(caFile string) (*tls.Config, error) {
// Load CA cert
caCert, err := ioutil.ReadFile(caFile)
if err != nil {
return nil, err
}
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
// Setup HTTPS client
tlsConfig := &tls.Config{
RootCAs: caCertPool,
}
tlsConfig.BuildNameToCertificate()
return tlsConfig, nil
}
func (mdb *MongoDBConnector) InitializeDatabase() error {
return nil
}
func (mdb *MongoDBConnector) GetClient() *mongo.Client {
return mdb.client
}