been a while

This commit is contained in:
Kaushik Narayan R 2023-09-24 19:27:04 -07:00
parent d4a6424fd0
commit 3f4bc3b8e9
7 changed files with 565 additions and 321 deletions

1
.gitignore vendored
View File

@ -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/)

View File

@ -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",
}); });

View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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"
} }
} }

View File

@ -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' }),
] ]