mirror of
https://github.com/20kaushik02/spotify-manager.git
synced 2025-12-06 11:24:07 +00:00
tidying up redis' remains while shifting to sqlite, DRYer 500 responses
This commit is contained in:
parent
5803c997b2
commit
40cf0c2e2b
3
.gitignore
vendored
3
.gitignore
vendored
@ -104,3 +104,6 @@ dist
|
|||||||
|
|
||||||
# TernJS port file
|
# TernJS port file
|
||||||
.tern-port
|
.tern-port
|
||||||
|
|
||||||
|
# SQLite db
|
||||||
|
*.db
|
||||||
|
|||||||
@ -11,7 +11,7 @@ const __controller_func = async (req, res) => {
|
|||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('__controller_func', { error });
|
logger.error('__controller_func', { error });
|
||||||
return res.status(500).send({ message: "Server Error. Try again." });
|
return res.sendStatus(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -29,7 +29,7 @@ const login = (_req, res) => {
|
|||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('login', { error });
|
logger.error('login', { error });
|
||||||
return res.status(500).send({ message: "Server Error. Try again." });
|
return res.sendStatus(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ const callback = async (req, res) => {
|
|||||||
logger.info('New login.');
|
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 = 7776000000 // 90 days, arbitrary
|
req.session.cookie.maxAge = 7 * 24 * 60 * 60 * 1000 // 1 week
|
||||||
|
|
||||||
req.session.save((err) => {
|
req.session.save((err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
@ -87,7 +87,7 @@ const callback = async (req, res) => {
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('callback', { error });
|
logger.error('callback', { error });
|
||||||
return res.status(500).send({ message: "Server Error. Try again." });
|
return res.sendStatus(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ const refresh = async (req, res) => {
|
|||||||
if (response.status === 200) {
|
if (response.status === 200) {
|
||||||
req.session.accessToken = response.data.access_token;
|
req.session.accessToken = response.data.access_token;
|
||||||
req.session.refreshToken = response.data.refresh_token ?? req.session.refreshToken; // refresh token rotation
|
req.session.refreshToken = response.data.refresh_token ?? req.session.refreshToken; // refresh token rotation
|
||||||
req.session.cookie.maxAge = 7776000000 // 90 days, arbitrary
|
req.session.cookie.maxAge = 7 * 24 * 60 * 60 * 1000 // 1 week
|
||||||
|
|
||||||
logger.info(`Access token refreshed${(response.data.refresh_token !== null) ? ' and refresh token updated' : ''}.`);
|
logger.info(`Access token refreshed${(response.data.refresh_token !== null) ? ' and refresh token updated' : ''}.`);
|
||||||
return res.status(200).send({
|
return res.status(200).send({
|
||||||
@ -122,7 +122,7 @@ const refresh = async (req, res) => {
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('refresh', { error });
|
logger.error('refresh', { error });
|
||||||
return res.status(500).send({ message: "Server Error. Try again." });
|
return res.sendStatus(500);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ const refresh = async (req, res) => {
|
|||||||
const logout = async (req, res) => {
|
const logout = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const delSession = req.session.destroy((err) => {
|
const delSession = req.session.destroy((err) => {
|
||||||
if (Object.keys(err).length) { // err is empty obj if no error
|
if (err) {
|
||||||
logger.error("Error while logging out", { err });
|
logger.error("Error while logging out", { err });
|
||||||
return res.sendStatus(500);
|
return res.sendStatus(500);
|
||||||
} else {
|
} else {
|
||||||
@ -145,7 +145,7 @@ const logout = async (req, res) => {
|
|||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('logout', { error });
|
logger.error('logout', { error });
|
||||||
return res.status(500).send({ message: "Server Error. Try again." });
|
return res.sendStatus(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -73,7 +73,7 @@ const getUserPlaylists = async (req, res) => {
|
|||||||
return res.status(200).send(playlists);
|
return res.status(200).send(playlists);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('getUserPlaylists', { error });
|
logger.error('getUserPlaylists', { error });
|
||||||
return res.status(500).send({ message: "Server Error. Try again." });
|
return res.sendStatus(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +155,7 @@ const getPlaylistDetails = async (req, res) => {
|
|||||||
return res.status(200).send(playlist);
|
return res.status(200).send(playlist);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('getPlaylistDetails', { error });
|
logger.error('getPlaylistDetails', { error });
|
||||||
return res.status(500).send({ message: "Server Error. Try again." });
|
return res.sendStatus(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
25
index.js
25
index.js
@ -8,8 +8,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 SQLiteStore = require("connect-sqlite3")(session);
|
||||||
const RedisStore = require("connect-redis").default;
|
|
||||||
|
|
||||||
const logger = require("./utils/logger")(module);
|
const logger = require("./utils/logger")(module);
|
||||||
|
|
||||||
@ -18,26 +17,15 @@ 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', process.env.TRUST_PROXY);
|
app.set('trust proxy', process.env.TRUST_PROXY);
|
||||||
|
|
||||||
// Configure Redis client and connect
|
// Configure SQLite store file
|
||||||
const redisClient = redis.createClient({
|
const sqliteStore = new SQLiteStore({
|
||||||
host: process.env.REDIS_HOST,
|
table: "session_store",
|
||||||
port: process.env.REDIS_PORT,
|
db: "spotify-manager.db"
|
||||||
});
|
});
|
||||||
|
|
||||||
redisClient.connect()
|
|
||||||
.then(() => {
|
|
||||||
logger.info("Connected to Redis store");
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
logger.error("Redis connection error", { error });
|
|
||||||
cleanupFunc();
|
|
||||||
});
|
|
||||||
|
|
||||||
const redisStore = new RedisStore({ client: redisClient });
|
|
||||||
|
|
||||||
// Configure session middleware
|
// Configure session middleware
|
||||||
app.use(session({
|
app.use(session({
|
||||||
store: redisStore,
|
store: sqliteStore,
|
||||||
secret: process.env.SESSION_SECRET,
|
secret: process.env.SESSION_SECRET,
|
||||||
resave: false,
|
resave: false,
|
||||||
saveUninitialized: false,
|
saveUninitialized: false,
|
||||||
@ -84,7 +72,6 @@ const server = app.listen(port, () => {
|
|||||||
|
|
||||||
const cleanupFunc = (signal) => {
|
const cleanupFunc = (signal) => {
|
||||||
Promise.allSettled([
|
Promise.allSettled([
|
||||||
redisClient.disconnect,
|
|
||||||
util.promisify(server.close),
|
util.promisify(server.close),
|
||||||
]).then(() => {
|
]).then(() => {
|
||||||
if (signal)
|
if (signal)
|
||||||
|
|||||||
@ -13,9 +13,9 @@ const isAuthenticated = (req, res, next) => {
|
|||||||
next()
|
next()
|
||||||
} else {
|
} else {
|
||||||
const delSession = req.session.destroy((err) => {
|
const delSession = req.session.destroy((err) => {
|
||||||
if (Object.keys(err).length) {
|
if (err) {
|
||||||
logger.error("Error while destroying session.", { err });
|
logger.error("Error while destroying session.", { err });
|
||||||
return res.status(500).send("Server error, try later.");
|
return res.sendStatus(500);
|
||||||
} else {
|
} else {
|
||||||
logger.info("Session invalid, destroyed.", { sessionID: delSession.id });
|
logger.info("Session invalid, destroyed.", { sessionID: delSession.id });
|
||||||
res.clearCookie("connect.sid");
|
res.clearCookie("connect.sid");
|
||||||
|
|||||||
1344
package-lock.json
generated
1344
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -19,7 +19,7 @@
|
|||||||
"homepage": "https://github.com/20kaushik02/spotify-manager#readme",
|
"homepage": "https://github.com/20kaushik02/spotify-manager#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^1.5.0",
|
"axios": "^1.5.0",
|
||||||
"connect-redis": "^7.1.0",
|
"connect-sqlite3": "^0.9.15",
|
||||||
"cookie-parser": "^1.4.6",
|
"cookie-parser": "^1.4.6",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"dotenv-flow": "^3.3.0",
|
"dotenv-flow": "^3.3.0",
|
||||||
@ -27,7 +27,6 @@
|
|||||||
"express-session": "^1.17.3",
|
"express-session": "^1.17.3",
|
||||||
"express-validator": "^7.0.1",
|
"express-validator": "^7.0.1",
|
||||||
"helmet": "^7.0.0",
|
"helmet": "^7.0.0",
|
||||||
"redis": "^4.6.10",
|
|
||||||
"winston": "^3.10.0"
|
"winston": "^3.10.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user