~bigbes/core-go

862728a4970637e4466ac405d6bd3a99cb66cb4e — Drew DeVault 9 months ago 0936891
server: add error presenter to make context cancellation semantic
2 files changed, 11 insertions(+), 0 deletions(-)

M errors/errors.go
M server/server.go
M errors/errors.go => errors/errors.go +2 -0
@@ 37,6 37,7 @@ var (
	Unsupported   ErrorCode = "ERR_UNSUPPORTED"
	Unauthorized  ErrorCode = "ERR_UNAUTHORIZED"
	InternalError ErrorCode = "ERR_INTERNAL"
	Timeout       ErrorCode = "ERR_TIMEOUT"
)

// Error codes as Go errors


@@ 46,4 47,5 @@ var (
	ErrUnsupported   = New(Unsupported, "Not supported")
	ErrUnauthorized  = New(Unauthorized, "Unauthorized")
	ErrInternalError = New(InternalError, "Internal server error")
	ErrTimeout       = New(Timeout, "Operation timed out")
)

M server/server.go => server/server.go +9 -0
@@ 5,6 5,7 @@ import (
	"database/sql"
	"encoding/base64"
	"encoding/json"
	"errors"
	"fmt"
	"log"
	"net"


@@ 33,12 34,14 @@ import (
	"github.com/prometheus/client_golang/prometheus/promauto"
	"github.com/prometheus/client_golang/prometheus/promhttp"
	"github.com/vaughan0/go-ini"
	"github.com/vektah/gqlparser/v2/gqlerror"

	"git.sr.ht/~sircmpwn/core-go/auth"
	"git.sr.ht/~sircmpwn/core-go/config"
	"git.sr.ht/~sircmpwn/core-go/crypto"
	"git.sr.ht/~sircmpwn/core-go/database"
	"git.sr.ht/~sircmpwn/core-go/email"
	coreerrors "git.sr.ht/~sircmpwn/core-go/errors"
	"git.sr.ht/~sircmpwn/core-go/feature"
	"git.sr.ht/~sircmpwn/core-go/redis"
)


@@ 146,6 149,12 @@ func (server *Server) WithSchema(
		MaxMemory:     33554432,   // 32 MiB (up to this handled in memory)
		MaxUploadSize: 1073741824, // 1 GiB (TODO: configurable?)
	})
	srv.SetErrorPresenter(func(ctx context.Context, err error) *gqlerror.Error {
		if errors.Is(err, context.DeadlineExceeded) {
			return coreerrors.ErrTimeout
		}
		return graphql.DefaultErrorPresenter(ctx, err)
	})

	if debug {
		srv.AroundOperations(func(ctx context.Context, next graphql.OperationHandler) graphql.ResponseHandler {