Skip to content

Commit

Permalink
Updated with .pgpass file
Browse files Browse the repository at this point in the history
  • Loading branch information
parthiv11 committed Jun 29, 2023
1 parent e57984e commit 6e9219b
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 21 deletions.
72 changes: 69 additions & 3 deletions plugins/yugabytedb/database_credentials.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,80 @@ func DatabaseCredentials() schema.CredentialType {
Optional: true,
},
},
DefaultProvisioner: provision.EnvVars(defaultEnvVarMapping),
Importer: importer.TryEnvVarPair(defaultEnvVarMapping),
DefaultProvisioner: provision.TryAll(
provision.EnvVars(defaultEnvVarMapping),
provision.TempFile(
mysqlConfig,
provision.Filename(".pgpass"),
provision.AtFixedPath("~/")
)
),
Importer: importer.TryAll(
importer.TryEnvVarPair(defaultEnvVarMapping),
TryMySQLConfigFile("~/.pgpass"),
)
}
}
var defaultEnvVarMapping = map[string]sdk.FieldName{
"PGHOST": fieldname.Host,
"PGPORT": fieldname.Port,
"PGUSER": fieldname.User,
"PGPASSWORD": fieldname.Password,
"PGDATABASE": fieldname.Database,
}

func TryPgPassFile() sdk.Importer {
return importer.TryFile("~/.pgpass", func(ctx context.Context, contents importer.FileContents, in sdk.ImportInput, out *sdk.ImportAttempt) {
fileLines := strings.Split(contents.String(), "\n")

for _, line := range fileLines {
line = strings.TrimSpace(line)
if line == "" || strings.HasPrefix(line, "#") {
continue
}

fields := strings.Split(line, ":")

if len(fields) < 5 {
out.AddError(errors.New("Invalid .pgpass entry: " + line))
continue
}

out.AddCandidate(sdk.ImportCandidate{
NameHint: importer.SanitizeNameHint(fields[2]),
Fields: map[sdk.FieldName]string{
fieldname.Host: fields[0],
fieldname.Port: fields[1],
fieldname.Database: fields[2],
fieldname.User: fields[3],
fieldname.Password: fields[4],
},
})
}
})
}

func pgPass(in sdk.ProvisionInput) ([]byte, error) {
content := ""

if host, ok := in.ItemFields[fieldname.Host]; ok {
content += host+':'
}

if port, ok := in.ItemFields[fieldname.Port]; ok {
content += port+':'
}

if database, ok := in.ItemFields[fieldname.Database]; ok {
content += database+':'
}

if user, ok := in.ItemFields[fieldname.User]; ok {
content += user+':'
}

if password, ok := in.ItemFields[fieldname.Password]; ok {
content += password
}

return []byte(content), nil
}
36 changes: 18 additions & 18 deletions plugins/yugabytedb/database_credentials_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,24 @@ import (
)

func TestDatabaseCredentialsImporter(t *testing.T) {
expectedFields := map[sdk.FieldName]string{
fieldname.User: "root",
fieldname.Password: "123456",
fieldname.Database: "test",
fieldname.Port: "3306",
fieldname.Host: "localhost",
}

plugintest.TestImporter(t, DatabaseCredentials().Importer, map[string]plugintest.ImportCase{
"default": {
Environment: map[string]string{
"PGHOST": "localhost",
"PGPORT": "5432",
"PGUSER": "root",
"PGPASSWORD": "123456",
"PGDATABASE": "test",
"pgpass": {
Files: map[string]string{
"~/.pgpass": plugintest.LoadFixture(t, ".pgpass"),
},
ExpectedCandidates: []sdk.ImportCandidate{
{
Fields: map[sdk.FieldName]string{
fieldname.Host: "localhost",
fieldname.Port: "5432",
fieldname.User: "root",
fieldname.Password: "123456",
fieldname.Database: "test",
},
{Fields: expectedFields},
},
},
},
})
})
}

func TestDatabaseCredentialsProvisioner(t *testing.T) {
Expand All @@ -48,9 +44,13 @@ func TestDatabaseCredentialsProvisioner(t *testing.T) {
"PGHOST": "localhost",
"PGPORT": "5432",
"PGUSER": "root",
"PGPASSWORD": "123456",
"PGDATABASE": "test",
},
Files: map[string]OutputFile{
"~/.pgpass": {
Contents: []byte(plugintest.LoadFixture(t, ".pgpass")),
},
}
},
},
})
Expand Down

0 comments on commit 6e9219b

Please sign in to comment.