add mysql user auth settings for database users

This commit is contained in:
Greg Mankes 2019-11-18 10:53:07 -05:00
parent 6c8415f2ab
commit 1b8be0b83d
2 changed files with 121 additions and 4 deletions

View File

@ -143,9 +143,15 @@ type DatabaseConnection struct {
// DatabaseUser represents a user in the database
type DatabaseUser struct {
Name string `json:"name,omitempty"`
Role string `json:"role,omitempty"`
Password string `json:"password,omitempty"`
Name string `json:"name,omitempty"`
Role string `json:"role,omitempty"`
Password string `json:"password,omitempty"`
MySQLSettings *DatabaseMySQLUserSettings `json:"mysql_settings,omitempty"`
}
// DatabaseMySQLUserSettings contains MySQL-specific user settings
type DatabaseMySQLUserSettings struct {
AuthPlugin string `json:"auth_plugin"`
}
// DatabaseMaintenanceWindow represents the maintenance_window of a database
@ -235,7 +241,8 @@ type DatabaseCreatePoolRequest struct {
// DatabaseCreateUserRequest is used to create a new database user
type DatabaseCreateUserRequest struct {
Name string `json:"name"`
Name string `json:"name"`
MySQLSettings *DatabaseMySQLUserSettings `json:"mysql_settings,omitempty"`
}
// DatabaseCreateDBRequest is used to create a new engine-specific database within the cluster

View File

@ -1297,3 +1297,113 @@ func TestDatabases_UpdateFirewallRules(t *testing.T) {
})
require.NoError(t, err)
}
func TestDatabases_CreateDatabaseUserWithMySQLSettings(t *testing.T) {
setup()
defer teardown()
dbID := "deadbeef-dead-4aa5-beef-deadbeef347d"
path := fmt.Sprintf("/v2/databases/%s/users", dbID)
responseJSON := []byte(`{
"user": {
"name": "foo",
"mysql_settings": {
"auth_plugin": "native"
}
}
}`)
expectedUser := &DatabaseUser{
Name: "foo",
MySQLSettings: &DatabaseMySQLUserSettings{
AuthPlugin: "native",
},
}
mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodPost)
w.WriteHeader(http.StatusOK)
w.Write(responseJSON)
})
user, _, err := client.Databases.CreateUser(ctx, dbID, &DatabaseCreateUserRequest{
Name: expectedUser.Name,
MySQLSettings: expectedUser.MySQLSettings,
})
require.NoError(t, err)
require.Equal(t, expectedUser, user)
}
func TestDatabases_ListDatabaseUsersWithMySQLSettings(t *testing.T) {
setup()
defer teardown()
dbID := "deadbeef-dead-4aa5-beef-deadbeef347d"
path := fmt.Sprintf("/v2/databases/%s/users", dbID)
responseJSON := []byte(`{
"users": [
{
"name": "foo",
"mysql_settings": {
"auth_plugin": "native"
}
}
]
}`)
expectedUsers := []DatabaseUser{
{
Name: "foo",
MySQLSettings: &DatabaseMySQLUserSettings{
AuthPlugin: "native",
},
},
}
mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
w.WriteHeader(http.StatusOK)
w.Write(responseJSON)
})
users, _, err := client.Databases.ListUsers(ctx, dbID, &ListOptions{})
require.NoError(t, err)
require.Equal(t, expectedUsers, users)
}
func TestDatabases_GetDatabaseUserWithMySQLSettings(t *testing.T) {
setup()
defer teardown()
dbID := "deadbeef-dead-4aa5-beef-deadbeef347d"
userID := "d290a0a0-27da-42bd-a4b2-bcecf43b8832"
path := fmt.Sprintf("/v2/databases/%s/users/%s", dbID, userID)
responseJSON := []byte(`{
"user": {
"name": "foo",
"mysql_settings": {
"auth_plugin": "native"
}
}
}`)
expectedUser := &DatabaseUser{
Name: "foo",
MySQLSettings: &DatabaseMySQLUserSettings{
AuthPlugin: "native",
},
}
mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
w.WriteHeader(http.StatusOK)
w.Write(responseJSON)
})
user, _, err := client.Databases.GetUser(ctx, dbID, userID)
require.NoError(t, err)
require.Equal(t, expectedUser, user)
}