ios3
5/31/2018 - 1:17 PM

gistfile1.txt

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

var socketioJwt   = require("socketio-jwt");

var jwtAuth = require('socketio-jwt-auth');

var admin = require('firebase-admin');

var serviceAccount = require('./admin.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  //databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});



app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

// 
// io.use(socketioJwt.authorize({
//   secret: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC6HRvPqLxH/iFo\nLCLkZh6TF40j4n0fI7J7crlXySjEROLNKhTHwK6pDeP3PkR2wmXMt+03f25mkI0A\n1M35w3x1RcLCGpi2J6WpYslv8skFbIgHGI27+wL3sCauqlo25aZo6OWgkVREaJ62\nuQ5k8WE0LgiuDEzPyqLY2FHPnC+aEaE27vKaVPMETb3SlL++os3QpRn7Xj4lS9+b\nlWDGLWxenQMH8gjve3DC4Hoq0RNeeRoloO9ZgNw/KRULK7e8vZFE1DTkbD3IIiSm\niVsLOdYUGpGe4vO/ptHn6jLYsy7bkjZCngOZ6uuWTaMN+j/RMzU8lZi19QTpSTOR\nUguKr3T3AgMBAAECggEAALLCLi/yy6sFCwA1GTnxr31DI2by5HhKRu821l3frdX0\n1eKcSXEzgF9eG/WBsfj8YqVAmgowteiyEIz3lJP9VrSAPWIhG/MF4NIkiWdGmOJP\n/jwaPEya/UqiOjNPrO0KHk8/MzqXStjk0CL4qYp+K2yb25TcdZUtPdZG5ZUC+UUJ\nFnwlpPYZjUCUkNwHtTqqBnEi92JYVyVItpjRcwi6ZKOsuJgV9i3z6xs47RPkCI/j\n+G7PinbE+UIDtRRBJTbxzXV1LQ4Yvkogeh4ucyWEUyczO3nWJqDhZCc2TD2RzDe7\nLdTgVN06MMAav9R8tKhc0QGKd1iboSXGhRsdHwLm6QKBgQD8+DS2iRliAf5sUvmg\nY70QA2P3pZ7Ijjjlhtij2kEqXqgmJM0D40596lH3RKg7qZIzgbQN44lC+zEYI+ym\nXmnEOs/+ZdkIK7wba/dX/VHl19VirMZzlNxQDQrPw0nyxsWRz9nDcK4EV7Oj6Kby\nX8AcUkJXi+Jhy+bFdtbjO6WvmQKBgQC8V99krTJQhAr5PRMy3dog2TnBGX1AqWvQ\nbYbdBGt7u69XuXw+PBupPvDNSMWQDn2UwWNanL31EJO1MKMfagwOXPIU75gI9feA\nuYjHjkqMoy8s1v9+nwEKv9ktauhxGhmSR/6yTZv6XLBFKf5Lk/jI2bYpvtl2fyQ2\nFtY1FOJjDwKBgQDYCJ/7wtmKeWlt2O6VqperNToKI8aWP98XJTGdvKYqKOwwpvzu\ndRBzN8kIAfop+YaBtiKuOcLfEOW8V/Ghor9wdUlrWE8gSzk5sdppqkxmnQv+WM6h\npl7/fiPdikl8q4POIlM2NORnkP443Fa2Zk8J4LYHTc7m9dr+h568MBQvAQKBgQCs\nGO87ozbSc5VDYRdl52olkdhAJfZZW3X0oeAVnLBKA5mY4xgwFeSApc6LBe/gTh1a\nC8upRIgeoeMWMTccwV360dsyXiviJD7gFKhzEAX2tDWrF1mmbcwZ8muUIJf8oQi0\nrayBaIEaKA+5Y0HF9ZPik2zsgENdD5gbBIr/PfIO6QKBgFhu9RjjTOFQM0AOq9b5\nyXplGYbLSAwMy5/mNjyS/g8M71r1yyACwhYXFRIllkdvbvMua7y10yqsI2yYUHOm\nDkfRBFGkdoi66zEbAuiciLW652jI6zGktikCLMuklMmI4APvGaKDbBZXDBl1dRZU\ne7rlBTiC26zioa1W0NWN9+Zf\n-----END PRIVATE KEY-----\n",
//   handshake: true
// }));

// io.use(jwtAuth.authenticate({
//   secret: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC6HRvPqLxH/iFo\nLCLkZh6TF40j4n0fI7J7crlXySjEROLNKhTHwK6pDeP3PkR2wmXMt+03f25mkI0A\n1M35w3x1RcLCGpi2J6WpYslv8skFbIgHGI27+wL3sCauqlo25aZo6OWgkVREaJ62\nuQ5k8WE0LgiuDEzPyqLY2FHPnC+aEaE27vKaVPMETb3SlL++os3QpRn7Xj4lS9+b\nlWDGLWxenQMH8gjve3DC4Hoq0RNeeRoloO9ZgNw/KRULK7e8vZFE1DTkbD3IIiSm\niVsLOdYUGpGe4vO/ptHn6jLYsy7bkjZCngOZ6uuWTaMN+j/RMzU8lZi19QTpSTOR\nUguKr3T3AgMBAAECggEAALLCLi/yy6sFCwA1GTnxr31DI2by5HhKRu821l3frdX0\n1eKcSXEzgF9eG/WBsfj8YqVAmgowteiyEIz3lJP9VrSAPWIhG/MF4NIkiWdGmOJP\n/jwaPEya/UqiOjNPrO0KHk8/MzqXStjk0CL4qYp+K2yb25TcdZUtPdZG5ZUC+UUJ\nFnwlpPYZjUCUkNwHtTqqBnEi92JYVyVItpjRcwi6ZKOsuJgV9i3z6xs47RPkCI/j\n+G7PinbE+UIDtRRBJTbxzXV1LQ4Yvkogeh4ucyWEUyczO3nWJqDhZCc2TD2RzDe7\nLdTgVN06MMAav9R8tKhc0QGKd1iboSXGhRsdHwLm6QKBgQD8+DS2iRliAf5sUvmg\nY70QA2P3pZ7Ijjjlhtij2kEqXqgmJM0D40596lH3RKg7qZIzgbQN44lC+zEYI+ym\nXmnEOs/+ZdkIK7wba/dX/VHl19VirMZzlNxQDQrPw0nyxsWRz9nDcK4EV7Oj6Kby\nX8AcUkJXi+Jhy+bFdtbjO6WvmQKBgQC8V99krTJQhAr5PRMy3dog2TnBGX1AqWvQ\nbYbdBGt7u69XuXw+PBupPvDNSMWQDn2UwWNanL31EJO1MKMfagwOXPIU75gI9feA\nuYjHjkqMoy8s1v9+nwEKv9ktauhxGhmSR/6yTZv6XLBFKf5Lk/jI2bYpvtl2fyQ2\nFtY1FOJjDwKBgQDYCJ/7wtmKeWlt2O6VqperNToKI8aWP98XJTGdvKYqKOwwpvzu\ndRBzN8kIAfop+YaBtiKuOcLfEOW8V/Ghor9wdUlrWE8gSzk5sdppqkxmnQv+WM6h\npl7/fiPdikl8q4POIlM2NORnkP443Fa2Zk8J4LYHTc7m9dr+h568MBQvAQKBgQCs\nGO87ozbSc5VDYRdl52olkdhAJfZZW3X0oeAVnLBKA5mY4xgwFeSApc6LBe/gTh1a\nC8upRIgeoeMWMTccwV360dsyXiviJD7gFKhzEAX2tDWrF1mmbcwZ8muUIJf8oQi0\nrayBaIEaKA+5Y0HF9ZPik2zsgENdD5gbBIr/PfIO6QKBgFhu9RjjTOFQM0AOq9b5\nyXplGYbLSAwMy5/mNjyS/g8M71r1yyACwhYXFRIllkdvbvMua7y10yqsI2yYUHOm\nDkfRBFGkdoi66zEbAuiciLW652jI6zGktikCLMuklMmI4APvGaKDbBZXDBl1dRZU\ne7rlBTiC26zioa1W0NWN9+Zf\n-----END PRIVATE KEY-----\n",    // required, used to verify the token's signature
//   algorithm: 'RS256'        // optional, default to be HS256
// }, function(payload, done) {
//   
//   	console.log(payload);
//     return done(null, null);
//   
// }));

// middleware
// io.use((socket, next) => {
//   let token = socket.handshake.query.token;
//   if (isValid(token)) {
//     return next();
//   }
//   return next(new Error('authentication error'));
// });

// middleware
io.use((socket, next) => {
  let token = socket.handshake.headers['authorization'];
  
  return admin.auth().verifyIdToken(token)
  .then(function(decodedToken) {
    var uid = decodedToken.uid;
    console.log(uid);
    return next();
  }).catch(function(error) {
  //console.log(error);
    return next(error);
  });

  
  //return next(new Error('authentication error'));
});

io.on('connection', function(socket){
  console.log('a user connected');
  socket.json.send({ your : 'data' });
  socket.on('disconnect', function(){
    console.log('user disconnected');
  });
});
    

http.listen(3000, function(){
  console.log('listening on *:3000');
});