// methods
        public bool Execute(IWriteBinding binding, CancellationToken cancellationToken)
        {
            using (var channelSource = binding.GetWriteChannelSource(cancellationToken))
            {
                var userExists = UserExists(channelSource, binding.Session, cancellationToken);

                var roles = new BsonArray();
                if (_databaseNamespace.DatabaseName == "admin")
                {
                    roles.Add(_readOnly ? "readAnyDatabase" : "root");
                }
                else
                {
                    roles.Add(_readOnly ? "read" : "dbOwner");
                }

                var commandName = userExists ? "updateUser" : "createUser";
                var command     = new BsonDocument
                {
                    { commandName, _username },
                    { "pwd", _passwordHash },
                    { "digestPassword", false },
                    { "roles", roles }
                };

                var operation = new WriteCommandOperation <BsonDocument>(_databaseNamespace, command, BsonDocumentSerializer.Instance, _messageEncoderSettings);
                operation.Execute(channelSource, binding.Session, cancellationToken);
            }

            return(true);
        }
        // methods
        public bool Execute(IWriteBinding binding, CancellationToken cancellationToken)
        {
            var command   = new BsonDocument("dropUser", _username);
            var operation = new WriteCommandOperation <BsonDocument>(_databaseNamespace, command, BsonDocumentSerializer.Instance, _messageEncoderSettings);

            operation.Execute(binding, cancellationToken);
            return(true);
        }
Beispiel #3
0
        private void ExecuteCommand(BsonDocument command)
        {
            var adminDatabase = new DatabaseNamespace("admin");
            var operation     = new WriteCommandOperation <BsonDocument>(
                adminDatabase,
                command,
                BsonDocumentSerializer.Instance,
                new MessageEncoderSettings());

            operation.Execute(_binding, CancellationToken.None);
        }
        private void ExecuteCommand(BsonDocument command, bool waitForConnected)
        {
            if (waitForConnected)
            {
                // server can transition to unknown state during the test, wait until server is connected
                SpinWait.SpinUntil(() => _server.Description.State == ServerState.Connected, 1000);
            }

            var adminDatabase = new DatabaseNamespace("admin");
            var operation     = new WriteCommandOperation <BsonDocument>(
                adminDatabase,
                command,
                BsonDocumentSerializer.Instance,
                new MessageEncoderSettings());

            operation.Execute(_binding, CancellationToken.None);
        }
        private TCommandResult RunWriteCommandAs <TCommandResult>(
            BsonDocument command,
            IBsonSerializer <TCommandResult> resultSerializer,
            out MongoServerInstance serverInstance)
            where TCommandResult : CommandResult
        {
            var messageEncoderSettings = GetMessageEncoderSettings();
            var operation = new WriteCommandOperation <TCommandResult>(new DatabaseNamespace(_name), command, resultSerializer, messageEncoderSettings);

            using (var binding = _server.GetWriteBinding())
                using (var connectionSource = binding.GetWriteConnectionSource())
                {
                    var endPoint = (DnsEndPoint)connectionSource.ServerDescription.EndPoint;
                    var address  = new MongoServerAddress(endPoint.Host, endPoint.Port);
                    serverInstance = _server.GetServerInstance(address);
                    return(operation.Execute(connectionSource, Timeout.InfiniteTimeSpan, CancellationToken.None));
                }
        }