Skip to content

Commit

Permalink
ADD password encode method for database connection DSN.
Browse files Browse the repository at this point in the history
  • Loading branch information
karminski committed Jan 2, 2024
1 parent dee78dc commit cdcd442
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 7 deletions.
7 changes: 6 additions & 1 deletion src/actionruntime/couchdb/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ package couchdb

import (
"fmt"
"net/url"

_ "github.com/go-kivik/couchdb/v4"
"github.com/go-kivik/kivik/v4"
Expand All @@ -42,7 +43,11 @@ func (c *Connector) getClient(resourceOptions map[string]interface{}) (*kivik.Cl
if c.resourceOptions.SSL {
protocolStr = "https"
}
dsn := fmt.Sprintf("%s://%s:%s@%s:%s/", protocolStr, c.resourceOptions.Username, c.resourceOptions.Password,
escapedPassword, errInEscape := url.QueryUnescape(c.resourceOptions.Password)
if errInEscape != nil {
escapedPassword = c.resourceOptions.Password
}
dsn := fmt.Sprintf("%s://%s:%s@%s:%s/", protocolStr, c.resourceOptions.Username, escapedPassword,
c.resourceOptions.Host, c.resourceOptions.Port)
client, err := kivik.New("couch", dsn)
if err != nil {
Expand Down
7 changes: 6 additions & 1 deletion src/actionruntime/mongodb/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"encoding/pem"
"errors"
"fmt"
"net/url"
"strings"

"github.com/mitchellh/mapstructure"
Expand All @@ -42,8 +43,12 @@ func (m *Connector) getConnectionWithOptions(resourceOptions map[string]interfac
return nil, err
}
if mOptions.DatabaseUsername != "" && mOptions.DatabasePassword != "" {
escapedPassword, errInEscape := url.QueryUnescape(mOptions.DatabasePassword)
if errInEscape != nil {
escapedPassword = mOptions.DatabasePassword
}
uri = fmt.Sprintf("%s://%s:%s@%s", CONNECTION_FORMAT[mOptions.ConnectionFormat],
mOptions.DatabaseUsername, mOptions.DatabasePassword, mOptions.Host)
mOptions.DatabaseUsername, escapedPassword, mOptions.Host)
} else {
uri = fmt.Sprintf("%s://%s", CONNECTION_FORMAT[mOptions.ConnectionFormat], mOptions.Host)
}
Expand Down
7 changes: 6 additions & 1 deletion src/actionruntime/mssql/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"encoding/pem"
"errors"
"fmt"
"net/url"

mssqldb "github.com/microsoft/go-mssqldb"
"github.com/microsoft/go-mssqldb/msdsn"
Expand All @@ -42,10 +43,14 @@ func (m *Connector) getConnectionWithOptions(resourceOptions map[string]interfac
if err := mapstructure.Decode(resourceOptions, &m.ResourceOpts); err != nil {
return nil, err
}
escapedPassword, errInEscape := url.QueryUnescape(m.ResourceOpts.Password)
if errInEscape != nil {
escapedPassword = m.ResourceOpts.Password
}

// build base Microsoft SQL Server connection string
connString := fmt.Sprintf("server=%s;port=%s;database=%s;user id=%s;password=%s", m.ResourceOpts.Host,
m.ResourceOpts.Port, m.ResourceOpts.DatabaseName, m.ResourceOpts.Username, m.ResourceOpts.Password)
m.ResourceOpts.Port, m.ResourceOpts.DatabaseName, m.ResourceOpts.Username, escapedPassword)
// append connection options
for _, opt := range m.ResourceOpts.ConnectionOpts {
if opt["key"] != "" {
Expand Down
13 changes: 11 additions & 2 deletions src/actionruntime/mysql/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"encoding/pem"
"errors"
"fmt"
"net/url"

"github.com/go-sql-driver/mysql"
_ "github.com/go-sql-driver/mysql"
Expand All @@ -47,8 +48,12 @@ func (m *MySQLConnector) getConnectionWithOptions(resourceOptions map[string]int
}

func (m *MySQLConnector) connectPure() (db *sql.DB, err error) {
escapedPassword, errInEscape := url.QueryUnescape(m.Resource.DatabasePassword)
if errInEscape != nil {
escapedPassword = m.Resource.DatabasePassword
}
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", m.Resource.DatabaseUsername,
m.Resource.DatabasePassword, m.Resource.Host, m.Resource.Port, m.Resource.DatabaseName)
escapedPassword, m.Resource.Host, m.Resource.Port, m.Resource.DatabaseName)
db, err = sql.Open("mysql", dsn+"?timeout=30s")
if err != nil {
return nil, err
Expand All @@ -57,8 +62,12 @@ func (m *MySQLConnector) connectPure() (db *sql.DB, err error) {
}

func (m *MySQLConnector) connectViaSSL() (db *sql.DB, err error) {
escapedPassword, errInEscape := url.QueryUnescape(m.Resource.DatabasePassword)
if errInEscape != nil {
escapedPassword = m.Resource.DatabasePassword
}
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", m.Resource.DatabaseUsername,
m.Resource.DatabasePassword, m.Resource.Host, m.Resource.Port, m.Resource.DatabaseName)
escapedPassword, m.Resource.Host, m.Resource.Port, m.Resource.DatabaseName)
pool := x509.NewCertPool()
if ok := pool.AppendCertsFromPEM([]byte(m.Resource.SSL.ServerCert)); !ok {
return nil, errors.New("MySQL SSL/TLS Connection failed")
Expand Down
13 changes: 11 additions & 2 deletions src/actionruntime/postgresql/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"encoding/pem"
"errors"
"fmt"
"net/url"
"reflect"

"github.com/google/uuid"
Expand Down Expand Up @@ -48,8 +49,12 @@ func (p *Connector) getConnectionWithOptions(resourceOptions map[string]interfac
}

func (p *Connector) connectPure() (db *pgx.Conn, err error) {
escapedPassword, errInEscape := url.QueryUnescape(p.Resource.DatabasePassword)
if errInEscape != nil {
escapedPassword = p.Resource.DatabasePassword
}
dsn := fmt.Sprintf("postgresql://%s:%s@%s:%s/%s", p.Resource.DatabaseUsername,
p.Resource.DatabasePassword, p.Resource.Host, p.Resource.Port, p.Resource.DatabaseName)
escapedPassword, p.Resource.Host, p.Resource.Port, p.Resource.DatabaseName)
pgCfg, err := pgx.ParseConfig(dsn)
if err != nil {
return nil, err
Expand All @@ -62,8 +67,12 @@ func (p *Connector) connectPure() (db *pgx.Conn, err error) {
}

func (p *Connector) connectViaSSL() (db *pgx.Conn, err error) {
escapedPassword, errInEscape := url.QueryUnescape(p.Resource.DatabasePassword)
if errInEscape != nil {
escapedPassword = p.Resource.DatabasePassword
}
dsn := fmt.Sprintf("postgresql://%s:%s@%s:%s/%s", p.Resource.DatabaseUsername,
p.Resource.DatabasePassword, p.Resource.Host, p.Resource.Port, p.Resource.DatabaseName)
escapedPassword, p.Resource.Host, p.Resource.Port, p.Resource.DatabaseName)
pgCfg, err := pgx.ParseConfig(dsn)
if err != nil {
return nil, err
Expand Down

0 comments on commit cdcd442

Please sign in to comment.