Ejemplo 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);
        }
Ejemplo n.º 2
0
 public virtual async Task HandleError(PgErrorException e, PgTransaction transaction, MessageBuilder messageBuilder, PipeWriter writer, CancellationToken token)
 {
     // Should assume none of the members are properly initialized
     await writer.WriteAsync(messageBuilder.ErrorResponse(
                                 PgSeverity.Error,
                                 e.ErrorCode,
                                 e.Message,
                                 e.ToString()), token);
 }