Esempio n. 1
0
        protected override async Task HandleMessage(PgTransaction transaction, MessageBuilder messageBuilder, PipeWriter writer, CancellationToken token)
        {
            var serverStore  = transaction.DocumentDatabase.ServerStore;
            var databaseName = transaction.DocumentDatabase.Name;

            DatabaseRecord databaseRecord;

            using (serverStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context))
                using (context.OpenReadTransaction())
                    databaseRecord = serverStore.Cluster.ReadDatabase(context, databaseName, out long index);

            var users = databaseRecord?.Integrations?.PostgreSql?.Authentication?.Users;

            var user = users?.SingleOrDefault(x => x.Username.Equals(transaction.Username, StringComparison.OrdinalIgnoreCase));

            if (user == null)
            {
                await writer.WriteAsync(messageBuilder.ErrorResponse(ErrorSeverity, InvalidRoleSpecification, RoleDoesNotExistErrorMessage(transaction.Username)), token);

                return;
            }

            if (Password.Equals(user.Password) == false)
            {
                await writer.WriteAsync(messageBuilder.ErrorResponse(ErrorSeverity, InvalidPasswordErrorCode, PasswordAuthFailedErrorMessage(transaction.Username)), token);

                return;
            }

            await writer.WriteAsync(messageBuilder.AuthenticationOk(), token);
        }