127.0.0.1:8000 watch-together / 00f0905
Start work on optional ads Seva Luchianov 4 years ago
7 changed file(s) with 117 addition(s) and 62 deletion(s). Raw diff Collapse all Expand all
1212 "bufferutil": "^4.0.1",
1313 "clamscan": "^1.3.1",
1414 "command-line-args": "^5.1.1",
15 "cookie-parser": "^1.4.5",
1516 "dompurify": "^2.2.2",
1617 "dotenv": "^8.2.0",
1718 "express": "^4.17.1",
28402841 "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
28412842 "engines": {
28422843 "node": ">= 0.6"
2844 }
2845 },
2846 "node_modules/cookie-parser": {
2847 "version": "1.4.5",
2848 "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz",
2849 "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==",
2850 "dependencies": {
2851 "cookie": "0.4.0",
2852 "cookie-signature": "1.0.6"
2853 },
2854 "engines": {
2855 "node": ">= 0.8.0"
28432856 }
28442857 },
28452858 "node_modules/cookie-signature": {
1215712170 "version": "0.4.0",
1215812171 "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
1215912172 "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
12173 },
12174 "cookie-parser": {
12175 "version": "1.4.5",
12176 "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz",
12177 "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==",
12178 "requires": {
12179 "cookie": "0.4.0",
12180 "cookie-signature": "1.0.6"
12181 }
1216012182 },
1216112183 "cookie-signature": {
1216212184 "version": "1.0.6",
3636 "bufferutil": "^4.0.1",
3737 "clamscan": "^1.3.1",
3838 "command-line-args": "^5.1.1",
39 "cookie-parser": "^1.4.5",
3940 "dompurify": "^2.2.2",
4041 "dotenv": "^8.2.0",
4142 "express": "^4.17.1",
8889 "webpack-dev-server": "^3.11.2"
8990 },
9091 "export-symbol": "extension.exports"
91 }
92 }
233233 ).catch(utils.handle_err.mailgun(res));
234234 }).then(function() {
235235 req.logout();
236 res.cookie('login_message', JSON.stringify({
236 cookies.set(res, 'login_message', {
237237 message: "Account Deleted"
238 }), cookies.options({
238 }, {
239239 httpOnly: false
240 }));
240 });
241241 res.send(utils.ok());
242242 }).catch(utils.handle_err.res(res, "Error deleting your account, try again later"));
243243 },
11 const upload_session = require('../utils/upload_session');
22 const cookies = require('../utils/cookies');
33
4 module.exports = {
5 get: {
6 "": function(req, res) {
7 // Any time a user visits this page it
8 // is loading for the first time.
9 // Hence they have no upload session.
10 let current_upload_session = upload_session.get(req.user);
11 if (current_upload_session) {
12 upload_session.delete(req.user);
13 utils.rimraf(current_upload_session.temp_dir).catch(res.locals.log.general.error);
14 }
4 function get_user_prefs(req, res) {
5 const default_prefs = {
6 ads_enabled: 0
7 };
8
9 if (!req.user) {
10 return utils.resolve(default_prefs);
11 }
12
13 return utils.query(
14 "SELECT ads_enabled FROM user_prefs WHERE user_id=?",
15 [req.user.user_id]
16 ).then(([user_prefs]) => user_prefs).catch(
17 utils.handle_err.sql(res, default_prefs)
18 ).then(function(user_prefs) {
19 res.locals.log.v("Prefs for", req.user.email, "-", user_prefs);
20 return user_prefs;
21 });
22 }
23
24 const routes = [
25 ['login'],
26 ['register'],
27 ['confirm-email'],
28 ['password-reset']
29 ].reduce(function(request_handlers, [endpoint]) {
30 const title = endpoint.split('-').map(word => utils.captialize(word)).join(' ');
31 return Object.assign(request_handlers, {
32 [endpoint]: [{
33 auth: false
34 }, function(req, res) {
35 get_user_prefs(req, res).then(function(prefs) {
36 res.render(endpoint, {
37 captcha: true,
38 ads_enabled: prefs.ads_enabled,
39 title: ' - ' + title
40 });
41 });
42 }]
43 });
44 }, {
45 "": function(req, res) {
46 // Any time a user visits this page it
47 // is loading for the first time.
48 // Hence they have no upload session.
49 let current_upload_session = upload_session.get(req.user);
50 if (current_upload_session) {
51 upload_session.delete(req.user);
52 utils.rimraf(current_upload_session.temp_dir).catch(res.locals.log.general.error);
53 }
54 get_user_prefs(req, res).then(function(prefs) {
1555 res.render('home', {
1656 title: "",
57 ads_enabled: prefs.ads_enabled,
1758 helpers: {
1859 current_year: () => new Date().getFullYear()
1960 }
2061 });
21 },
22 "logout": function(req, res) {
23 req.logout();
24 res.cookie('login_message', JSON.stringify({
62 })
63 },
64 "logout": function(req, res) {
65 if (cookies.get(req, 'cookie_consent')) {
66 cookies.set(res, 'login_message', {
2567 message: "Logged Out Successfully"
26 }), cookies.options({
68 }, {
2769 httpOnly: false
28 }));
29 res.redirect("/login");
30 },
31 "login": [{
32 auth: false
33 }, function(req, res) {
34 res.render('login', {
35 captcha: true,
36 title: " - Login"
3770 });
38 }],
39 "register": [{
40 auth: false
41 }, function(req, res) {
42 res.render('register', {
43 captcha: true,
44 title: " - Register"
45 });
46 }],
47 "confirm-email": [{
48 auth: false
49 }, function(req, res) {
50 res.render('confirm-email', {
51 captcha: true,
52 title: " - Confirm Email"
53 });
54 }],
55 "password-reset": [{
56 auth: false
57 }, function(req, res) {
58 res.render('password-reset', {
59 captcha: true,
60 title: " - Password Reset"
61 });
62 }]
71 }
72 req.logout();
73 res.redirect("/login");
6374 }
75 });
76
77 module.exports = {
78 get: routes
6479 };
0 function cookie_options(options) {
1 return Object.assign({
2 sameSite: 'strict'
3 }, process.env.DEBUG ? {} : {
4 secure: true
5 }, options || {});
6 }
7
08 module.exports = {
1 options: function(options) {
2 return Object.assign({
3 sameSite: 'strict'
4 }, process.env.DEBUG ? {} : {
5 secure: true
6 }, options || {});
7 }
9 get: function(req, name) {
10 // returns "" if no cookie stored
11 return JSON.parse(req.cookies[name] || '""');
12 },
13 set: function(res, name, data, options) {
14 res.cookie(name, JSON.stringify(data), cookie_options(options));
15 },
16 options: cookie_options
817 }
9090 ext_log.general.error(error.stack);
9191
9292 if (non_fatal) {
93 return new Promise(r => r());
93 return new Promise(r => r(non_fatal));
9494 }
9595 return new Promise((_, r) => r(message(error)));
9696 }
118118 },
119119 enumify: enumify,
120120 status: STATUS_CODES_ENUM,
121 captialize: function(string) {
122 if (!string) {
123 return "";
124 }
125 return string[0].toUpperCase() + string.slice(1);
126 },
121127 uuid: uuid,
122128 tiny_id: promisify(crypto.randomBytes)(3).then(buf => buf.toString('hex').toUpperCase()),
123129 ok: function(data) {
3131 const app = express();
3232 const exphbs = require("express-handlebars");
3333 const rate_limit = require("express-rate-limit");
34 const cookie_parser = require('cookie-parser')
3435 const session = require('express-session');
3536 const MySQLStore = require('express-mysql-session')(session);
3637 const passport = require('passport');
6263 app.use(express.urlencoded({
6364 extended: true
6465 }));
66 app.use(cookie_parser());
6567
6668 app.use(express.static("./dist"));
6769 app.use(express.static("./public"));