-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
127 lines (115 loc) · 3.83 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
var express = require('express');
var request = require('request');
var cors = require('cors');
var querystring = require('querystring');
var cookieParser = require('cookie-parser');
// const { type } = require('os');
var client_id = '463fc0969d9240fe8d9a987478380b76'; // Your client id
var client_secret = 'aa0d8021beeb4fda9066b177d902c698'; // Your client secret
var redirect_uri = 'http://localhost:8888/callback';
var app = express();
var generate_state = function (length) {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < length; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
};
app.use(express.static(__dirname + '/public'))
.use(cors())
.use(cookieParser());
app.get('/login', function (req, res) {
var state = generate_state(16);
var scope = 'playlist-read-private playlist-modify-public playlist-modify-private'; // Authorizations
res.cookie("spotify_auth_state", state);
res.redirect('https://accounts.spotify.com/authorize?' +
querystring.stringify({
response_type: 'code',
client_id: client_id,
scope: scope,
redirect_uri: redirect_uri,
state: state
}));
});
app.get('/callback', function (req, res) {
var code = req.query.code || null;
var state = req.query.state || null;
var stored_state = req.cookies ? req.cookies["spotify_auth_state"] : null;
if (state === null || state !== stored_state) {
res.redirect('/token.html#' +
querystring.stringify({
error: 'state_mismatch'
}));
} else {
res.clearCookie("spotify_auth_state");
var url_object = {
url: 'https://accounts.spotify.com/api/token',
form: {
code: code,
redirect_uri: redirect_uri,
grant_type: 'authorization_code'
},
headers: {
'Authorization': 'Basic ' + (new Buffer(client_id + ':' + client_secret).toString('base64'))
},
json: true
};
request.post(url_object, function (error, response, body) {
if (!error && response.statusCode === 200) {
console.log(body)
var access_token = body.access_token,
refresh_token = body.refresh_token;
var url_object = {
url: 'https://api.spotify.com/v1/me',
headers: { 'Authorization': 'Bearer ' + access_token },
json: true
};
request.get(url_object, function (error, response, body) {
console.log(body);
});
res.redirect('/token.html#' +
querystring.stringify({
access_token: access_token,
refresh_token: refresh_token
}));
} else {
res.redirect('/token.html#' +
querystring.stringify({
error: 'invalid_token'
}));
}
});
}
});
app.get('/refresh_token', function (req, res) {
var refresh_token = req.query.refresh_token;
console.log("toto Authorization Basic : " + (new Buffer(client_id + ':' + client_secret).toString('base64')))
console.log("toto refresh_token : " + refresh_token)
var url_object = {
url: 'https://accounts.spotify.com/api/token',
headers: { 'Authorization': 'Basic ' + (new Buffer(client_id + ':' + client_secret).toString('base64')) },
form: {
grant_type: 'refresh_token',
refresh_token: refresh_token
},
json: true
};
request.post(url_object, function (error, response, body) {
if (!error && response.statusCode === 200) {
console.log(body)
var access_token = body.access_token;
res.redirect('/refresh_token.html#' +
querystring.stringify({
token: access_token
}));
} else {
res.redirect('/refresh_token.html#' +
querystring.stringify({
error: 'invalid_token'
}));
}
});
});
console.log('Listening on port 8888');
app.listen(8888);