| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | 'use strict';const 	request = require('request'),		config  = require('config'),		async 	= require('async'),		utils 	= require('../utils'),		logger 	= require('../logger'),		hooks 	= require('./hooks');module.exports = {	/**	 * Fetches a list of songs from Youtubes API	 *	 * @param session	 * @param query - the query we'll pass to youtubes api	 * @param cb	 * @return {{ status: String, data: Object }}	 */	searchYoutube: (session, query, cb) => {		const params = [			'part=snippet',			`q=${encodeURIComponent(query)}`,			`key=${config.get('apis.youtube.key')}`,			'type=video',			'maxResults=15'		].join('&');		async.waterfall([			(next) => {				request(`https://www.googleapis.com/youtube/v3/search?${params}`, next);			},			(res, body, next) => {				next(null, JSON.parse(body));			}		], (err, data) => {			if (err) {				err = utils.getError(err);				logger.error("APIS_SEARCH_YOUTUBE", `Searching youtube failed with query "${query}". "${err}"`);				return cb({status: 'failure', message: err});			}			logger.success("APIS_SEARCH_YOUTUBE", `Searching YouTube successful with query "${query}".`);			return cb({ status: 'success', data });		});	},	/**	 * Gets Spotify data	 *	 * @param session	 * @param title - the title of the song	 * @param artist - an artist for that song	 * @param cb	 */	getSpotifySongs: hooks.adminRequired((session, title, artist, cb, userId) => {		async.waterfall([			(next) => {				utils.getSongsFromSpotify(title, artist, next);			}		], (songs) => {			logger.success('APIS_GET_SPOTIFY_SONGS', `User "${userId}" got Spotify songs for title "${title}" successfully.`);			cb({status: 'success', songs: songs});		});	}),	/**	 * Joins a room	 *	 * @param session	 * @param page - the room to join	 * @param cb	 */	joinRoom: (session, page, cb) => {		if (page === 'home') {			utils.socketJoinRoom(session.socketId, page);		}		cb({});	},	/**	 * Joins an admin room	 *	 * @param session	 * @param page - the admin room to join	 * @param cb	 */	joinAdminRoom: hooks.adminRequired((session, page, cb) => {		if (page === 'queue' || page === 'songs' || page === 'stations' || page === 'reports' || page === 'news' || page === 'users' || page === 'statistics') {			utils.socketJoinRoom(session.socketId, `admin.${page}`);		}		cb({});	}),	/**	 * Returns current date	 *	 * @param session	 * @param cb	 */	ping: (session, cb) => {		cb({date: Date.now()});	}};
 |