open-vault/plugins/database/mongodb/util.go

56 lines
1.4 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package mongodb
import "go.mongodb.org/mongo-driver/mongo/writeconcern"
type createUserCommand struct {
Username string `bson:"createUser"`
Password string `bson:"pwd,omitempty"`
Roles []interface{} `bson:"roles"`
}
type updateUserCommand struct {
Username string `bson:"updateUser"`
Password string `bson:"pwd"`
}
type dropUserCommand struct {
Username string `bson:"dropUser"`
WriteConcern *writeconcern.WriteConcern `bson:"writeConcern"`
}
type mongodbRole struct {
Role string `json:"role" bson:"role"`
DB string `json:"db" bson:"db"`
}
type mongodbRoles []mongodbRole
type mongoDBStatement struct {
DB string `json:"db"`
Roles mongodbRoles `json:"roles"`
}
// Convert array of role documents like:
//
// [ { "role": "readWrite" }, { "role": "readWrite", "db": "test" } ]
//
// into a "standard" MongoDB roles array containing both strings and role documents:
//
// [ "readWrite", { "role": "readWrite", "db": "test" } ]
//
// MongoDB's createUser command accepts the latter.
func (roles mongodbRoles) toStandardRolesArray() []interface{} {
var standardRolesArray []interface{}
for _, role := range roles {
if role.DB == "" {
standardRolesArray = append(standardRolesArray, role.Role)
} else {
standardRolesArray = append(standardRolesArray, role)
}
}
return standardRolesArray
}