@@ -2,7 +2,6 @@ import path from 'path';
2
2
import express from 'express' ;
3
3
import cookie from 'cookie' ;
4
4
import cookieParser from 'cookie-parser' ;
5
- import url from 'url' ;
6
5
import cors from 'cors' ;
7
6
import { graphqlExpress , graphiqlExpress } from 'graphql-server-express' ;
8
7
import OpticsAgent from 'optics-agent' ;
@@ -27,7 +26,6 @@ import queryMap from '../extracted_queries.json';
27
26
import config from './config' ;
28
27
29
28
const SUBSCRIPTIONS_PATH = '/subscriptions' ;
30
- let wsSessionUser = null ;
31
29
32
30
// Arguments usually come from env vars
33
31
export function run ( {
@@ -66,7 +64,7 @@ export function run({
66
64
} ,
67
65
) ;
68
66
69
- var sessionStore = setUpGitHubLogin ( app ) ;
67
+ const sessionStore = setUpGitHubLogin ( app ) ;
70
68
app . use ( cookieParser ( 'your secret' ) ) ;
71
69
72
70
if ( OPTICS_API_KEY ) {
@@ -154,54 +152,86 @@ export function run({
154
152
schema,
155
153
executor : graphqlExecutor ,
156
154
155
+ /*
157
156
onConnect: (msg, connectionContext) => {
158
157
const socket = connectionContext.socket;
159
158
160
159
// We get req.user from passport-github with some pretty oddly named fields,
161
160
// let's convert that to the fields in our schema, which match the GitHub
162
161
// API field names.
163
- /**/
164
162
if (socket.upgradeReq) {
165
- var location = url . parse ( socket . upgradeReq . url , true ) ;
166
- //get sessionID
167
- var cookies = cookie . parse ( socket . upgradeReq . headers . cookie ) ;
168
- var sessionID = cookieParser . signedCookie ( cookies [ "connect.sid" ] , config . sessionStoreSecret ) ;
169
- //get the session object
170
- sessionStore . get ( sessionID , function ( err , session ) {
171
- const sessionUser = session . passport . user ;
172
- wsSessionUser = {
173
- login : sessionUser . username ,
174
- html_url : sessionUser . profileUrl ,
175
- avatar_url : sessionUser . photos [ 0 ] . value ,
176
- } ;
177
-
178
- } ) ;
179
- } ;
163
+ // get sessionID
164
+
165
+ const cookies = cookie.parse(socket.upgradeReq.headers.cookie);
166
+ const sessionID = cookieParser.signedCookie(cookies['connect.sid'],
167
+ config.sessionStoreSecret);
168
+ // get the session object
169
+ sessionStore.get(sessionID, (err, session) => {
170
+ if (session && session.passport && session.passport.user) {
171
+ const sessionUser = session.passport.user;
172
+ wsSessionUser = {
173
+ login: sessionUser.username,
174
+ html_url: sessionUser.profileUrl,
175
+ avatar_url: sessionUser.photos[0].value,
176
+ };
177
+ }
178
+ });
179
+ }
180
180
},
181
+ */
181
182
182
183
// the onSubscribe function is called for every new subscription
183
184
// and we use it to set the GraphQL context for this subscription
184
185
onRequest : ( msg , params , socket ) => {
185
- const gitHubConnector = new GitHubConnector ( {
186
- clientId : GITHUB_CLIENT_ID ,
187
- clientSecret : GITHUB_CLIENT_SECRET ,
188
- } ) ;
189
-
190
- let opticsContext ;
191
- if ( OPTICS_API_KEY ) {
192
- opticsContext = OpticsAgent . context ( req ) ;
193
- }
194
-
195
- return Object . assign ( { } , params , {
196
- context : {
197
- user : wsSessionUser ,
198
- Repositories : new Repositories ( { connector : gitHubConnector } ) ,
199
- Users : new Users ( { connector : gitHubConnector } ) ,
200
- Entries : new Entries ( ) ,
201
- Comments : new Comments ( ) ,
202
- opticsContext,
203
- } ,
186
+ return new Promise ( ( resolve ) => {
187
+ const gitHubConnector = new GitHubConnector ( {
188
+ clientId : GITHUB_CLIENT_ID ,
189
+ clientSecret : GITHUB_CLIENT_SECRET ,
190
+ } ) ;
191
+
192
+ let opticsContext ;
193
+ if ( OPTICS_API_KEY ) {
194
+ opticsContext = OpticsAgent . context ( socket . upgradeReq ) ;
195
+ }
196
+
197
+ let wsSessionUser = null ;
198
+ if ( socket . upgradeReq ) {
199
+ // get sessionID
200
+ const cookies = cookie . parse ( socket . upgradeReq . headers . cookie ) ;
201
+ const sessionID = cookieParser . signedCookie ( cookies [ 'connect.sid' ] , config . sessionStoreSecret ) ;
202
+ // get the session object
203
+ sessionStore . get ( sessionID , ( err , session ) => {
204
+ if ( session && session . passport && session . passport . user ) {
205
+ const sessionUser = session . passport . user ;
206
+ wsSessionUser = {
207
+ login : sessionUser . username ,
208
+ html_url : sessionUser . profileUrl ,
209
+ avatar_url : sessionUser . photos [ 0 ] . value ,
210
+ } ;
211
+ resolve ( Object . assign ( { } , params , {
212
+ context : {
213
+ user : wsSessionUser ,
214
+ Repositories : new Repositories ( { connector : gitHubConnector } ) ,
215
+ Users : new Users ( { connector : gitHubConnector } ) ,
216
+ Entries : new Entries ( ) ,
217
+ Comments : new Comments ( ) ,
218
+ opticsContext,
219
+ } ,
220
+ } ) ) ;
221
+ } else {
222
+ resolve ( resolve ( Object . assign ( { } , params , {
223
+ context : {
224
+ Repositories : new Repositories ( { connector : gitHubConnector } ) ,
225
+ Users : new Users ( { connector : gitHubConnector } ) ,
226
+ Entries : new Entries ( ) ,
227
+ Comments : new Comments ( ) ,
228
+ opticsContext,
229
+ } ,
230
+ } ) ) ) ;
231
+ }
204
232
} ) ;
233
+ }
234
+ } ) ;
205
235
} ,
206
236
} ,
207
237
{
0 commit comments