-
Notifications
You must be signed in to change notification settings - Fork 19
/
controllers.go
36 lines (28 loc) · 989 Bytes
/
controllers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package graphql
import (
goctx "context"
"net/http"
"github.com/jerbob92/hoppscotch-backend/api/controllers/graphql/context"
"github.com/gin-gonic/gin"
"github.com/graph-gophers/graphql-transport-ws/graphqlws"
)
func AttachControllers(r *gin.RouterGroup) error {
r.Any("", graphqlRequest())
r.Any("ws", graphqlRequest())
return nil
}
type contextGenerator struct {
}
func (t contextGenerator) BuildContext(ctx goctx.Context, r *http.Request) (goctx.Context, error) {
c := r.Context().Value("ginctx").(*gin.Context)
reqC := context.GetContext(c)
reqC.DisableResponses = true
return goctx.WithValue(ctx, "graphqlC", reqC), nil
}
func graphqlRequest() gin.HandlerFunc {
graphQLHandler := graphqlws.NewHandlerFunc(Handler.Schema, Handler, graphqlws.WithContextGenerator(&contextGenerator{}))
return func(c *gin.Context) {
clonedRequest := c.Request.WithContext(goctx.WithValue(c.Request.Context(), "ginctx", c))
graphQLHandler.ServeHTTP(c.Writer, clonedRequest)
}
}