@@ -7,10 +7,16 @@ import (
7
7
log "github.com/sirupsen/logrus"
8
8
)
9
9
10
+ // HandlerConfig stores the configuration of a GraphQL WebSocket handler.
11
+ type HandlerConfig struct {
12
+ SubscriptionManager SubscriptionManager
13
+ UserFromAuthToken UserFromAuthTokenFunc
14
+ }
15
+
10
16
// NewHandler creates a WebSocket handler for GraphQL WebSocket connections.
11
17
// This handler takes a SubscriptionManager and adds/removes subscriptions
12
18
// as they are started/stopped by the client.
13
- func NewHandler (subscriptionManager SubscriptionManager ) http.Handler {
19
+ func NewHandler (config HandlerConfig ) http.Handler {
14
20
// Create a WebSocket upgrader that requires clients to implement
15
21
// the "graphql-ws" protocol
16
22
var upgrader = websocket.Upgrader {
@@ -19,6 +25,7 @@ func NewHandler(subscriptionManager SubscriptionManager) http.Handler {
19
25
}
20
26
21
27
logger := NewLogger ("handler" )
28
+ subscriptionManager := config .SubscriptionManager
22
29
23
30
// Create a map (used like a set) to manage client connections
24
31
var connections = make (map [Connection ]bool )
@@ -42,40 +49,46 @@ func NewHandler(subscriptionManager SubscriptionManager) http.Handler {
42
49
}
43
50
44
51
// Establish a GraphQL WebSocket connection
45
- conn := NewConnection (ws , & ConnectionEventHandlers {
46
- Close : func (conn Connection ) {
47
- logger .WithFields (log.Fields {
48
- "conn" : conn .ID (),
49
- }).Debug ("Closing connection" )
52
+ conn := NewConnection (ws , ConnectionConfig {
53
+ UserFromAuthToken : config .UserFromAuthToken ,
54
+ EventHandlers : ConnectionEventHandlers {
55
+ Close : func (conn Connection ) {
56
+ logger .WithFields (log.Fields {
57
+ "conn" : conn .ID (),
58
+ "user" : conn .User (),
59
+ }).Debug ("Closing connection" )
50
60
51
- subscriptionManager .RemoveSubscriptions (conn )
61
+ subscriptionManager .RemoveSubscriptions (conn )
52
62
53
- delete (connections , conn )
54
- },
55
- StartOperation : func (
56
- conn Connection ,
57
- opID string ,
58
- data * StartMessagePayload ,
59
- ) []error {
60
- logger .WithFields (log.Fields {
61
- "conn" : conn .ID (),
62
- "op" : opID ,
63
- }).Debug ("Start operation" )
63
+ delete (connections , conn )
64
+ },
65
+ StartOperation : func (
66
+ conn Connection ,
67
+ opID string ,
68
+ data * StartMessagePayload ,
69
+ ) []error {
70
+ logger .WithFields (log.Fields {
71
+ "conn" : conn .ID (),
72
+ "op" : opID ,
73
+ "user" : conn .User (),
74
+ }).Debug ("Start operation" )
64
75
65
- return subscriptionManager .AddSubscription (conn , & Subscription {
66
- ID : opID ,
67
- Query : data .Query ,
68
- Variables : data .Variables ,
69
- OperationName : data .OperationName ,
70
- SendData : func (subscription * Subscription , data * DataMessagePayload ) {
71
- conn .SendData (opID , data )
72
- },
73
- })
74
- },
75
- StopOperation : func (conn Connection , opID string ) {
76
- subscriptionManager .RemoveSubscription (conn , & Subscription {
77
- ID : opID ,
78
- })
76
+ return subscriptionManager .AddSubscription (conn , & Subscription {
77
+ ID : opID ,
78
+ Query : data .Query ,
79
+ Variables : data .Variables ,
80
+ OperationName : data .OperationName ,
81
+ Connection : conn ,
82
+ SendData : func (subscription * Subscription , data * DataMessagePayload ) {
83
+ conn .SendData (opID , data )
84
+ },
85
+ })
86
+ },
87
+ StopOperation : func (conn Connection , opID string ) {
88
+ subscriptionManager .RemoveSubscription (conn , & Subscription {
89
+ ID : opID ,
90
+ })
91
+ },
79
92
},
80
93
})
81
94
connections [conn ] = true
0 commit comments