mirror of
https://github.com/20kaushik02/spotify-manager.git
synced 2025-12-06 09:24:07 +00:00
been a while
This commit is contained in:
parent
d4a6424fd0
commit
3f4bc3b8e9
1
.gitignore
vendored
1
.gitignore
vendored
@ -70,6 +70,7 @@ typings/
|
|||||||
|
|
||||||
# dotenv environment variables file
|
# dotenv environment variables file
|
||||||
.env
|
.env
|
||||||
|
.env.development
|
||||||
.env.test
|
.env.test
|
||||||
|
|
||||||
# parcel-bundler cache (https://parceljs.org/)
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
|
|||||||
@ -65,13 +65,18 @@ const callback = async (req, res) => {
|
|||||||
const response = await authInstance.post('/api/token', authPayload);
|
const response = await authInstance.post('/api/token', authPayload);
|
||||||
|
|
||||||
if (response.status === 200) {
|
if (response.status === 200) {
|
||||||
|
logger.info('New login.');
|
||||||
req.session.accessToken = response.data.access_token;
|
req.session.accessToken = response.data.access_token;
|
||||||
req.session.refreshToken = response.data.refresh_token;
|
req.session.refreshToken = response.data.refresh_token;
|
||||||
req.session.cookie.maxAge = response.data.expires_in * 1000;
|
req.session.cookie.maxAge = response.data.expires_in * 1000;
|
||||||
|
|
||||||
req.session.save((err) => { if (err) throw err; });
|
req.session.save((err) => {
|
||||||
|
if (err) {
|
||||||
|
logger.error("redis session save error", { sessionError: err })
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
logger.info('New login.')
|
|
||||||
return res.status(200).send({
|
return res.status(200).send({
|
||||||
message: "Login successful",
|
message: "Login successful",
|
||||||
});
|
});
|
||||||
|
|||||||
@ -10,6 +10,8 @@ const { axiosInstance } = require('../axios');
|
|||||||
*/
|
*/
|
||||||
const getUserPlaylists = async (req, res) => {
|
const getUserPlaylists = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
|
let playlists = {};
|
||||||
|
|
||||||
// get first 50
|
// get first 50
|
||||||
const response = await axiosInstance.get(
|
const response = await axiosInstance.get(
|
||||||
"/me/playlists",
|
"/me/playlists",
|
||||||
@ -24,8 +26,6 @@ const getUserPlaylists = async (req, res) => {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
let playlists = {};
|
|
||||||
|
|
||||||
playlists.items = response.data.items.map((playlist) => {
|
playlists.items = response.data.items.map((playlist) => {
|
||||||
return {
|
return {
|
||||||
name: playlist.name,
|
name: playlist.name,
|
||||||
@ -42,10 +42,10 @@ const getUserPlaylists = async (req, res) => {
|
|||||||
playlists.total = response.data.total;
|
playlists.total = response.data.total;
|
||||||
playlists.next = response.data.next;
|
playlists.next = response.data.next;
|
||||||
|
|
||||||
// keep getting batches of 50 more till exhausted
|
// keep getting batches of 50 till exhausted
|
||||||
while (playlists.next) {
|
while (playlists.next) {
|
||||||
const nextResponse = await axiosInstance.get(
|
const nextResponse = await axiosInstance.get(
|
||||||
playlists.next, // absolute URL which has params
|
playlists.next, // absolute URL from previous response which has offset and limit params
|
||||||
{
|
{
|
||||||
headers: {
|
headers: {
|
||||||
...req.authHeader
|
...req.authHeader
|
||||||
|
|||||||
16
index.js
16
index.js
@ -5,7 +5,7 @@ const cors = require('cors');
|
|||||||
const cookieParser = require('cookie-parser');
|
const cookieParser = require('cookie-parser');
|
||||||
const helmet = require("helmet");
|
const helmet = require("helmet");
|
||||||
const redis = require('redis');
|
const redis = require('redis');
|
||||||
const connectRedis = require('connect-redis');
|
const RedisStore = require("connect-redis").default;
|
||||||
const logger = require("./utils/logger")(module);
|
const logger = require("./utils/logger")(module);
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
@ -13,14 +13,10 @@ const app = express();
|
|||||||
// Enable this if you run behind a proxy (e.g. nginx)
|
// Enable this if you run behind a proxy (e.g. nginx)
|
||||||
app.set('trust proxy', 1);
|
app.set('trust proxy', 1);
|
||||||
|
|
||||||
const RedisStore = connectRedis(session);
|
|
||||||
|
|
||||||
// Configure Redis client
|
// Configure Redis client
|
||||||
const redisClient = redis.createClient({
|
const redisClient = redis.createClient({
|
||||||
// host: process.env.NODE_ENV === 'development'? 'localhost' : process.env.LIVE_URL,
|
host: process.env.NODE_ENV === 'development' ? 'localhost' : process.env.LIVE_URL,
|
||||||
host: 'localhost',
|
|
||||||
port: 6379,
|
port: 6379,
|
||||||
legacyMode: true,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
redisClient.connect()
|
redisClient.connect()
|
||||||
@ -31,9 +27,11 @@ redisClient.connect()
|
|||||||
logger.error("Redis connection error", { error });
|
logger.error("Redis connection error", { error });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const redisStore = new RedisStore({ client: redisClient });
|
||||||
|
|
||||||
// Configure session middleware
|
// Configure session middleware
|
||||||
app.use(session({
|
app.use(session({
|
||||||
store: new RedisStore({ client: redisClient }),
|
store: redisStore,
|
||||||
secret: process.env.SESSION_SECRET,
|
secret: process.env.SESSION_SECRET,
|
||||||
resave: false,
|
resave: false,
|
||||||
saveUninitialized: false,
|
saveUninitialized: false,
|
||||||
@ -59,7 +57,7 @@ app.use(express.json());
|
|||||||
app.use(express.urlencoded({ extended: true }));
|
app.use(express.urlencoded({ extended: true }));
|
||||||
|
|
||||||
// Static
|
// Static
|
||||||
app.use(express.static(__dirname + '/public'));
|
app.use(express.static(__dirname + '/static'));
|
||||||
|
|
||||||
// Routes
|
// Routes
|
||||||
app.use("/api/auth/", require("./routes/auth"));
|
app.use("/api/auth/", require("./routes/auth"));
|
||||||
@ -75,5 +73,5 @@ app.use((_req, res) => {
|
|||||||
const port = process.env.PORT || 3000;
|
const port = process.env.PORT || 3000;
|
||||||
|
|
||||||
app.listen(port, () => {
|
app.listen(port, () => {
|
||||||
console.log(`App Listening on port ${port}`);
|
logger.info(`App Listening on port ${port}`);
|
||||||
});
|
});
|
||||||
|
|||||||
824
package-lock.json
generated
824
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
27
package.json
27
package.json
@ -1,37 +1,38 @@
|
|||||||
{
|
{
|
||||||
"name": "spotify-manager",
|
"name": "spotify-manager",
|
||||||
"version": "1.0.0",
|
"version": "0",
|
||||||
"description": "Personal Spotify playlist manager",
|
"description": "Personal Spotify playlist manager",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node index.js",
|
"start": "node index.js",
|
||||||
"dev": "SET NODE_ENV=development& nodemon index.js"
|
"dev": "cross-env NODE_ENV=development nodemon index.js"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git+https://github.com/20kaushik02/spotify-manager.git"
|
"url": "git+https://github.com/20kaushik02/spotify-manager.git"
|
||||||
},
|
},
|
||||||
"author": "",
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"author": "Kaushik Ravishankar <rknarayan02@gmail.com>",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/20kaushik02/spotify-manager/issues"
|
"url": "https://github.com/20kaushik02/spotify-manager/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/20kaushik02/spotify-manager#readme",
|
"homepage": "https://github.com/20kaushik02/spotify-manager#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.27.2",
|
"axios": "^1.5.0",
|
||||||
"connect-redis": "^6.1.3",
|
"connect-redis": "^7.1.0",
|
||||||
"cookie-parser": "^1.4.6",
|
"cookie-parser": "^1.4.6",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"dotenv-flow": "^3.2.0",
|
"dotenv-flow": "^3.3.0",
|
||||||
"express": "^4.18.1",
|
"express": "^4.18.2",
|
||||||
"express-session": "^1.17.3",
|
"express-session": "^1.17.3",
|
||||||
"express-validator": "^6.14.2",
|
"express-validator": "^7.0.1",
|
||||||
"helmet": "^5.1.0",
|
"helmet": "^7.0.0",
|
||||||
"redis": "^4.3.0",
|
"redis": "^4.6.10",
|
||||||
"winston": "^3.8.1"
|
"winston": "^3.10.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/express": "^4.17.13",
|
"@types/express": "^4.17.18",
|
||||||
"nodemon": "^2.0.19"
|
"cross-env": "^7.0.3",
|
||||||
|
"nodemon": "^3.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,6 +50,7 @@ const logger = (callingModule) => {
|
|||||||
transports: [
|
transports: [
|
||||||
process.env.NODE_ENV !== 'production' ?
|
process.env.NODE_ENV !== 'production' ?
|
||||||
new transports.Console() :
|
new transports.Console() :
|
||||||
|
new transports.Console(),
|
||||||
new transports.File({ filename: __dirname + '/../logs/common.log' }),
|
new transports.File({ filename: __dirname + '/../logs/common.log' }),
|
||||||
new transports.File({ filename: __dirname + '/../logs/error.log', level: 'error' }),
|
new transports.File({ filename: __dirname + '/../logs/error.log', level: 'error' }),
|
||||||
]
|
]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user