Skip to content

Commit

Permalink
feat(back-end): migrate from "my/http" to Express.js - part 3 (#204)
Browse files Browse the repository at this point in the history
Contributes to #122.

Openwhyd has been running on a legacy / home-made web framework, which can be a turn-off for potential contributors who are used to Express.js

As a third step of the migration explained in #122, this PR consists of removing the legacy "glue" code from `my/http` from the Express.js wrapper.
  • Loading branch information
adrienjoly committed Jul 3, 2019
1 parent 6d4e216 commit 00e4db2
Show file tree
Hide file tree
Showing 50 changed files with 285 additions and 500 deletions.
8 changes: 3 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,9 @@ The project is **open to contributions**. Check out our [Support Openwhyd](#supp

### Tech stack

- Node.js
- Express-like Web Server
- jQuery
- HTML + CSS
- [Playemjs](https://github.com/adrienjoly/playemjs) for streaming tracks continuously
- [Node.js](https://nodejs.org/) + [Express](https://expressjs.com/) + [MongoDB](https://www.mongodb.com/)
- HTML + CSS + jQuery
- [PlayemJS](https://github.com/adrienjoly/playemjs) for streaming tracks continuously

### Setup and usage

Expand Down
20 changes: 10 additions & 10 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ var params = (process.appParams = {
nbTracksPerPlaylistEmbed: 100,

paths: {
whydPath: './',
whydPath: __dirname,
uploadDirName: 'upload_data',
uAvatarImgDirName: 'uAvatarImg',
uCoverImgDirName: 'uCoverImg',
Expand Down Expand Up @@ -147,7 +147,7 @@ function start() {
var myHttp = require('./app/lib/my-http-wrapper/http');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const sessionStore = session({
const sessionMiddleware = session({
secret: process.env.WHYD_SESSION_SECRET.substr(),
store: new MongoStore({
url: makeMongoUrl(params),
Expand All @@ -158,6 +158,9 @@ function start() {
saveUninitialized: false // required, cf https://www.npmjs.com/package/express-session#saveuninitialized
});
var serverOptions = {
port: params.port,
appDir: __dirname,
sessionMiddleware,
errorHandler: function(request, params, response, statusCode) {
// to render 404 and 401 error pages from server/router
console.log('rendering server error page', statusCode);
Expand All @@ -168,16 +171,13 @@ function start() {
request.getUser()
);
},
uploadDir: params.paths.uploadDirName, // 'upload_data'
keepExtensions: true
uploadSettings: {
uploadDir: params.paths.uploadDirName, // 'upload_data'
keepExtensions: true
}
};
require('./app/models/logging.js'); // init logging methods (IncomingMessage extensions)
new myHttp.Application(
__dirname,
params.dev,
sessionStore,
serverOptions
).start();
new myHttp.Application(serverOptions).start();
require('./app/workers/notifEmails.js'); // start digest worker
require('./app/workers/hotSnapshot.js'); // start hot tracks snapshot worker
require('./app/models/plTags.js').getTagEngine(); // index tags for tracks and users
Expand Down
8 changes: 4 additions & 4 deletions app/MyController.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,24 @@ exports.buildController = function(params) {
response.badRequest();
console.log(logPrefix, '=> bad request');
} else if (res.tsv) {
response.render(res.tsv, null, { 'content-type': 'text/tsv' });
response.legacyRender(res.tsv, null, { 'content-type': 'text/tsv' });
console.log(logPrefix, '=> returned TSV');
} else if (res.csv) {
response.render(res.csv, null, { 'content-type': 'text/csv' });
response.legacyRender(res.csv, null, { 'content-type': 'text/csv' });
console.log(logPrefix, '=> returned CSV');
} else if (res.html) {
response.renderHTML(res.html);
console.log(logPrefix, '=> returned HTML');
} else if (res.json) {
if (request.headers['user-agent']) {
response.render(JSON.stringify(res.json, null, 2));
response.legacyRender(JSON.stringify(res.json, null, 2));
console.log(logPrefix, '=> returned stringified JSON');
} else {
response.renderJSON(res.json);
console.log(logPrefix, '=> returned JSON');
}
} else {
response.render(res);
response.legacyRender(res);
console.log(logPrefix, '=> returned plain text');
}
}
Expand Down
6 changes: 3 additions & 3 deletions app/controllers/admin/FileController.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ exports.buildController = function(params) {
function render(res) {
if (!res) response.badRequest();
else if (res.tsv)
response.render(res.tsv, null, { 'content-type': 'text/tsv' });
response.legacyRender(res.tsv, null, { 'content-type': 'text/tsv' });
else if (res.csv)
response.render(res.csv, null, { 'content-type': 'text/csv' });
response.legacyRender(res.csv, null, { 'content-type': 'text/csv' });
else if (res.html) response.renderHTML(res.html);
else response.render(res);
else response.legacyRender(res);
}

var processor = params.fileGenerators[reqParams.action];
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/admin/analytics.js
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ exports.controller = function(request, reqParams, response) {
if (reportLabel && reportValue != null) report[reportLabel] = reportValue;
if (seq.length > 0) seq.shift()(runNext);
else
response.render(renderTemplate(report), null, {
response.legacyRender(renderTemplate(report), null, {
'content-type': 'text/html'
});
})();
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/admin/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ exports.controller = function(request, reqParams, response, error) {
for (var i in indexFcts)
if (request.body[i])
return indexFcts[i](function(r) {
response.render(r || { ok: 'done' });
response.legacyRender(r || { ok: 'done' });
});
response.badRequest();
} else
Expand Down
4 changes: 2 additions & 2 deletions app/controllers/admin/invites.js
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ exports.handleRequest = function(request, reqParams, response) {
// make sure an admin is logged, or return an error page
var user = request.checkAdmin(response);
if (!user /*|| !(user.fbId == "510739408" || user.fbId == "577922742")*/)
return /*response.render("you're not an admin!")*/;
return /*response.legacyRender("you're not an admin!")*/;

var fetchAndRender = function() {
fetchUsers(
Expand All @@ -211,7 +211,7 @@ exports.handleRequest = function(request, reqParams, response) {
date: requests[i].date
};

response.render(
response.legacyRender(
renderTemplate(requests, invites, users, reqParams),
null,
{ 'content-type': 'text/html' }
Expand Down
14 changes: 13 additions & 1 deletion app/controllers/admin/session.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,19 @@

var MyController = require('../../MyController.js');

var lastAccessPerUA = process.lastAccessPerUA;
const MAX_LEN_UA = 12;

const lastAccessPerUA = {}; // { user-agent -> { uid -> timestamp } }

const stripUserAgent = userAgent => userAgent.substr(0, MAX_LEN_UA);

exports.stripUserAgent = stripUserAgent;

exports.notifyUserActivity = function({ userId, userAgent, startDate }) {
if (!userId || !userAgent || !startDate) return;
const ua = stripUserAgent(userAgent);
(lastAccessPerUA[ua] = lastAccessPerUA[ua] || {})[userId] = startDate;
};

function filterByFreshness(d) {
var now = Date.now();
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/admin/testEmail.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ exports.controller = function(request, reqParams, response) {

function send(email) {
sendEmails(user, email, function(res) {
response.render(res);
response.legacyRender(res);
});
}

Expand Down
2 changes: 1 addition & 1 deletion app/controllers/admin/testNotifs.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,5 @@ exports.controller = function(request, reqParams, response) {
notifModel.mention(fakePost, fakeComment, user.id);
notifModel.commentReply(fakePost, fakeComment, user.id);

response.render('done');
response.legacyRender('done');
};
4 changes: 2 additions & 2 deletions app/controllers/admin/testTemplates.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ exports.controller = function(request, reqParams, response) {
reqParams.userName = user.name;
var html = templateHtml.render(reqParams);
console.log('\n' + html /*.replace(/\n/g, " ")*/ + '\n');
response.render(html, null, { 'content-type': 'text/html' });
response.legacyRender(html, null, { 'content-type': 'text/html' });
}
);
} catch (e) {
response.render(e);
response.legacyRender(e);
}
};
2 changes: 1 addition & 1 deletion app/controllers/admin/testUpload.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,5 @@ exports.controller = function(request, reqParams, response) {
request.logToConsole('testUpload.controller', reqParams);
var user = request.checkLogin(response);
if (!user) return;
response.render(renderTemplate(), null, { 'content-type': 'text/html' });
response.legacyRender(renderTemplate(), null, { 'content-type': 'text/html' });
};
2 changes: 1 addition & 1 deletion app/controllers/admin/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ exports.handleRequest = function(request, reqParams, response) {
? '<h1>error</h1><p>' + result.error + '</p>'
: '<h1>success</h1><p>' + result.message + '</p>') +
'Go <a href="/admin/users">back to user management console</a>';
response.render(html, null, { 'content-type': 'text/html' });
response.legacyRender(html, null, { 'content-type': 'text/html' });
}

reqParams = reqParams || {};
Expand Down
8 changes: 4 additions & 4 deletions app/controllers/api/contentExtractor.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,16 @@ exports.controller = function(request, reqParams, response) {

// make sure a registered user is logged, or return an error page
var loggedInUser = request.checkLogin(/*response*/);
if (!loggedInUser) return response.render({});
if (!loggedInUser) return response.legacyRender({});

if (!reqParams || !reqParams.url) {
console.log('contentExtractor: no url provided => returning null');
return response.render(null);
return response.legacyRender(null);
}

function handleError(err) {
console.log('contentExtractor error:', err);
response.render({ error: err });
response.legacyRender({ error: err });
}

function renderResult(embeds, allEmbeds) {
Expand All @@ -41,7 +41,7 @@ exports.controller = function(request, reqParams, response) {
}

//console.log("contentExtractor embeds:", embeds);
response.render({ embeds: embeds, allEmbed: allEmbeds });
response.legacyRender({ embeds: embeds, allEmbed: allEmbeds });
}

var url = reqParams.url;
Expand Down
6 changes: 3 additions & 3 deletions app/controllers/api/fbfriends.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ exports.handleRequest = function(request, reqParams, response) {
reqParams = reqParams || {};

var loggedUser = request.checkLogin();
if (!loggedUser) return response.render({ error: 'must be logged in' });
if (!loggedUser) return response.legacyRender({ error: 'must be logged in' });

facebookModel.fetchAccessToken(loggedUser.id, function(fbTok) {
console.log('fbTok in db + param', fbTok, reqParams.fbAccessToken);
Expand All @@ -26,14 +26,14 @@ exports.handleRequest = function(request, reqParams, response) {
fbfriends
) {
var list = (fbfriends || {}).notOnWhyd || [];
response.render({ fbfriends: list });
response.legacyRender({ fbfriends: list });
});
} else
facebookModel.fetchFbFriendsWithSub(
loggedUser,
reqParams.fbAccessToken || fbTok,
function(result) {
response.render(result);
response.legacyRender(result);
}
);
});
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/api/metadataExtractor.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ exports.controller = function(request, reqParams, response) {
function render(err, result) {
result = result || {};
if (err) result.error = err.message || err;
response.render(
response.legacyRender(
reqParams.format == 'text' ? JSON.stringify(result, null, 2) : result
);
}
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/api/notif.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ exports.handlePostRequest = function(request, postParams, response) {
exports.controller = function(req, reqParams, res) {
//req.logToConsole("notif.controller", reqParams);
var user = req.checkLogin(/*res*/);
if (!user) return res.render(); // replace by render(null) if user not logged
if (!user) return res.legacyRender(); // replace by render(null) if user not logged

if (req.method.toLowerCase() === 'post') {
exports.handlePostRequest(req, req.body, res);
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/api/playlist.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ exports.handlePostRequest = function(request, reqParams, response) {

exports.actions[reqParams.action](reqParams, function(res, args) {
console.log(reqParams, '=>', res);
response.render(res, null, args || { 'content-type': 'application/json' });
response.legacyRender(res, null, args || { 'content-type': 'application/json' });
});
};

Expand Down
2 changes: 1 addition & 1 deletion app/controllers/api/post.js
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ exports.handleRequest = function(request, reqParams, response) {
' RESULT =>',
res
);
response.render(res, null, args || { 'content-type': 'application/json' });
response.legacyRender(res, null, args || { 'content-type': 'application/json' });
}

var user = request.getUser() || {}; //checkLogin(response);
Expand Down
4 changes: 2 additions & 2 deletions app/controllers/api/searchHypeMachine.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ var hypem = require('../../lib/hypem');
exports.controller = function(request, reqParams, response) {
// make sure a registered user is logged, or return an error page
var loggedInUser = request.checkLogin(/*response*/);
if (!loggedInUser) return response.render({});
if (!loggedInUser) return response.legacyRender({});

request.logToConsole('searchHypeMachine.controller', reqParams);

Expand All @@ -26,6 +26,6 @@ exports.controller = function(request, reqParams, response) {
}
var result = err ? { error: err } : { q: q, results: list };
console.log('searchHypeMachine => ', err || list.length);
response.render(result);
response.legacyRender(result);
});
};
10 changes: 5 additions & 5 deletions app/controllers/api/unsubscribe.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,23 +66,23 @@ exports.controller = function(request, reqParams, response) {
var html =
'Starting now, the frequency of email notifications you will receive is set to: ' +
newFreqlabel;
response.render(withLink(html), null, { 'content-type': 'text/html' });
response.legacyRender(withLink(html), null, { 'content-type': 'text/html' });
} else if (r.pref) {
// user unsubscribed
var type = userModel.EM_LABEL[reqParams.type] || 'all';
var html =
'You successfully unsubscribed from email notifications: ' + type;
response.render(withLink(html), null, { 'content-type': 'text/html' });
response.legacyRender(withLink(html), null, { 'content-type': 'text/html' });
} else {
response.render(r);
response.legacyRender(r);
}
/*
if (r && r.html)
response.render(r.html, null, {'content-type': 'text/html'});
response.legacyRender(r.html, null, {'content-type': 'text/html'});
else {
if (!r || r.error) {
console.log("unsubscribe.controller ERROR:", (r || {}).error || r);
response.render(r);
response.legacyRender(r);
}
*/
}
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/btn.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ exports.controller = function(request, reqParams, response) {
if (d && d.html) response.renderHTML(d.html);
else {
console.log('invalid btn output:', d);
response.render(d);
response.legacyRender(d);
}
}

Expand Down
4 changes: 2 additions & 2 deletions app/controllers/discover.js
Original file line number Diff line number Diff line change
Expand Up @@ -355,8 +355,8 @@ exports.handleRequest = function(request, reqParams, response) {
//response.redirect("/");
}
/*else*/ if (result.html)
response.render(result.html, null, { 'content-type': 'text/html' });
else response.render(result);
response.legacyRender(result.html, null, { 'content-type': 'text/html' });
else response.legacyRender(result);
}

if (reqParams.ajax) {
Expand Down
4 changes: 2 additions & 2 deletions app/controllers/hotTracks.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ exports.controller = function(request, reqParams, response) {
// return response.temporaryRedirect("/");

function render(html) {
response.render(html, null, { 'content-type': 'text/html' });
response.legacyRender(html, null, { 'content-type': 'text/html' });

if (
loggedInUser &&
Expand All @@ -70,7 +70,7 @@ exports.controller = function(request, reqParams, response) {
for (var i in posts)
posts[i].isLoved = snip.arrayHas(posts[i].lov, '' + loggedInUser.id);
if (reqParams.format == 'json')
response.render({
response.legacyRender({
hasMore: hasMore ? { skip: firstIndex + reqParams.limit } : false,
genre: genre || 'All',
tracks: posts
Expand Down
Loading

0 comments on commit 00e4db2

Please sign in to comment.