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');
});