summaryrefslogtreecommitdiff
path: root/bucky
diff options
context:
space:
mode:
Diffstat (limited to 'bucky')
-rw-r--r--bucky/app/api.js25
-rw-r--r--bucky/app/bucky.js1196
-rw-r--r--bucky/app/pages.js222
-rw-r--r--bucky/app/site.js5
-rw-r--r--bucky/bin/build-scripts.js43
-rw-r--r--bucky/db/index.js33
-rw-r--r--bucky/util/auth.js250
7 files changed, 950 insertions, 824 deletions
diff --git a/bucky/app/api.js b/bucky/app/api.js
index 857849e..a2f85d0 100644
--- a/bucky/app/api.js
+++ b/bucky/app/api.js
@@ -98,6 +98,31 @@ function route(app) {
function (req, res) {
res.json({
threads: res.threads,
+ hootstream: res.hootstream,
+ hootbox: res.hootbox,
+ lastlog: res.lastlog,
+ mail: res.mail,
+ });
+ }
+ );
+ app.get(
+ "/api/stream",
+ bucky.ensureLastlog,
+ middleware.ensureAuthenticated,
+ // bucky.ensureLatestThreads,
+ bucky.ensureHootbox,
+ bucky.ensureHootstream,
+ privacy.filterPrivateThreads,
+ bucky.ensureCommentCountsForThreads,
+ bucky.ensureFileCountsForThreads,
+ bucky.ensureKeywordsForThreads,
+ bucky.bumpLastSeen,
+ bucky.checkMail,
+ function (req, res) {
+ res.json({
+ threads: res.threads,
+ files: res.files,
+ comments: res.comments,
hootbox: res.hootbox,
lastlog: res.lastlog,
mail: res.mail,
diff --git a/bucky/app/bucky.js b/bucky/app/bucky.js
index b9d9a16..5dc7244 100644
--- a/bucky/app/bucky.js
+++ b/bucky/app/bucky.js
@@ -1,87 +1,107 @@
-var _ = require('lodash')
-var db = require('../db')
-var util = require('../util/util')
-var upload = require('../util/upload')
-
-var bucky = module.exports = {
+var _ = require("lodash");
+var db = require("../db");
+var util = require("../util/util");
+var upload = require("../util/upload");
+var bucky = (module.exports = {
/* INDEX */
- ensureLatestThreads: function (req, res, next){
- db.getLatestThreads().then(function(threads){
- res.threads = threads
- res.threads_ids = res.threads.pluck("id").sort()
- res.keywords = _.uniq(res.threads.pluck("keyword"))
- next()
- })
+ ensureLatestThreads: function (req, res, next) {
+ db.getLatestThreads().then(function (threads) {
+ res.threads = threads;
+ res.threads_ids = res.threads.pluck("id").sort();
+ res.keywords = _.uniq(res.threads.pluck("keyword"));
+ next();
+ });
},
- ensureCommentCountsForThreads: function (req, res, next){
- db.getCommentCounts(res.threads_ids).then(function(counts){
- var lookup = {}
- counts.forEach(function(c){
- lookup[c.thread] = c
- })
- res.threads.forEach(function(thread){
+ ensureCommentCountsForThreads: function (req, res, next) {
+ db.getCommentCounts(res.threads_ids).then(function (counts) {
+ var lookup = {};
+ counts.forEach(function (c) {
+ lookup[c.thread] = c;
+ });
+ res.threads.forEach(function (thread) {
if (lookup[thread.id]) {
- thread.set("comment_count", lookup[thread.id].count)
+ thread.set("comment_count", lookup[thread.id].count);
}
- })
- next()
- })
+ });
+ next();
+ });
},
- ensureFileCountsForThreads: function (req, res, next){
- db.getFileSizes(res.threads_ids).then(function(counts){
- var lookup = {}
- counts.forEach(function(c){
- lookup[c.thread] = c
- })
- res.threads.forEach(function(t){
- var c = lookup[t.id]
- t.set("file_count", c ? c.count : 0)
- t.set("size", c ? c.size : 0)
- })
- next()
- })
+ ensureFileCountsForThreads: function (req, res, next) {
+ db.getFileSizes(res.threads_ids).then(function (counts) {
+ var lookup = {};
+ counts.forEach(function (c) {
+ lookup[c.thread] = c;
+ });
+ res.threads.forEach(function (t) {
+ var c = lookup[t.id];
+ t.set("file_count", c ? c.count : 0);
+ t.set("size", c ? c.size : 0);
+ });
+ next();
+ });
},
- ensureKeywordsForThreads: function (req, res, next){
- db.getKeywords(res.keywords).then(function(keywords){
- var lookup = {}
- keywords.forEach(function(k){
- lookup[k.get('keyword')] = k
- })
- res.threads.forEach(function(t){
- var kw = t.get('keyword')
- if (! kw) return
- var k = lookup[kw]
- if (! k) return
- if (! t.get("color")) {
- t.set("color", k.get("color"))
+ ensureKeywordsForThreads: function (req, res, next) {
+ db.getKeywords(res.keywords).then(function (keywords) {
+ var lookup = {};
+ keywords.forEach(function (k) {
+ lookup[k.get("keyword")] = k;
+ });
+ res.threads.forEach(function (t) {
+ var kw = t.get("keyword");
+ if (!kw) return;
+ var k = lookup[kw];
+ if (!k) return;
+ if (!t.get("color")) {
+ t.set("color", k.get("color"));
}
- })
- next()
- })
+ });
+ next();
+ });
},
- ensureHootbox: function (req, res, next){
- db.getCommentsForThread(1, 20, 0, "desc").then(function(hootbox){
- res.hootbox = hootbox
- next()
- })
+ ensureHootbox: function (req, res, next) {
+ db.getCommentsForThread(1, 20, 0, "desc").then(function (hootbox) {
+ res.hootbox = hootbox;
+ next();
+ });
+ },
+ ensureHootstream: function (req, res, next) {
+ Promise.all([
+ db.getHootstreamFiles({
+ limit: req.query.limit || 10,
+ offset: req.query.offset || 0,
+ }),
+ db.getHootstreamComments({
+ limit: req.query.limit || 10,
+ offset: req.query.offset || 0,
+ }),
+ ]).then(([files, comments]) => {
+ db.getHootstreamThreads({ files, comments }).then((threads) => {
+ res.files = files;
+ res.comments = comments;
+ res.threads = threads;
+ res.threads_ids = res.threads.pluck("id").sort();
+ res.keywords = _.uniq(res.threads.pluck("keyword"));
+ next();
+ });
+ });
},
- ensureLastlog: function (req, res, next){
- db.getLastlog(5).then(function(lastlog){
- res.lastlog = lastlog
- next()
- })
+ ensureLastlog: function (req, res, next) {
+ db.getLastlog(5).then(function (lastlog) {
+ res.lastlog = lastlog;
+ next();
+ });
},
- createThread: function (req, res, next){
- if (! req.body.title || ! req.body.title.length) {
- res.json({ error: "no title" })
- return
+ createThread: function (req, res, next) {
+ if (!req.body.title || !req.body.title.length) {
+ res.json({ error: "no title" });
+ return;
}
var data = {
title: req.body.title,
keyword: req.body.keyword,
- username: req.user.get('username'),
+ username: req.user.get("username"),
createdate: util.now(),
lastmodified: util.now(),
size: 0,
@@ -89,666 +109,698 @@ var bucky = module.exports = {
color: req.body.color,
viewed: 0,
revision: 0,
- }
- db.createThread(data).then(function(thread){
- res.thread = thread
- next()
- })
+ };
+ db.createThread(data).then(function (thread) {
+ res.thread = thread;
+ next();
+ });
},
/* DETAILS */
- ensureThread: function (req, res, next){
- var id = req.params.id.replace(/\D/g, "")
- if (! id) {
- return res.sendStatus(404)
+ ensureThread: function (req, res, next) {
+ var id = req.params.id.replace(/\D/g, "");
+ if (!id) {
+ return res.sendStatus(404);
}
- db.getThread(id).then(function(thread){
+ db.getThread(id).then(function (thread) {
if (thread) {
- res.thread = thread
- next()
- }
- else {
- res.sendStatus(404)
+ res.thread = thread;
+ next();
+ } else {
+ res.sendStatus(404);
}
- })
+ });
},
- ensureThreadById: function (req, res, next){
- var id = req.params.thread_id.replace(/\D/g, "")
- if (! id) {
- return res.sendStatus(404)
+ ensureThreadById: function (req, res, next) {
+ var id = req.params.thread_id.replace(/\D/g, "");
+ if (!id) {
+ return res.sendStatus(404);
}
- db.getThread(id).then(function(thread){
+ db.getThread(id).then(function (thread) {
if (thread) {
- res.thread = thread
- next()
- }
- else {
- res.sendStatus(404)
+ res.thread = thread;
+ next();
+ } else {
+ res.sendStatus(404);
}
- })
+ });
},
- prepareThread: function (req, res, next){
- var thread = res.thread
+ prepareThread: function (req, res, next) {
+ var thread = res.thread;
if (thread) {
- var settings
+ var settings;
try {
- settings = JSON.parse(thread.get('settings') || '{}')
- } catch(e) {
- settings = {}
+ settings = JSON.parse(thread.get("settings") || "{}");
+ } catch (e) {
+ settings = {};
}
- res.thread.set("settings", settings)
+ res.thread.set("settings", settings);
}
- next()
+ next();
},
- ensureCommentThread: function (req, res, next){
- if (! res.comment) {
- return res.sendStatus(404)
+ ensureCommentThread: function (req, res, next) {
+ if (!res.comment) {
+ return res.sendStatus(404);
}
- var id = res.comment.get('thread')
- if (! id) {
- return res.sendStatus(404)
+ var id = res.comment.get("thread");
+ if (!id) {
+ return res.sendStatus(404);
}
- db.getThread(id).then(function(thread){
+ db.getThread(id).then(function (thread) {
if (thread) {
- res.thread = thread
- next()
+ res.thread = thread;
+ next();
+ } else {
+ res.sendStatus(404);
}
- else {
- res.sendStatus(404)
- }
- })
+ });
},
- ensureKeywordForThread: function (req, res, next){
- var keyword = res.thread.get('keyword')
- if (! keyword) return next()
- db.getKeyword(keyword).then(function(keyword){
- res.keyword = keyword
- next()
- })
+ ensureKeywordForThread: function (req, res, next) {
+ var keyword = res.thread.get("keyword");
+ if (!keyword) return next();
+ db.getKeyword(keyword).then(function (keyword) {
+ res.keyword = keyword;
+ next();
+ });
},
- ensureCommentsForThread: function (req, res, next){
- db.getCommentsForThread(res.thread.get('id')).then(function(comments){
- res.comments = comments || []
- next()
- })
+ ensureCommentsForThread: function (req, res, next) {
+ db.getCommentsForThread(res.thread.get("id")).then(function (comments) {
+ res.comments = comments || [];
+ next();
+ });
},
- ensureFilesForThread: function (req, res, next){
- db.getFilesForThread(res.thread.get('id')).then(function(files){
- res.files = files || []
- next()
- })
+ ensureFilesForThread: function (req, res, next) {
+ db.getFilesForThread(res.thread.get("id")).then(function (files) {
+ res.files = files || [];
+ next();
+ });
},
- bumpViewCount: function(req, res, next) {
- res.thread.set('viewed', res.thread.get('viewed') + 1)
- res.thread.save().then( () => next() )
+ bumpViewCount: function (req, res, next) {
+ res.thread.set("viewed", res.thread.get("viewed") + 1);
+ res.thread.save().then(() => next());
},
- bumpThreadRevisions: function (req, res, next){
+ bumpThreadRevisions: function (req, res, next) {
// don't bump the hootbox!
- if (res.thread.get('id') == 1) {
- return next()
+ if (res.thread.get("id") == 1) {
+ return next();
}
- res.thread.set('revision', res.thread.get('revision')+1)
- res.thread.set('lastmodified', util.now())
- res.thread.save().then( () => next() )
+ res.thread.set("revision", res.thread.get("revision") + 1);
+ res.thread.set("lastmodified", util.now());
+ res.thread.save().then(() => next());
},
- updateThreadSettings: function (req, res, next){
- var title = util.sanitize(req.body.title || "")
- if (! title || ! title.length) {
- return res.sendStatus(500)
+ updateThreadSettings: function (req, res, next) {
+ var title = util.sanitize(req.body.title || "");
+ if (!title || !title.length) {
+ return res.sendStatus(500);
}
- var keyword = util.sanitize(req.body.keyword || "")
- var privacy = parseInt(req.body.privacy) || 0
- var allowed = util.sanitize(req.body.allowed || "")
- var settings
- if (typeof req.body.settings === 'object') {
+ var keyword = util.sanitize(req.body.keyword || "");
+ var privacy = parseInt(req.body.privacy) || 0;
+ var allowed = util.sanitize(req.body.allowed || "");
+ var settings;
+ if (typeof req.body.settings === "object") {
try {
- settings = JSON.stringify(req.body.settings)
- } catch(e) {
- console.error("JSON error in thread settings!!!!")
- return res.sendStatus(500)
+ settings = JSON.stringify(req.body.settings);
+ } catch (e) {
+ console.error("JSON error in thread settings!!!!");
+ return res.sendStatus(500);
}
}
- if (! settings) {
- return res.sendStatus(500)
+ if (!settings) {
+ return res.sendStatus(500);
}
- res.thread.set('title', title)
- res.thread.set('keyword', keyword)
- res.thread.set('color', util.sanitize(req.body.color || 'blue'))
- res.thread.set('revision', res.thread.get('revision')+1)
- res.thread.set('settings', settings)
- res.thread.set('privacy', privacy)
- res.thread.set('allowed', allowed)
- res.thread.save()
- .then( () => next() )
- .catch(err => {
- console.error(err)
- next()
- })
+ res.thread.set("title", title);
+ res.thread.set("keyword", keyword);
+ res.thread.set("color", util.sanitize(req.body.color || "blue"));
+ res.thread.set("revision", res.thread.get("revision") + 1);
+ res.thread.set("settings", settings);
+ res.thread.set("privacy", privacy);
+ res.thread.set("allowed", allowed);
+ res.thread
+ .save()
+ .then(() => next())
+ .catch((err) => {
+ console.error(err);
+ next();
+ });
},
- buryThread: function (req, res, next){
- res.thread.set('lastmodified', util.now() - (14 * 86400))
- res.thread.save().then( () => next() )
+ buryThread: function (req, res, next) {
+ res.thread.set("lastmodified", util.now() - 14 * 86400);
+ res.thread.save().then(() => next());
},
-// ensureInterestedUsers: function(req, res, next){
-// // given a thread, find people who might be interested in it
-// // - other people who have been in threads with you
-// // - other people who have posted on the keyword
-// // for now though, just show the last 20 people who have logged in..
-// db.getLastlog(21).then( (users) => {
-// res.interestedUsers = users
-// next()
-// }).catch( () => {
-// res.interestedUsers = []
-// next()
-// })
-// },
-// ensureThreadUsers: function(req, res, next) {
-// db.getThreadUsers(res.thread.get('id')).then(thread_users => {
-// res.thread_users = thread_users
-// next()
-// })
-// },
- checkUsernames: function(req, res, next) {
- if (! req.body.usernames) return res.sendStatus(500)
- db.checkUsernames(req.body.usernames).then( (users) => {
- res.usernames = users.map(user => user.username)
- next()
- }).catch((err) => {
- console.log(err)
- res.usernames = []
- next()
- })
+ // ensureInterestedUsers: function(req, res, next){
+ // // given a thread, find people who might be interested in it
+ // // - other people who have been in threads with you
+ // // - other people who have posted on the keyword
+ // // for now though, just show the last 20 people who have logged in..
+ // db.getLastlog(21).then( (users) => {
+ // res.interestedUsers = users
+ // next()
+ // }).catch( () => {
+ // res.interestedUsers = []
+ // next()
+ // })
+ // },
+ // ensureThreadUsers: function(req, res, next) {
+ // db.getThreadUsers(res.thread.get('id')).then(thread_users => {
+ // res.thread_users = thread_users
+ // next()
+ // })
+ // },
+ checkUsernames: function (req, res, next) {
+ if (!req.body.usernames) return res.sendStatus(500);
+ db.checkUsernames(req.body.usernames)
+ .then((users) => {
+ res.usernames = users.map((user) => user.username);
+ next();
+ })
+ .catch((err) => {
+ console.log(err);
+ res.usernames = [];
+ next();
+ });
},
destroyThread: function (req, res, next) {
- console.log(">>> destroying thread", res.thread.get('id'))
+ console.log(">>> destroying thread", res.thread.get("id"));
var commentPromises = res.comments.map((comment) => {
- return comment.destroy()
- })
- var filePromises = db.destroyFiles(res.files)
- var threadPromise = res.thread.destroy()
- var promises = [ threadPromise ].concat(commentPromises).concat(filePromises)
- Promise.all(promises).then( () => {
- next()
- }).catch( (err) => {
- res.sendStatus(500)
- })
+ return comment.destroy();
+ });
+ var filePromises = db.destroyFiles(res.files);
+ var threadPromise = res.thread.destroy();
+ var promises = [threadPromise].concat(commentPromises).concat(filePromises);
+ Promise.all(promises)
+ .then(() => {
+ next();
+ })
+ .catch((err) => {
+ res.sendStatus(500);
+ });
},
/* KEYWORDS */
- ensureKeyword: function (req, res, next){
- var keyword = req.params.keyword
- if (! keyword) {
- return res.sendStatus(404)
+ ensureKeyword: function (req, res, next) {
+ var keyword = req.params.keyword;
+ if (!keyword) {
+ return res.sendStatus(404);
}
- db.getKeyword(keyword).then(function(k){
- if (! k) {
- return res.sendStatus(404)
+ db.getKeyword(keyword).then(function (k) {
+ if (!k) {
+ return res.sendStatus(404);
}
- res.keyword = k
- next()
- })
+ res.keyword = k;
+ next();
+ });
},
- ensureKeywords: function (req, res, next){
- db.getKeywords().then(function(k){
- if (! k) {
- return res.sendStatus(404)
+ ensureKeywords: function (req, res, next) {
+ db.getKeywords().then(function (k) {
+ if (!k) {
+ return res.sendStatus(404);
}
- res.keywords = k
- next()
- })
+ res.keywords = k;
+ next();
+ });
},
- ensureLatestKeywordThreads: function (req, res, next){
- db.getLatestKeywordThreads().then(function(threads){
- res.threads = threads
- next()
- })
+ ensureLatestKeywordThreads: function (req, res, next) {
+ db.getLatestKeywordThreads().then(function (threads) {
+ res.threads = threads;
+ next();
+ });
},
- ensureThreadGroups: function (req, res, next){
- db.getThreadGroups().then(function(threadGroups){
- res.threadGroups = threadGroups
- next()
- })
+ ensureThreadGroups: function (req, res, next) {
+ db.getThreadGroups().then(function (threadGroups) {
+ res.threadGroups = threadGroups;
+ next();
+ });
},
- ensureThreadsForKeyword: function (req, res, next){
- var keyword = req.params.keyword
- if (! keyword) {
- res.sendStatus(404)
+ ensureThreadsForKeyword: function (req, res, next) {
+ var keyword = req.params.keyword;
+ if (!keyword) {
+ res.sendStatus(404);
}
- db.getThreadsForKeyword(keyword).then(function(threads){
- res.threads = threads
- res.threads_ids = res.threads.pluck("id").sort()
- res.keywords = _.uniq(res.threads.pluck("keyword"))
- next()
- })
+ db.getThreadsForKeyword(keyword).then(function (threads) {
+ res.threads = threads;
+ res.threads_ids = res.threads.pluck("id").sort();
+ res.keywords = _.uniq(res.threads.pluck("keyword"));
+ next();
+ });
},
- ensureThreadsForUser: function (req, res, next){
- var username = res.user.username
- var limit = parseInt(req.params.limit) || 10
- var offset = parseInt(req.params.offset) || 0
- if (! username) {
- res.sendStatus(404)
+ ensureThreadsForUser: function (req, res, next) {
+ var username = res.user.username;
+ var limit = parseInt(req.params.limit) || 10;
+ var offset = parseInt(req.params.offset) || 0;
+ if (!username) {
+ res.sendStatus(404);
}
- db.getThreadsForUser(username, limit, offset).then(function(threads){
- res.threads = threads
- res.threads_ids = res.threads.pluck("id").sort()
- res.keywords = _.uniq(res.threads.pluck("keyword"))
- next()
- })
+ db.getThreadsForUser(username, limit, offset).then(function (threads) {
+ res.threads = threads;
+ res.threads_ids = res.threads.pluck("id").sort();
+ res.keywords = _.uniq(res.threads.pluck("keyword"));
+ next();
+ });
},
- ensureTopThreadsForUser: function (req, res, next){
- var username = res.user.username
- var limit = parseInt(req.params.limit) || 10
- var offset = parseInt(req.params.offset) || 0
- if (! username) {
- res.sendStatus(404)
+ ensureTopThreadsForUser: function (req, res, next) {
+ var username = res.user.username;
+ var limit = parseInt(req.params.limit) || 10;
+ var offset = parseInt(req.params.offset) || 0;
+ if (!username) {
+ res.sendStatus(404);
}
- db.getTopThreadsForUser(username, limit, offset).then(function(top_threads){
- res.topThreads = top_threads
- res.topThreads_ids = res.topThreads.pluck("id").sort()
- res.topKeywords = _.uniq(res.topThreads.pluck("keyword"))
- next()
- })
+ db.getTopThreadsForUser(username, limit, offset).then(function (
+ top_threads
+ ) {
+ res.topThreads = top_threads;
+ res.topThreads_ids = res.topThreads.pluck("id").sort();
+ res.topKeywords = _.uniq(res.topThreads.pluck("keyword"));
+ next();
+ });
},
- ensureCommentsForUser: function (req, res, next){
- db.getCommentsForUser(res.user.username).then(function(comments){
- res.comments = comments || []
- next()
- })
+ ensureCommentsForUser: function (req, res, next) {
+ db.getCommentsForUser(res.user.username).then(function (comments) {
+ res.comments = comments || [];
+ next();
+ });
},
- ensureFilesForUser: function (req, res, next){
- db.getFilesForUser(res.user.username).then(function(files){
- res.files = files || []
- next()
- })
+ ensureFilesForUser: function (req, res, next) {
+ db.getFilesForUser(res.user.username).then(function (files) {
+ res.files = files || [];
+ next();
+ });
},
- createKeyword: function (req, res, next){
- if (! req.body.keyword || ! req.body.keyword.length) {
- res.json({ error: "no keyword" })
- return
+ createKeyword: function (req, res, next) {
+ if (!req.body.keyword || !req.body.keyword.length) {
+ res.json({ error: "no keyword" });
+ return;
}
var data = {
keyword: req.body.keyword,
- owner: req.user.get('username'),
+ owner: req.user.get("username"),
createdate: util.now(),
public: 1,
- color: req.body.color || 'blue',
- }
- db.createKeyword(data).then(function(keyword){
- res.keyword = keyword
- next()
- })
+ color: req.body.color || "blue",
+ };
+ db.createKeyword(data).then(function (keyword) {
+ res.keyword = keyword;
+ next();
+ });
},
/* POSTING */
- verifyFilesOrComment: function (req, res, next){
- var hasComment = req.body.comment && req.body.comment.length
- var hasFile = req.files && req.files.length
- if (! hasComment && ! hasFile) {
- console.log(">>> no files or comment")
- return res.sendStatus(400)
+ verifyFilesOrComment: function (req, res, next) {
+ var hasComment = req.body.comment && req.body.comment.length;
+ var hasFile = req.files && req.files.length;
+ if (!hasComment && !hasFile) {
+ console.log(">>> no files or comment");
+ return res.sendStatus(400);
}
- next()
+ next();
},
/* COMMENTS */
- ensureComment: function (req, res, next){
- var id = req.params.id.replace(/\D/g, "")
- if (! id) {
- return res.sendStatus(404)
+ ensureComment: function (req, res, next) {
+ var id = req.params.id.replace(/\D/g, "");
+ if (!id) {
+ return res.sendStatus(404);
}
- db.getCommentById(id).then(function(comment){
+ db.getCommentById(id).then(function (comment) {
if (comment) {
- comment.set('comment', comment.get('comment').toString())
- res.comment = comment
- next()
+ comment.set("comment", comment.get("comment").toString());
+ res.comment = comment;
+ next();
+ } else {
+ res.sendStatus(404);
}
- else {
- res.sendStatus(404)
- }
- })
+ });
},
- createOptionalComment: function(req, res, next){
- if (! req.body.comment || ! req.body.comment.length) {
- return next()
+ createOptionalComment: function (req, res, next) {
+ if (!req.body.comment || !req.body.comment.length) {
+ return next();
}
- bucky.createComment(req, res, next)
+ bucky.createComment(req, res, next);
},
- createComment: function (req, res, next){
- if (! req.body.comment || ! req.body.comment.length) {
- res.json({ error: "no comment" })
- return
+ createComment: function (req, res, next) {
+ if (!req.body.comment || !req.body.comment.length) {
+ res.json({ error: "no comment" });
+ return;
}
var data = {
- thread: res.thread.get('id'),
+ thread: res.thread.get("id"),
parent_id: req.body.parent_id || -1,
- username: req.user.get('username'),
+ username: req.user.get("username"),
date: util.now(),
comment: req.body.comment,
- }
- db.createComment(data).then(function(comment){
- res.comment = comment
- next()
- })
+ };
+ db.createComment(data).then(function (comment) {
+ res.comment = comment;
+ next();
+ });
},
- updateComment: function(req, res, next){
- if (! req.body.comment || ! req.body.comment.length) {
- return res.sendStatus(500)
+ updateComment: function (req, res, next) {
+ if (!req.body.comment || !req.body.comment.length) {
+ return res.sendStatus(500);
}
- res.comment.set('comment', req.body.comment)
- res.comment.set('date', util.now())
- res.comment.save().then(() => {
- next()
- }).catch(err => {
- res.sendStatus(500)
- })
+ res.comment.set("comment", req.body.comment);
+ res.comment.set("date", util.now());
+ res.comment
+ .save()
+ .then(() => {
+ next();
+ })
+ .catch((err) => {
+ res.sendStatus(500);
+ });
},
- moveComment: function(req, res, next){
- res.comment.set('thread', res.thread.get('id'))
- res.comment.save().then(() => {
- next()
- }).catch(err => {
- res.sendStatus(500)
- })
+ moveComment: function (req, res, next) {
+ res.comment.set("thread", res.thread.get("id"));
+ res.comment
+ .save()
+ .then(() => {
+ next();
+ })
+ .catch((err) => {
+ res.sendStatus(500);
+ });
},
- destroyComment: function(req, res, next){
- res.comment.destroy().then(() => {
- next()
- }).catch(err => {
- res.sendStatus(500)
- })
+ destroyComment: function (req, res, next) {
+ res.comment
+ .destroy()
+ .then(() => {
+ next();
+ })
+ .catch((err) => {
+ res.sendStatus(500);
+ });
},
/* FILES */
- ensureFile: function (req, res, next){
- var id = req.params.id.replace(/\D/g, "")
- if (! id) {
- return res.sendStatus(404)
+ ensureFile: function (req, res, next) {
+ var id = req.params.id.replace(/\D/g, "");
+ if (!id) {
+ return res.sendStatus(404);
}
- db.getFileById(id).then(function(file){
+ db.getFileById(id).then(function (file) {
if (file) {
- res.file = file
- next()
+ res.file = file;
+ next();
+ } else {
+ res.sendStatus(404);
}
- else {
- res.sendStatus(404)
- }
- })
+ });
},
- createOptionalFiles: function(req, res, next){
- if (! req.files || ! req.files.length) {
- return next()
+ createOptionalFiles: function (req, res, next) {
+ if (!req.files || !req.files.length) {
+ return next();
}
- bucky.createFiles(req, res, next)
+ bucky.createFiles(req, res, next);
},
- createFiles: function (req, res, next){
- if (! req.files || ! req.files.length) {
- res.json({ error: "no files" })
- return
+ createFiles: function (req, res, next) {
+ if (!req.files || !req.files.length) {
+ res.json({ error: "no files" });
+ return;
}
- var thread_id = res.thread.get('id')
- var dirname = process.env.S3_PATH + '/data/' + thread_id + '/'
+ var thread_id = res.thread.get("id");
+ var dirname = process.env.S3_PATH + "/data/" + thread_id + "/";
var promises = req.files.map((file) => {
- return new Promise( (resolve, reject) => {
+ return new Promise((resolve, reject) => {
upload.put({
file: file,
preserveFilename: true,
dirname: dirname,
- unacceptable: function(err){
- reject(err)
+ unacceptable: function (err) {
+ reject(err);
},
- success: function(url){
- console.log("file >", url)
+ success: function (url) {
+ console.log("file >", url);
var data = {
- thread: res.thread.get('id'),
- username: req.user.get('username'),
+ thread: res.thread.get("id"),
+ username: req.user.get("username"),
filename: file.originalname,
date: util.now(),
size: file.size,
privacy: false,
storage: process.env.S3_BUCKET,
- }
- db.createFile(data).then(function(file){
- resolve(file)
- }).catch( (err) => reject(err) )
- }
- })
+ };
+ db.createFile(data)
+ .then(function (file) {
+ resolve(file);
+ })
+ .catch((err) => reject(err));
+ },
+ });
+ });
+ });
+ Promise.all(promises)
+ .then((values) => {
+ res.files = values;
+ next();
})
- })
- Promise.all(promises).then(values => {
- res.files = values
- next()
- }).catch(err => {
- console.log(err)
- })
+ .catch((err) => {
+ console.log(err);
+ });
},
- moveFile: function(req, res, next){
- db.moveFile(res.file, res.thread.get('id')).then(() => {
- next()
- }).catch(err => {
- res.sendStatus(500)
- })
+ moveFile: function (req, res, next) {
+ db.moveFile(res.file, res.thread.get("id"))
+ .then(() => {
+ next();
+ })
+ .catch((err) => {
+ res.sendStatus(500);
+ });
},
- destroyFile: function(req, res, next){
- var filePromises = db.destroyFiles([res.file])
- Promise.all(filePromises).then( () => next() )
- .catch(err => { console.error(err); next() })
+ destroyFile: function (req, res, next) {
+ var filePromises = db.destroyFiles([res.file]);
+ Promise.all(filePromises)
+ .then(() => next())
+ .catch((err) => {
+ console.error(err);
+ next();
+ });
},
-
/* PROFILE / USER */
- ensureUser: function (req, res, next){
- var username = util.sanitizeName(req.params.username)
- if (! username) {
- return res.sendStatus(404)
+ ensureUser: function (req, res, next) {
+ var username = util.sanitizeName(req.params.username);
+ if (!username) {
+ return res.sendStatus(404);
}
- db.getUserByUsername(username).then(function(user){
+ db.getUserByUsername(username).then(function (user) {
if (user) {
- res.user = user
- next()
- }
- else {
- res.sendStatus(404)
+ res.user = user;
+ next();
+ } else {
+ res.sendStatus(404);
}
- })
+ });
},
- ensureUserFromBody: function (req, res, next){
- var username = util.sanitizeName(req.body.username)
- if (! username) {
- return res.sendStatus(404)
+ ensureUserFromBody: function (req, res, next) {
+ var username = util.sanitizeName(req.body.username);
+ if (!username) {
+ return res.sendStatus(404);
}
- db.getUserByUsername(username).then(function(user){
+ db.getUserByUsername(username).then(function (user) {
if (user) {
- res.user = user
- next()
+ res.user = user;
+ next();
+ } else {
+ console.log("no such user!!");
+ res.sendStatus(404);
}
- else {
- console.log('no such user!!')
- res.sendStatus(404)
- }
- })
+ });
},
- ensureUserlist: function (req, res, next){
- db.getUsers().then(function(users){
- if (! users) {
- return res.sendStatus(404)
+ ensureUserlist: function (req, res, next) {
+ db.getUsers().then(function (users) {
+ if (!users) {
+ return res.sendStatus(404);
}
- res.users = users
- next()
- })
+ res.users = users;
+ next();
+ });
},
ensureUserThreadCounts: function (req, res, next) {
- db.getUserThreadCounts().then(function(counts){
+ db.getUserThreadCounts().then(function (counts) {
if (!counts) {
- return res.sendStatus(404)
+ return res.sendStatus(404);
}
- res.threadCounts = counts
- next()
- })
+ res.threadCounts = counts;
+ next();
+ });
},
ensureUserCommentCounts: function (req, res, next) {
- db.getUserCommentCounts().then(function(counts){
+ db.getUserCommentCounts().then(function (counts) {
if (!counts) {
- return res.sendStatus(404)
+ return res.sendStatus(404);
}
- res.commentCounts = counts
- next()
- })
+ res.commentCounts = counts;
+ next();
+ });
},
ensureUserFileCounts: function (req, res, next) {
- db.getUserFileCounts().then(function(counts){
+ db.getUserFileCounts().then(function (counts) {
if (!counts) {
- return res.sendStatus(404)
+ return res.sendStatus(404);
}
- res.fileCounts = counts
- next()
- })
+ res.fileCounts = counts;
+ next();
+ });
},
ensureUserStatistics: function (req, res, next) {
- var stats = {}
- res.threadCounts.forEach(function(user){
- stats[user.username] = stats[user.username] || {}
- stats[user.username].threads = user.count
- })
- res.commentCounts.forEach(function(user){
- stats[user.username] = stats[user.username] || {}
- stats[user.username].comments = user.count
- })
- res.fileCounts.forEach(function(user){
- stats[user.username] = stats[user.username] || {}
- stats[user.username].files = user.count
- stats[user.username].fileSize = user.size
- })
- res.userStats = stats
- next()
+ var stats = {};
+ res.threadCounts.forEach(function (user) {
+ stats[user.username] = stats[user.username] || {};
+ stats[user.username].threads = user.count;
+ });
+ res.commentCounts.forEach(function (user) {
+ stats[user.username] = stats[user.username] || {};
+ stats[user.username].comments = user.count;
+ });
+ res.fileCounts.forEach(function (user) {
+ stats[user.username] = stats[user.username] || {};
+ stats[user.username].files = user.count;
+ stats[user.username].fileSize = user.size;
+ });
+ res.userStats = stats;
+ next();
},
- sanitizeUser: function(req, res, next) {
- res.user = util.sanitizeUser(res.user)
- next()
+ sanitizeUser: function (req, res, next) {
+ res.user = util.sanitizeUser(res.user);
+ next();
},
- bumpLastSeen: function(req, res, next) {
- req.user.set('lastseen', util.now())
- req.user.save().then( () => next() )
+ bumpLastSeen: function (req, res, next) {
+ req.user.set("lastseen", util.now());
+ req.user.save().then(() => next());
},
- updateProfile: function(req, res, next) {
- var user = res.user
- "realname location email phone website twitter".split(" ").forEach( (field) => {
- res.user.set(field, req.body[field])
- })
- next()
+ updateProfile: function (req, res, next) {
+ var user = res.user;
+ "realname location email phone website twitter"
+ .split(" ")
+ .forEach((field) => {
+ res.user.set(field, req.body[field]);
+ });
+ next();
},
- uploadAvatar: function(req, res, next) {
- if (! req.file) return next()
- var dirname = '/bucky/profile/'
+ uploadAvatar: function (req, res, next) {
+ if (!req.file) return next();
+ var dirname = "/bucky/profile/";
upload.put({
file: req.file,
- filename: req.user.get('username') + '.jpg',
+ filename: req.user.get("username") + ".jpg",
dirname: dirname,
- unacceptable: function(err){
- res.sendStatus({ error: 'Problem uploading avatar.' })
+ unacceptable: function (err) {
+ res.sendStatus({ error: "Problem uploading avatar." });
},
- success: function(url){
- console.log("avatar >", url)
- res.user.set('avatar', url)
- next()
- }
- })
+ success: function (url) {
+ console.log("avatar >", url);
+ res.user.set("avatar", url);
+ next();
+ },
+ });
},
- saveUser: function(req, res, next){
- res.user.save().then( () => next() )
+ saveUser: function (req, res, next) {
+ res.user.save().then(() => next());
},
/* MAIL */
- ensureMailboxes: function (req, res, next){
- var username = req.user.get('username')
- var box = req.params.box
- var mbox = username + "." + box
- if (! box) {
- res.sendStatus(404)
+ ensureMailboxes: function (req, res, next) {
+ var username = req.user.get("username");
+ var box = req.params.box;
+ var mbox = username + "." + box;
+ if (!box) {
+ res.sendStatus(404);
}
- db.getMailboxes(username).then(function(boxes){
- if (! boxes) {
- return res.sendStatus(404)
+ db.getMailboxes(username).then(function (boxes) {
+ if (!boxes) {
+ return res.sendStatus(404);
}
- if (! boxes.models.some(function(box){ return box.get('mbox') == mbox })) {
- return res.sendStatus(404)
+ if (
+ !boxes.models.some(function (box) {
+ return box.get("mbox") == mbox;
+ })
+ ) {
+ return res.sendStatus(404);
}
- res.boxes = boxes
- next()
- })
+ res.boxes = boxes;
+ next();
+ });
},
- ensureMailboxCounts: function (req, res, next){
- db.getMailboxCounts(res.boxes.pluck("mbox")).then(function(counts){
- var lookup = {}
- counts.forEach(function(c){
- lookup[c.mbox] = c
- })
- res.boxes.forEach(function(box){
- var count = lookup[box.get('mbox')] ? lookup[box.get('mbox')].count : 0
- box.set("count", count)
- })
- next()
- })
+ ensureMailboxCounts: function (req, res, next) {
+ db.getMailboxCounts(res.boxes.pluck("mbox")).then(function (counts) {
+ var lookup = {};
+ counts.forEach(function (c) {
+ lookup[c.mbox] = c;
+ });
+ res.boxes.forEach(function (box) {
+ var count = lookup[box.get("mbox")] ? lookup[box.get("mbox")].count : 0;
+ box.set("count", count);
+ });
+ next();
+ });
},
- ensureMessages: function (req, res, next){
- const limit = parseInt(req.query.limit) || 50
- const offset = parseInt(req.query.offset) || 0
- db.getMessages(req.user.get('username'), req.params.box, limit, offset).then(function(messages){
- res.messages = messages
- res.query = { limit, offset }
- next()
- })
+ ensureMessages: function (req, res, next) {
+ const limit = parseInt(req.query.limit) || 50;
+ const offset = parseInt(req.query.offset) || 0;
+ db.getMessages(
+ req.user.get("username"),
+ req.params.box,
+ limit,
+ offset
+ ).then(function (messages) {
+ res.messages = messages;
+ res.query = { limit, offset };
+ next();
+ });
},
- ensureMessage: function(req, res, next){
- db.getMessage(req.params.id).then(function(message){
- if (! message) {
- return res.sendStatus(404)
+ ensureMessage: function (req, res, next) {
+ db.getMessage(req.params.id).then(function (message) {
+ if (!message) {
+ return res.sendStatus(404);
}
- var username = req.user.get('username')
- if (username !== message.get('recipient') && username !== message.get('sender')) {
- res.sendStatus(404)
- return
+ var username = req.user.get("username");
+ if (
+ username !== message.get("recipient") &&
+ username !== message.get("sender")
+ ) {
+ res.sendStatus(404);
+ return;
}
- res.message = message
- next()
- })
+ res.message = message;
+ next();
+ });
},
- checkMail: function(req, res, next){
- db.checkMail(req.user.get('username')).then(function(mail){
- res.mail = mail ? mail[0] : { count: 0 }
- next()
- })
+ checkMail: function (req, res, next) {
+ db.checkMail(req.user.get("username")).then(function (mail) {
+ res.mail = mail ? mail[0] : { count: 0 };
+ next();
+ });
},
- markMessageUnread: function(req, res, next){
- if (res.message.get('unread')) {
- res.message.set('unread', 0)
- res.message.save().then(() => next())
+ markMessageUnread: function (req, res, next) {
+ if (res.message.get("unread")) {
+ res.message.set("unread", 0);
+ res.message.save().then(() => next());
} else {
- next()
+ next();
}
},
- ensureRecipient: function(req, res, next){
- db.getUserByUsername(util.sanitizeName(req.body.username)).then( (user) => {
- if (! user) {
- res.send({ error: "No such recipient" })
- return
+ ensureRecipient: function (req, res, next) {
+ db.getUserByUsername(util.sanitizeName(req.body.username)).then((user) => {
+ if (!user) {
+ res.send({ error: "No such recipient" });
+ return;
}
- next()
- })
+ next();
+ });
},
- sendMessage: function(req, res, next){
- var recipient = util.sanitizeName(req.body.username)
- var sender = req.user.get('username')
- var subject = util.sanitize(req.body.subject)
- var body = util.sanitize(req.body.body)
- res.mail = { sender: sender, recipient: recipient }
+ sendMessage: function (req, res, next) {
+ var recipient = util.sanitizeName(req.body.username);
+ var sender = req.user.get("username");
+ var subject = util.sanitize(req.body.subject);
+ var body = util.sanitize(req.body.body);
+ res.mail = { sender: sender, recipient: recipient };
var recipientMessage = {
mbox: recipient + ".inbox",
unread: true,
@@ -757,7 +809,7 @@ var bucky = module.exports = {
date: util.now(),
subject: subject,
body: body,
- }
+ };
var senderMessage = {
mbox: sender + ".outbox",
unread: false,
@@ -766,23 +818,23 @@ var bucky = module.exports = {
date: util.now(),
subject: subject,
body: body,
- }
+ };
Promise.all([
db.createMessage(recipientMessage),
db.createMessage(senderMessage),
- ]).then( () => next() )
+ ]).then(() => next());
},
- deleteDraft: function(req, res, next){
- if (! req.body.draft_id) return next()
- db.getMessage(req.body.draft_id).then( (message) => {
- if (message.get('sender') === req.user.get('username')) {
- return message.destroy().then( () => next() )
+ deleteDraft: function (req, res, next) {
+ if (!req.body.draft_id) return next();
+ db.getMessage(req.body.draft_id).then((message) => {
+ if (message.get("sender") === req.user.get("username")) {
+ return message.destroy().then(() => next());
}
// erroneous draft message??
- next()
- })
+ next();
+ });
},
- destroyMessage: function(req, res, next) {
- res.message.destroy().then( () => next() )
+ destroyMessage: function (req, res, next) {
+ res.message.destroy().then(() => next());
},
-}
+});
diff --git a/bucky/app/pages.js b/bucky/app/pages.js
index 5d8551e..94ae46e 100644
--- a/bucky/app/pages.js
+++ b/bucky/app/pages.js
@@ -1,137 +1,145 @@
-var middleware = require('../util/middleware')
-var util = require('../util/util')
+var middleware = require("../util/middleware");
+var util = require("../util/util");
-var fortune = require('../db/fortune')
+var fortune = require("../db/fortune");
-module.exports = { route }
+module.exports = { route };
-function route (app){
- app.get("/",
+function route(app) {
+ app.get("/", middleware.ensureAuthenticated, function (req, res) {
+ res.redirect("/index");
+ });
+ app.get("/index", middleware.ensureAuthenticated, function (req, res) {
+ res.render("pages/index", {
+ title: fortune("titles"),
+ hoot_text: fortune("hoots"),
+ });
+ });
+ app.get(
+ "/index/:keyword",
middleware.ensureAuthenticated,
- function(req, res){
- res.redirect('/index')
- })
- app.get("/index",
- middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/index", {
- title: fortune("titles"),
- hoot_text: fortune("hoots"),
- })
- })
- app.get("/index/:keyword",
- middleware.ensureAuthenticated,
- function(req, res){
+ function (req, res) {
res.render("pages/index", {
title: fortune("titles"),
hoot_text: fortune("hoots"),
- })
- })
- app.get("/keywords",
+ });
+ }
+ );
+ app.get("/stream", middleware.ensureAuthenticated, function (req, res) {
+ res.render("pages/stream", {
+ title: fortune("titles"),
+ hoot_text: fortune("hoots"),
+ });
+ });
+ app.get("/keywords", middleware.ensureAuthenticated, function (req, res) {
+ res.render("pages/keywords", { title: "Bucky's keywords" });
+ });
+ app.get("/details/:id", middleware.ensureAuthenticated, function (req, res) {
+ res.render("pages/details", {});
+ });
+ app.get(
+ "/details/:id/settings",
middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/keywords", {title: "Bucky's keywords"})
- })
- app.get("/details/:id",
- middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/details", {})
- })
- app.get("/details/:id/settings",
- middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/details", {})
- })
+ function (req, res) {
+ res.render("pages/details", {});
+ }
+ );
- app.get("/post/",
+ app.get("/post/", middleware.ensureAuthenticated, function (req, res) {
+ res.render("pages/post", { title: "Start a new thread" });
+ });
+ app.get(
+ "/post/:keyword",
middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/post", {title: "Start a new thread"})
- })
- app.get("/post/:keyword",
+ function (req, res) {
+ res.render("pages/post", { title: "Start a new thread" });
+ }
+ );
+ app.get(
+ "/comment/:id/edit",
middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/post", {title: "Start a new thread"})
- })
- app.get("/comment/:id/edit", middleware.ensureAuthenticated, function(req, res){
- res.render("pages/comment_form", {title: "Edit comment"})
- })
+ function (req, res) {
+ res.render("pages/comment_form", { title: "Edit comment" });
+ }
+ );
- app.get("/profile",
+ app.get("/profile", middleware.ensureAuthenticated, function (req, res) {
+ res.render("pages/profile", {
+ title: "profile for " + util.sanitize(req.user.get("username")),
+ });
+ });
+ app.get(
+ "/profile/:username",
middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/profile", {title: "profile for " + util.sanitize(req.user.get('username'))})
- })
- app.get("/profile/:username",
+ function (req, res) {
+ res.render("pages/profile", {
+ title: "profile for " + util.sanitize(req.params.username),
+ });
+ }
+ );
+ app.get(
+ "/profile/:username/edit",
middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/profile", {title: "profile for " + util.sanitize(req.params.username)})
- })
- app.get("/profile/:username/edit",
- middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/profile_form", {title: "edit your profile"})
- })
+ function (req, res) {
+ res.render("pages/profile_form", { title: "edit your profile" });
+ }
+ );
- app.get("/users",
- middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/users", {})
- })
- app.get("/users/all",
- middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/users", {})
- })
+ app.get("/users", middleware.ensureAuthenticated, function (req, res) {
+ res.render("pages/users", {});
+ });
+ app.get("/users/all", middleware.ensureAuthenticated, function (req, res) {
+ res.render("pages/users", {});
+ });
- app.get("/search/",
- middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/search", {title: "search" })
- })
+ app.get("/search/", middleware.ensureAuthenticated, function (req, res) {
+ res.render("pages/search", { title: "search" });
+ });
- app.get("/mail/",
- middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/mailbox", {title: "your inbox" })
- })
- app.get("/mail/compose",
- middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/compose", {
- title: "new message",
- subject: fortune("subjects"),
- verb: "wrote",
- })
- })
- app.get("/mail/:box",
- middleware.ensureAuthenticated,
- function(req, res){
- res.render("pages/mailbox", { title: "your " + util.sanitize(req.params.box) })
- })
- app.get("/mail/compose/:username",
+ app.get("/mail/", middleware.ensureAuthenticated, function (req, res) {
+ res.render("pages/mailbox", { title: "your inbox" });
+ });
+ app.get("/mail/compose", middleware.ensureAuthenticated, function (req, res) {
+ res.render("pages/compose", {
+ title: "new message",
+ subject: fortune("subjects"),
+ verb: "wrote",
+ });
+ });
+ app.get("/mail/:box", middleware.ensureAuthenticated, function (req, res) {
+ res.render("pages/mailbox", {
+ title: "your " + util.sanitize(req.params.box),
+ });
+ });
+ app.get(
+ "/mail/compose/:username",
middleware.ensureAuthenticated,
- function(req, res){
+ function (req, res) {
res.render("pages/compose", {
title: "new message",
subject: fortune("subjects"),
verb: "wrote",
- })
- })
- app.get("/mail/read/:id",
+ });
+ }
+ );
+ app.get(
+ "/mail/read/:id",
middleware.ensureAuthenticated,
- function(req, res){
+ function (req, res) {
res.render("pages/message", {
- title: "read message"
- })
- })
- app.get("/mail/reply/:id",
+ title: "read message",
+ });
+ }
+ );
+ app.get(
+ "/mail/reply/:id",
middleware.ensureAuthenticated,
- function(req, res){
+ function (req, res) {
res.render("pages/compose", {
title: "reply to message",
subject: fortune("subjects"),
verb: fortune("mail-verbs"),
- })
- })
+ });
+ }
+ );
}
diff --git a/bucky/app/site.js b/bucky/app/site.js
index 69f0157..3627bac 100644
--- a/bucky/app/site.js
+++ b/bucky/app/site.js
@@ -42,7 +42,10 @@ site.init = function () {
key: "bucky.sid",
cookie: {
secure: process.env.NODE_ENV === "production",
- domain: "." + process.env.HOST_NAME,
+ domain:
+ process.env.HOST_NAME === "localhost"
+ ? process.env.HOST_NAME
+ : "." + process.env.HOST_NAME,
maxAge: 43200000000,
},
resave: true,
diff --git a/bucky/bin/build-scripts.js b/bucky/bin/build-scripts.js
index 43cb20e..b704129 100644
--- a/bucky/bin/build-scripts.js
+++ b/bucky/bin/build-scripts.js
@@ -1,33 +1,32 @@
-var fs = require('fs')
-var UglifyJS = require("uglify-es")
+var fs = require("fs");
+var UglifyJS = require("uglify-es");
-var index = fs.readFileSync('views/partials/scripts.ejs', "utf8")
+var index = fs.readFileSync("views/partials/scripts.ejs", "utf8");
-var scripts = {}
-index.split('\n')
- .map(line => {
- var pz = line.split('"')
- if (pz.length < 3) return null
- return 'public' + pz[1]
- })
- .filter(fn => !! fn)
- .forEach(fn => {
- scripts[fn] = fs.readFileSync(fn, "utf8")
+var scripts = {};
+index
+ .split("\n")
+ .map((line) => {
+ var pz = line.split('"');
+ if (pz.length < 3) return null;
+ return "public" + pz[1];
})
+ .filter((fn) => !!fn)
+ .forEach((fn) => {
+ scripts[fn] = fs.readFileSync(fn, "utf8");
+ });
var result = UglifyJS.minify(scripts, {
sourceMap: {
filename: "app.js",
- url: "app.js.map"
- }
-})
+ url: "app.js.map",
+ },
+});
if (result.error) {
- console.error(result.error)
+ console.error(result.error);
}
if (result.warnings) {
- console.error(result.warnings)
+ console.error(result.warnings);
}
-fs.writeFileSync("public/assets/min/app.min.js", result.code, "utf8")
-fs.writeFileSync("public/assets/min/app.min.js.map", result.map, "utf8")
-
-
+fs.writeFileSync("public/assets/min/app.min.js", result.code, "utf8");
+fs.writeFileSync("public/assets/min/app.min.js.map", result.map, "utf8");
diff --git a/bucky/db/index.js b/bucky/db/index.js
index 8ab29ff..36541f8 100644
--- a/bucky/db/index.js
+++ b/bucky/db/index.js
@@ -114,6 +114,38 @@ db.getLastlog = function (limit) {
.limit(limit || 10);
};
+/** HOOTSTREAM */
+
+db.getHootstreamFiles = ({ limit, offset }) =>
+ knex("files")
+ .join("threads", "threads.id", "=", "files.thread")
+ .select("files.*")
+ .where("threads.privacy", false)
+ .orderBy("files.id", "desc")
+ .offset(offset)
+ .limit(limit);
+db.getHootstreamComments = ({ limit, offset }) =>
+ knex("comments")
+ .join("threads", "threads.id", "=", "comments.thread")
+ .select("comments.*")
+ .where("threads.privacy", false)
+ .orderBy("comments.id", "desc")
+ .offset(offset)
+ .limit(limit);
+db.getHootstreamThreads = ({ files, comments }) =>
+ Thread.where((builder) =>
+ builder.whereIn(
+ "id",
+ Array.from(
+ new Set(
+ [...comments, ...files]
+ .map((item) => item?.thread)
+ .filter((item) => !!item)
+ )
+ )
+ )
+ ).fetchAll();
+
/* THREADS */
db.getLatestThreads = function () {
@@ -149,6 +181,7 @@ db.getThreadsById = function (ids) {
return Thread.where("id", "in", ids).fetchAll();
};
db.createThread = function (data) {
+ console.log(data);
return new db.Thread(data).save();
};
db.updateThread = function (data) {};
diff --git a/bucky/util/auth.js b/bucky/util/auth.js
index d457704..2ca1b94 100644
--- a/bucky/util/auth.js
+++ b/bucky/util/auth.js
@@ -1,65 +1,61 @@
-var passport = require('passport')
-var LocalStrategy = require('passport-local').Strategy
-var crypto = require('crypto')
-var crypt = require('unix-crypt-td-js')
-var fs = require('fs')
-var db = require('../db')
-var util = require('./util')
-var upload = require('./upload')
+var passport = require("passport");
+var LocalStrategy = require("passport-local").Strategy;
+var crypto = require("crypto");
+var crypt = require("unix-crypt-td-js");
+var fs = require("fs");
+var db = require("../db");
+var util = require("./util");
+var upload = require("./upload");
-var middleware = require('./middleware')
+var middleware = require("./middleware");
-var auth = module.exports = {
-
- init: function(){
- passport.serializeUser(auth.serializeUser)
- passport.deserializeUser(auth.deserializeUser)
- passport.use(new LocalStrategy(auth.verifyLocalUser))
+var auth = (module.exports = {
+ init: function () {
+ passport.serializeUser(auth.serializeUser);
+ passport.deserializeUser(auth.deserializeUser);
+ passport.use(new LocalStrategy(auth.verifyLocalUser));
},
- route: function(app){
- app.get("/login",
- function(req, res){
- res.render("pages/login", {
- title: "login"
- })
- })
- app.get("/signup", function(req, res){
+ route: function (app) {
+ app.get("/login", function (req, res) {
+ res.render("pages/login", {
+ title: "login",
+ });
+ });
+ app.get("/signup", function (req, res) {
res.render("pages/signup", {
- title: "signup"
- })
- })
- app.get("/logout", auth.logout)
+ title: "signup",
+ });
+ });
+ app.get("/logout", auth.logout);
- app.put("/api/signup",
+ app.put(
+ "/api/signup",
auth.checkIfUserExists,
auth.createUser,
passport.authenticate("local"),
auth.createMailboxes,
auth.uploadDefaultAvatar,
- auth.login)
- app.put("/api/login",
- passport.authenticate("local"),
- auth.login)
- app.put("/api/checkin",
- middleware.ensureAuthenticated,
- auth.checkin
- )
- },
+ auth.login
+ );
+ app.put("/api/login", passport.authenticate("local"), auth.login);
+ app.put("/api/checkin", middleware.ensureAuthenticated, auth.checkin);
+ },
checkIfUserExists: function (req, res, next) {
- var username = util.sanitizeName(req.body.username)
+ var username = util.sanitizeName(req.body.username);
db.getUserByUsername(username).then((user) => {
if (user) {
- return res.json({ error: "user exists" })
+ console.log(user);
+ return res.json({ error: "user exists" });
}
- next()
- })
+ next();
+ });
},
createUser: function (req, res, next) {
if (req.body.password !== req.body.password2) {
- return res.json({ error: "passwords don't match" })
+ return res.json({ error: "passwords don't match" });
}
- var username = util.sanitizeName(req.body.username)
+ var username = util.sanitizeName(req.body.username);
var data = {
username: username,
realname: util.sanitize(req.body.realname),
@@ -68,137 +64,147 @@ var auth = module.exports = {
firstseen: util.now(),
lastseen: util.now(),
// lastsession: util.now(),
- }
- db.createUser(data).then(() => next())
+ };
+ db.createUser(data).then(() => next());
},
createMailboxes: function (req, res, next) {
- var username = req.user.get('username')
+ var username = req.user.get("username");
Promise.all([
db.createMailbox({
- mbox: username + '.inbox',
+ mbox: username + ".inbox",
owner: username,
editable: 0,
}),
db.createMailbox({
- mbox: username + '.outbox',
+ mbox: username + ".outbox",
owner: username,
editable: 0,
}),
db.createMailbox({
- mbox: username + '.drafts',
+ mbox: username + ".drafts",
owner: username,
editable: 1,
}),
- ]).then(() => next())
+ ]).then(() => next());
},
- uploadDefaultAvatar: function(req, res, next){
- fs.readFile('public/assets/img/profile.jpg', (err, buf) => {
+ uploadDefaultAvatar: function (req, res, next) {
+ fs.readFile("public/assets/img/profile.jpg", (err, buf) => {
if (err) throw err;
- var username = req.user.get('username')
+ var username = req.user.get("username");
upload.put({
- file: {
- buffer: buf,
- size: buf.length,
- mimetype: 'image/jpeg',
- },
- dirname: '/bucky/profile/',
- filename: username + '.jpg',
- preserveFilename: true,
- success: (url) => {
- next()
- },
- })
+ file: {
+ buffer: buf,
+ size: buf.length,
+ mimetype: "image/jpeg",
+ },
+ dirname: "/bucky/profile/",
+ filename: username + ".jpg",
+ preserveFilename: true,
+ success: (url) => {
+ next();
+ },
+ });
});
},
login: function (req, res) {
if (req.isAuthenticated()) {
- var returnTo = req.session.returnTo
- delete req.session.returnTo
- console.log(">> logged in", req.user.get('username'))
+ var returnTo = req.session.returnTo;
+ delete req.session.returnTo;
+ console.log(">> logged in", req.user.get("username"));
return res.json({
status: "OK",
user: util.sanitizeUser(req.user),
returnTo: returnTo || "/index",
- })
+ });
}
res.json({
- error: 'bad credentials',
- })
+ error: "bad credentials",
+ });
},
- serializeUser: function (user, done) {
- done(null, user.id);
- },
+ serializeUser: function (user, done) {
+ done(null, user.id);
+ },
- deserializeUser: function (id, done) {
- db.getUser(id).then(function(user){
- done(! user, user)
- })
- },
+ deserializeUser: function (id, done) {
+ db.getUser(id).then(function (user) {
+ done(!user, user);
+ });
+ },
- makePassword: function(username, password) {
- var salt = username.substr(0, 2) // lol
- return crypt(password, salt)
+ makePassword: function (username, password) {
+ var salt = username.substr(0, 2); // lol
+ return crypt(password, salt);
// var shasum = crypto.createHash('sha1')
// shasum.update(password)
// return shasum.digest('hex');
- },
+ },
- validPassword: function(user, password){
- return user.get('password') === auth.makePassword(user.get('username'), password);
+ validPassword: function (user, password) {
+ return (
+ user.get("password") === auth.makePassword(user.get("username"), password)
+ );
},
- changePassword: function(req, res, next) {
- if (! req.body.oldpassword && ! req.body.newpassword) return next()
+ changePassword: function (req, res, next) {
+ if (!req.body.oldpassword && !req.body.newpassword) return next();
if (req.body.newpassword !== req.body.newpassword2) {
- return res.send({ error: 'Passwords don\'t match.' })
+ return res.send({ error: "Passwords don't match." });
}
- if (! auth.validPassword(res.user, req.body.oldpassword)) {
- return res.send({ error: 'Password is incorrect.' })
+ if (!auth.validPassword(res.user, req.body.oldpassword)) {
+ return res.send({ error: "Password is incorrect." });
}
- var username = req.user.get('username')
- var newPassword = auth.makePassword(username, req.body.newpassword)
- res.user.set('password', newPassword)
- res.user.save().then(() => next()).catch(err => res.send({ error: err }))
+ var username = req.user.get("username");
+ var newPassword = auth.makePassword(username, req.body.newpassword);
+ res.user.set("password", newPassword);
+ res.user
+ .save()
+ .then(() => next())
+ .catch((err) => res.send({ error: err }));
},
- changePasswordDangerously: function(req, res, next){
- if (! req.body.password && ! req.body.newpassword) return next()
+ changePasswordDangerously: function (req, res, next) {
+ if (!req.body.password && !req.body.newpassword) return next();
if (req.body.newpassword !== req.body.newpassword2) {
- return res.send({ error: 'Passwords don\'t match.' })
+ return res.send({ error: "Passwords don't match." });
}
- if (! auth.validPassword(req.user, req.body.password)) {
- return res.send({ error: 'Password is incorrect.' })
+ if (!auth.validPassword(req.user, req.body.password)) {
+ return res.send({ error: "Password is incorrect." });
}
- var username = res.user.get('username')
- var newPassword = auth.makePassword(username, req.body.newpassword)
- res.user.set('password', newPassword)
- res.user.save().then(() => next()).catch(err => res.send({ error: err }))
+ var username = res.user.get("username");
+ var newPassword = auth.makePassword(username, req.body.newpassword);
+ res.user.set("password", newPassword);
+ res.user
+ .save()
+ .then(() => next())
+ .catch((err) => res.send({ error: err }));
},
- verifyLocalUser: function (username, password, done) {
+ verifyLocalUser: function (username, password, done) {
// handle passwords!!
- db.getUserByUsername(username).then(function(user){
-
- // if (err) { return done(err); }
- if (! user) { return done("no user") }
+ db.getUserByUsername(username).then(function (user) {
+ // if (err) { return done(err); }
+ if (!user) {
+ return done("no user");
+ }
// return done(null, user)
- if (! user || ! auth.validPassword(user, password)) {
- return done(null, false, { error: { message: 'Bad username/password.' } })
- }
- return done(null, user);
- })
- },
+ if (!user || !auth.validPassword(user, password)) {
+ return done(null, false, {
+ error: { message: "Bad username/password." },
+ });
+ }
+ return done(null, user);
+ });
+ },
checkin: function (req, res) {
- var user = util.sanitizeUser(req.user)
- res.json({ user: user })
+ var user = util.sanitizeUser(req.user);
+ res.json({ user: user });
},
- logout: function (req, res) {
- req.logout();
- res.redirect('/');
- },
-
-}
+ logout: function (req, res) {
+ req.logout();
+ res.redirect("/");
+ },
+});