From 92b9987acdcab022d055634179219b16ff60e4d3 Mon Sep 17 00:00:00 2001 From: prashantkhandelwal Date: Wed, 18 Jan 2023 16:45:49 +0530 Subject: [PATCH] Update frontend with sslflag for monogodb. --- frontend/src/network/payloads.ts | 1 + frontend/src/pages/project/newdb.tsx | 13 +++++++++++++ internal/controllers/dbconnection.go | 5 +++-- internal/handlers/dbconnection.go | 3 ++- internal/models/dbconnection.go | 5 ++++- pkg/queryengines/models/dbconnections.go | 1 + pkg/queryengines/mongoqueryengine/connection.go | 9 ++++----- pkg/queryengines/mongoqueryengine/queryengine.go | 2 +- 8 files changed, 29 insertions(+), 10 deletions(-) diff --git a/frontend/src/network/payloads.ts b/frontend/src/network/payloads.ts index 90ef3c26..68c889c8 100644 --- a/frontend/src/network/payloads.ts +++ b/frontend/src/network/payloads.ts @@ -15,4 +15,5 @@ export interface AddDBConnPayload { sshUser: string sshPassword: string sshKeyFile: string + useSSL: boolean } \ No newline at end of file diff --git a/frontend/src/pages/project/newdb.tsx b/frontend/src/pages/project/newdb.tsx index f3d869f5..9350528a 100644 --- a/frontend/src/pages/project/newdb.tsx +++ b/frontend/src/pages/project/newdb.tsx @@ -32,6 +32,7 @@ const NewDBPage: FunctionComponent<{}> = () => { const [dbSSHKeyFile, setSSHKeyFile] = useState('') const [addingError, setAddingError] = useState(false) const [adding, setAdding] = useState(false) + const [dbUseSSL, setDBUseSSL] = useState(false) if (!project) { return

Project not found

@@ -58,6 +59,7 @@ const NewDBPage: FunctionComponent<{}> = () => { sshUser: dbSSHUser, sshPassword: dbSSHPassword, sshKeyFile: dbSSHKeyFile, + useSSL: dbUseSSL, } try { await dispatch(addNewDBConn(payload)).unwrap() @@ -190,6 +192,17 @@ const NewDBPage: FunctionComponent<{}> = () => { + {dbType === DBConnType.MONGO &&
+ +
} + {dbUseSSH !== DBConnectionUseSSHType.NONE &&
diff --git a/internal/controllers/dbconnection.go b/internal/controllers/dbconnection.go index 857249b1..4160db50 100644 --- a/internal/controllers/dbconnection.go +++ b/internal/controllers/dbconnection.go @@ -25,10 +25,11 @@ func (DBConnectionController) CreateDBConnection( sshHost string, sshUser string, sshPassword string, - sshKeyFile string) (*models.DBConnection, error) { + sshKeyFile string, + useSSL bool) (*models.DBConnection, error) { dbConn, err := models.NewDBConnection(projectID, name, dbtype, scheme, host, port, - user, password, dbName, useSSH, sshHost, sshUser, sshPassword, sshKeyFile) + user, password, dbName, useSSH, sshHost, sshUser, sshPassword, sshKeyFile, useSSL) if err != nil { return nil, err } diff --git a/internal/handlers/dbconnection.go b/internal/handlers/dbconnection.go index e38933ed..379366da 100644 --- a/internal/handlers/dbconnection.go +++ b/internal/handlers/dbconnection.go @@ -28,11 +28,12 @@ func (DBConnectionHandlers) CreateDBConnection(c *gin.Context) { SSHUser string `json:"sshUser"` SSHPassword string `json:"sshPassword"` SSHKeyFile string `json:"sshKeyFile"` + UseSSL bool `json:"useSSL"` } c.BindJSON(&createBody) dbConn, err := dbConnController.CreateDBConnection(createBody.ProjectID, createBody.Name, createBody.Type, createBody.Scheme, createBody.Host, createBody.Port, - createBody.User, createBody.Password, createBody.DBName, createBody.UseSSH, createBody.SSHHost, createBody.SSHUser, createBody.SSHPassword, createBody.SSHKeyFile) + createBody.User, createBody.Password, createBody.DBName, createBody.UseSSH, createBody.SSHHost, createBody.SSHUser, createBody.SSHPassword, createBody.SSHKeyFile, createBody.UseSSL) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "success": false, diff --git a/internal/models/dbconnection.go b/internal/models/dbconnection.go index 61fbfb5c..07390397 100644 --- a/internal/models/dbconnection.go +++ b/internal/models/dbconnection.go @@ -29,13 +29,14 @@ type DBConnection struct { SSHUser sbsql.CryptedData `gorm:"type:text"` SSHPassword sbsql.CryptedData `gorm:"type:text"` SSHKeyFile sbsql.CryptedData `gorm:"type:text"` + UseSSL bool `gorm:"type:bool"` CreatedAt time.Time `gorm:"autoCreateTime"` UpdatedAt time.Time `gorm:"autoUpdateTime"` Project Project `gorm:"foreignkey:ProjectID"` } -func NewDBConnection(projectID string, name string, dbtype string, dbscheme, dbhost, dbport, dbuser, dbpassword, databaseName, useSSH, sshHost, sshUser, sshPassword, sshKeyFile string) (*DBConnection, error) { +func NewDBConnection(projectID string, name string, dbtype string, dbscheme, dbhost, dbport, dbuser, dbpassword, databaseName, useSSH, sshHost, sshUser, sshPassword, sshKeyFile string, useSSL bool) (*DBConnection, error) { if !utils.ContainsString([]string{qemodels.DBUSESSH_NONE, qemodels.DBUSESSH_PASSWORD, qemodels.DBUSESSH_KEYFILE, qemodels.DBUSESSH_PASSKEYFILE}, useSSH) { return nil, errors.New("useSSH is not correct") @@ -76,6 +77,7 @@ func NewDBConnection(projectID string, name string, dbtype string, dbscheme, dbh SSHUser: sbsql.CryptedData(sshUser), SSHPassword: sbsql.CryptedData(sshPassword), SSHKeyFile: sbsql.CryptedData(sshKeyFile), + UseSSL: useSSL, }, nil } @@ -100,5 +102,6 @@ func (dbConn *DBConnection) ToQEConnection() *qemodels.DBConnection { SSHUser: string(dbConn.SSHUser), SSHPassword: string(dbConn.SSHPassword), SSHKeyFile: string(dbConn.SSHKeyFile), + UseSSL: dbConn.UseSSL, } } diff --git a/pkg/queryengines/models/dbconnections.go b/pkg/queryengines/models/dbconnections.go index b589c81d..5782719d 100644 --- a/pkg/queryengines/models/dbconnections.go +++ b/pkg/queryengines/models/dbconnections.go @@ -16,6 +16,7 @@ type DBConnection struct { SSHUser string SSHPassword string SSHKeyFile string + UseSSL bool } const ( diff --git a/pkg/queryengines/mongoqueryengine/connection.go b/pkg/queryengines/mongoqueryengine/connection.go index b2af22f1..4463a939 100644 --- a/pkg/queryengines/mongoqueryengine/connection.go +++ b/pkg/queryengines/mongoqueryengine/connection.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "strconv" - "strings" "time" "go.mongodb.org/mongo-driver/mongo" @@ -16,7 +15,7 @@ type mongoClientInstance struct { LastUsed time.Time } -func createMongoConnectionURI(scheme string, host string, port uint16, user, password string) string { +func createMongoConnectionURI(scheme string, host string, port uint16, user, password string, useSSL bool) string { usernamePassword := "" if user != "" && password != "" { usernamePassword = user + ":" + password + "@" @@ -25,7 +24,7 @@ func createMongoConnectionURI(scheme string, host string, port uint16, user, pas // Adding support to connect to Azure CosmosDB using MongoDB API. // According to official docs, the connection string should pass // ssl=true param to connect. - if strings.Contains(host, ".mongo.cosmos.azure.com") { + if useSSL == true { return "mongodb://" + usernamePassword + host + ":" + strconv.Itoa(int(port)) + "/?ssl=true" } else { return "mongodb://" + usernamePassword + host + ":" + strconv.Itoa(int(port)) @@ -36,7 +35,7 @@ func createMongoConnectionURI(scheme string, host string, port uint16, user, pas return "" } -func (mEngine *MongoQueryEngine) getConnection(dbConnectionId, scheme, host string, port uint16, user, password string) (c *mongo.Client, err error) { +func (mEngine *MongoQueryEngine) getConnection(dbConnectionId, scheme, host string, port uint16, user, password string, useSSL bool) (c *mongo.Client, err error) { if mClientInstance, exists := mEngine.openClients[dbConnectionId]; exists { mEngine.openClients[dbConnectionId] = mongoClientInstance{ mongoClientInstance: mClientInstance.mongoClientInstance, @@ -44,7 +43,7 @@ func (mEngine *MongoQueryEngine) getConnection(dbConnectionId, scheme, host stri } return mClientInstance.mongoClientInstance, nil } - connectionURI := createMongoConnectionURI(scheme, host, port, user, password) + connectionURI := createMongoConnectionURI(scheme, host, port, user, password, useSSL) client, err := mongo.Connect(context.Background(), options.Client().ApplyURI(connectionURI)) if err != nil { err = fmt.Errorf("unable to connect to database: %v", err) diff --git a/pkg/queryengines/mongoqueryengine/queryengine.go b/pkg/queryengines/mongoqueryengine/queryengine.go index c6fc15b0..6736e855 100644 --- a/pkg/queryengines/mongoqueryengine/queryengine.go +++ b/pkg/queryengines/mongoqueryengine/queryengine.go @@ -41,7 +41,7 @@ func (mqe *MongoQueryEngine) RunQuery(dbConn *models.DBConnection, query string, dbConn.DBPort = fmt.Sprintf("%d", sshTun.GetLocalEndpoint().Port) } port, _ = strconv.Atoi(string(dbConn.DBPort)) - conn, err := mqe.getConnection(dbConn.ID, string(dbConn.DBScheme), string(dbConn.DBHost), uint16(port), string(dbConn.DBUser), string(dbConn.DBPassword)) + conn, err := mqe.getConnection(dbConn.ID, string(dbConn.DBScheme), string(dbConn.DBHost), uint16(port), string(dbConn.DBUser), string(dbConn.DBPassword), dbConn.UseSSL) if err != nil { return nil, err }