mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-31 18:48:08 +00:00 
			
		
		
		
	Database gRPC plugins (#3666)
* Start work on context aware backends * Start work on moving the database plugins to gRPC in order to pass context * Add context to builtin database plugins * use byte slice instead of string * Context all the things * Move proto messages to the dbplugin package * Add a grpc mechanism for running backend plugins * Serve the GRPC plugin * Add backwards compatibility to the database plugins * Remove backend plugin changes * Remove backend plugin changes * Cleanup the transport implementations * If grpc connection is in an unexpected state restart the plugin * Fix tests * Fix tests * Remove context from the request object, replace it with context.TODO * Add a test to verify netRPC plugins still work * Remove unused mapstructure call * Code review fixes * Code review fixes * Code review fixes
This commit is contained in:
		| @@ -1,6 +1,7 @@ | ||||
| package mongodb | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"io" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| @@ -27,6 +28,8 @@ type MongoDB struct { | ||||
| 	credsutil.CredentialsProducer | ||||
| } | ||||
|  | ||||
| var _ dbplugin.Database = &MongoDB{} | ||||
|  | ||||
| // New returns a new MongoDB instance | ||||
| func New() (interface{}, error) { | ||||
| 	connProducer := &mongoDBConnectionProducer{} | ||||
| @@ -63,8 +66,8 @@ func (m *MongoDB) Type() (string, error) { | ||||
| 	return mongoDBTypeName, nil | ||||
| } | ||||
|  | ||||
| func (m *MongoDB) getConnection() (*mgo.Session, error) { | ||||
| 	session, err := m.Connection() | ||||
| func (m *MongoDB) getConnection(ctx context.Context) (*mgo.Session, error) { | ||||
| 	session, err := m.Connection(ctx) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| @@ -80,7 +83,7 @@ func (m *MongoDB) getConnection() (*mgo.Session, error) { | ||||
| // | ||||
| // JSON Example: | ||||
| //  { "db": "admin", "roles": [{ "role": "readWrite" }, {"role": "read", "db": "foo"}] } | ||||
| func (m *MongoDB) CreateUser(statements dbplugin.Statements, usernameConfig dbplugin.UsernameConfig, expiration time.Time) (username string, password string, err error) { | ||||
| func (m *MongoDB) CreateUser(ctx context.Context, statements dbplugin.Statements, usernameConfig dbplugin.UsernameConfig, expiration time.Time) (username string, password string, err error) { | ||||
| 	// Grab the lock | ||||
| 	m.Lock() | ||||
| 	defer m.Unlock() | ||||
| @@ -89,7 +92,7 @@ func (m *MongoDB) CreateUser(statements dbplugin.Statements, usernameConfig dbpl | ||||
| 		return "", "", dbutil.ErrEmptyCreationStatement | ||||
| 	} | ||||
|  | ||||
| 	session, err := m.getConnection() | ||||
| 	session, err := m.getConnection(ctx) | ||||
| 	if err != nil { | ||||
| 		return "", "", err | ||||
| 	} | ||||
| @@ -133,7 +136,7 @@ func (m *MongoDB) CreateUser(statements dbplugin.Statements, usernameConfig dbpl | ||||
| 		if err := m.ConnectionProducer.Close(); err != nil { | ||||
| 			return "", "", errwrap.Wrapf("error closing EOF'd mongo connection: {{err}}", err) | ||||
| 		} | ||||
| 		session, err := m.getConnection() | ||||
| 		session, err := m.getConnection(ctx) | ||||
| 		if err != nil { | ||||
| 			return "", "", err | ||||
| 		} | ||||
| @@ -149,15 +152,15 @@ func (m *MongoDB) CreateUser(statements dbplugin.Statements, usernameConfig dbpl | ||||
| } | ||||
|  | ||||
| // RenewUser is not supported on MongoDB, so this is a no-op. | ||||
| func (m *MongoDB) RenewUser(statements dbplugin.Statements, username string, expiration time.Time) error { | ||||
| func (m *MongoDB) RenewUser(ctx context.Context, statements dbplugin.Statements, username string, expiration time.Time) error { | ||||
| 	// NOOP | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // RevokeUser drops the specified user from the authentication databse. If none is provided | ||||
| // in the revocation statement, the default "admin" authentication database will be assumed. | ||||
| func (m *MongoDB) RevokeUser(statements dbplugin.Statements, username string) error { | ||||
| 	session, err := m.getConnection() | ||||
| func (m *MongoDB) RevokeUser(ctx context.Context, statements dbplugin.Statements, username string) error { | ||||
| 	session, err := m.getConnection(ctx) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -188,7 +191,7 @@ func (m *MongoDB) RevokeUser(statements dbplugin.Statements, username string) er | ||||
| 		if err := m.ConnectionProducer.Close(); err != nil { | ||||
| 			return errwrap.Wrapf("error closing EOF'd mongo connection: {{err}}", err) | ||||
| 		} | ||||
| 		session, err := m.getConnection() | ||||
| 		session, err := m.getConnection(ctx) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Brian Kassouf
					Brian Kassouf