Skip to content

Instantly share code, notes, and snippets.

@ycyvonne
Last active November 8, 2018 18:19
Show Gist options
  • Save ycyvonne/dc1d4c748d3a364c55ead429343fd8e7 to your computer and use it in GitHub Desktop.
Save ycyvonne/dc1d4c748d3a364c55ead429343fd8e7 to your computer and use it in GitHub Desktop.
// routing
'use strict';
const express = require('express');
const http = require('http');
const app = express();
const server = http.createServer(app);
const cors = require('cors');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const config = require('./config');
const sessions = require('./sessions');
app.use(cors({
credentials: true,
origin: true
}));
app.use(bodyParser.json());
app.use(cookieParser());
// Connect to database
require('./models');
// Set up router endpoints
const userRouter = require('./routes/user');
app.use('/user', userRouter);
server.listen(config.server.port, () => {
console.log('Listening on port ' + config.server.port);
});
const sessions = {};
/**
* returns a random string ID
* */
function generateID() {
return '' + Math.random();
}
/**
* return the session state for the ID
* */
function lookupSession(sessionId) {
return sessions[sessionId];
}
function setSessionStateById(id, state) {
sessions[id] = state;
}
module.exports = {
generateID,
lookupSession,
setSessionStateById
}
function getAccessToken(code) {
var authOptions = {/**/};
return new Promise(function(resolve, reject) {
request.post(authOptions, function(error, response, body) {
if (!error && response.statusCode === 200) {
var access_token = body.access_token,
refresh_token = body.refresh_token;
resolve({
access_token: access_token,
refresh_token: refresh_token
});
}
else {
reject('invalid_token');
}
});
});
}
function getUserInfo(access_token) {
var options = {/**/};
// use the access token to access the Spotify Web API
return new Promise(function(resolve, reject) {
request.get(options, function(error, response, body) {
resolve(body);
});
});
}
module.exports = {
getAccessToken,
getUserInfo
};
'use strict';
const express = require('express');
let router = express.Router();
const userController = require('../controllers/UserController');
router.get('/', userController.index);
router.get('/name', userController.getName);
router.post('/token', userController.getSpotifyUserData);
module.exports = router;
const SpotifyAdapter = require('../adapters/SpotifyAdapter');
const sessions = require('../sessions');
function getSpotifyUserData(req, res) {
var code = req.body.code;
var accessTokenPromise;
const sessionId = req.cookies.session;
// get accessToken from session
if (sessionId) {
accessTokenPromise = new Promise(function(resolve, reject) {
var lookup = lookupSession(sessionId);
return lookup.access_token;
});
}
// get access token from spotify
else {
accessTokenPromise = SpotifyAdapter
.getAccessToken(code)
.then(function(tokens) {
const id = sessions.generateID();
sessions.setSessionStateById(id, tokens);
res.cookie('session', id);
return tokens.access_token;
});
}
accessTokenPromise
.then(SpotifyAdapter.getUserInfo)
.then(function(spotifyData) {
res.json(spotifyData);
})
.catch(function(error) {
res.json({'error': error})
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment