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); }
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); }