123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- 'use strict';
- // nodejs modules
- const path = require('path'),
- fs = require('fs'),
- os = require('os'),
- events = require('events');
- // npm modules
- const config = require('config'),
- request = require('request'),
- waterfall = require('async/waterfall').
- r = require('rethinkdb');
- // custom modules
- const global = require('./global'),
- passport = global.passport,
- localStrategy = global.localStrategy,
- stations = require('./stations');
- var eventEmitter = new events.EventEmitter();
- module.exports = {
- // auth
- passport.serializeUser(function(user, cb) {
- done(null, user.id);
- });
- passport.deserializeUser(function(id, cb) {
- r.table('users').filter({id}).run(rc, (err, cursor) => {
- done(err, cursor.toArray().result);
- });
- });
- app.use(passport.initialize());
- app.use(passport.session());
- // module functions
- on: function (name, cb) {
- eventEmitter.on(name, cb);
- },
- emit: function (name, data) {
- eventEmitter.emit(name, data);
- },
- // core route handlers
- '/users/login': function (user, cb) {},
- '/users/register': function (user, cb) {
- passport.use('local-signup', new localStrategy({
- usernameField : user.email,
- passwordField : user.password,
- passReqToCallback : true
- }, (req, email, password, done) => {
- process.nextTick(() => {
- r.table('users').filter({
- email: user.email
- }).run(rc, (err, cursor) => {
- if (err) return done(err);
- else {
- cursor.toArray((err, result) => {
- if (result) {
- return done(null, false);
- } else {
- r.table('authors').insert([{
- email,
- password: crypto.createHash('md5').update(password).digest("hex")
- }]).run(connection, function(err, result) {
- if (err) throw err;
- return done(null, result);
- console.log(result);
- });
- }
- });
- }
- });
- });
- }));
- },
- '/stations': function (cb) {
- cb(stations.getStations().map(function (result) {
- return {
- id: result.getId(),
- displayName: result.getDisplayName(),
- description: result.getDescription(),
- users: result.getUsers()
- }
- }));
- },
- '/stations/join/:id': function (id, user, cb) {
- var station = stations.getStation(id);
- if (station) {
- user.stationId = id;
- this.emit('station-joined', {
- user: {
- id: user.id,
- username: user.username
- }
- });
- return cb({
- status: 'joined',
- data: {
- displayName: station.getDisplayName(),
- users: station.getUsers(),
- currentSong: station.getCurrentSong()
- }
- });
- }
- else {
- return cb({ status: 'error', message: 'Room with that ID does not exists' });
- }
- },
- '/stations/search/:query': function (query, cb) {
- var params = [
- 'part=snippet',
- `q=${encodeURIComponent(query)}`,
- `key=${config.get('apis.youtube.key')}`,
- 'type=video',
- 'maxResults=25'
- ].join('&');
- request(`https://www.googleapis.com/youtube/v3/search?${params}`, function (err, res, body) {
- if (err) {
- return cb({ status: 'error', message: 'Failed to make request' });
- }
- else {
- try {
- return cb({ status: 'success', body: JSON.parse(body) });
- }
- catch (e) {
- return cb({ status: 'error', message: 'Non JSON response' });
- }
- }
- });
- }
- };
|