diff options
| -rw-r--r-- | bucky/app/api.js (renamed from bucky/app/router.js) | 116 | ||||
| -rw-r--r-- | bucky/app/index.js | 18 | ||||
| -rw-r--r-- | bucky/app/pages.js | 116 | ||||
| -rw-r--r-- | bucky/util/federate.js (renamed from bucky/app/federate.js) | 37 | ||||
| -rw-r--r-- | package-lock.json | 8 | ||||
| -rw-r--r-- | package.json | 4 | ||||
| -rw-r--r-- | public/assets/js/lib/views/details/settings.js | 5 |
7 files changed, 184 insertions, 120 deletions
diff --git a/bucky/app/router.js b/bucky/app/api.js index 7380a22..5635ce9 100644 --- a/bucky/app/router.js +++ b/bucky/app/api.js @@ -7,72 +7,10 @@ var db = require('../db') var bucky = require('./bucky') var search = require('../search/middleware') var fortune = require('../db/fortune') -var federate = require('./federate') -module.exports = function(app){ - app.all('*', middleware.ensureLocals) - - auth.init() - - 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.render("pages/index", { - title: fortune("titles"), - hoot_text: fortune("hoots"), - }) - }) - app.get("/keywords", middleware.ensureAuthenticated, function(req, res){ - res.render("pages/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", {}) - }) - - 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("/comment/:id/edit", middleware.ensureAuthenticated, function(req, res){ - res.render("pages/comment_form", {title: "Edit comment"}) - }) - - 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.params.username)}) - }) - app.get("/profile/:username/edit", - middleware.ensureAuthenticated, - function(req, res){ - res.render("pages/profile_form", {title: "edit your profile"}) - }) +module.exports = { route } +function route (app){ /* users */ app.get("/api/user/:username", @@ -231,11 +169,6 @@ module.exports = function(app){ /* search */ - app.get("/search/", - middleware.ensureAuthenticated, - function(req, res){ - res.render("pages/search", {title: "search" }) - }) app.get("/api/search", middleware.ensureAuthenticated, search.search, @@ -281,52 +214,9 @@ module.exports = function(app){ }) }) + /* mail */ - 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){ - res.render("pages/compose", { - title: "new message", - subject: fortune("subjects"), - verb: "wrote", - }) - }) - app.get("/mail/read/:id", - middleware.ensureAuthenticated, - function(req, res){ - res.render("pages/message", { - title: "read message" - }) - }) - app.get("/mail/reply/:id", - middleware.ensureAuthenticated, - function(req, res){ - res.render("pages/compose", { - title: "reply to message", - subject: fortune("subjects"), - verb: fortune("mail-verbs"), - }) - }) app.get("/api/mailbox/:box", middleware.ensureAuthenticated, bucky.ensureMailboxes, diff --git a/bucky/app/index.js b/bucky/app/index.js index 19435da..63a285d 100644 --- a/bucky/app/index.js +++ b/bucky/app/index.js @@ -18,7 +18,11 @@ var upload = require('../util/upload') var app, server -var federate = require('./federate') +var federate = require('../util/federate') +var auth = require('../util/auth.js') +var middleware = require('../util/middleware.js') +var api = require('./api.js') +var pages = require('./pages.js') var site = module.exports = {} site.init = function(){ @@ -50,6 +54,7 @@ site.init = function(){ saveUninitialized: false, })) + upload.init() federate.route(app) app.use(csurf({ @@ -66,9 +71,13 @@ site.init = function(){ console.log('Bucky listening at http://' + process.env.HOST_NAME + ':%s', server.address().port) }) - upload.init() + auth.init() + + app.all('*', middleware.ensureLocals) - site.route(app) + api.route(app) + pages.route(app) + auth.route(app) app.set('view engine', 'ejs') app.set('views', path.join(__dirname, '../../views')) @@ -80,4 +89,5 @@ site.init = function(){ } } -site.route = require('./router') +site.api = require('./api') +site.pages = require('./pages') diff --git a/bucky/app/pages.js b/bucky/app/pages.js new file mode 100644 index 0000000..ebc9317 --- /dev/null +++ b/bucky/app/pages.js @@ -0,0 +1,116 @@ +var middleware = require('../util/middleware') +var util = require('../util/util') + +var fortune = require('../db/fortune') + +module.exports = { route } + +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.render("pages/index", { + 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/details", {}) + }) + + 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("/comment/:id/edit", middleware.ensureAuthenticated, function(req, res){ + res.render("pages/comment_form", {title: "Edit comment"}) + }) + + 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.params.username)}) + }) + app.get("/profile/:username/edit", + middleware.ensureAuthenticated, + function(req, res){ + res.render("pages/profile_form", {title: "edit your profile"}) + }) + 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", + middleware.ensureAuthenticated, + function(req, res){ + res.render("pages/compose", { + title: "new message", + subject: fortune("subjects"), + verb: "wrote", + }) + }) + app.get("/mail/read/:id", + middleware.ensureAuthenticated, + function(req, res){ + res.render("pages/message", { + title: "read message" + }) + }) + app.get("/mail/reply/:id", + middleware.ensureAuthenticated, + function(req, res){ + res.render("pages/compose", { + title: "reply to message", + subject: fortune("subjects"), + verb: fortune("mail-verbs"), + }) + }) +} diff --git a/bucky/app/federate.js b/bucky/util/federate.js index 51b34f6..e94c722 100644 --- a/bucky/app/federate.js +++ b/bucky/util/federate.js @@ -1,5 +1,8 @@ var fetch = require('node-fetch') +const readFile = require('fs-readfile-promise') var db = require('../db') +var upload = require('../util/upload') +var mime = require('mime-types') module.exports = { @@ -57,8 +60,9 @@ module.exports = { return db.getFilesForThread(req.params.id) }).then(files => { var promises = files.map(file => { + storeFile(file) file.set('thread', thread_id) - send("file", file) + return send("file", file) }) return promises }).then( () => { @@ -80,6 +84,37 @@ module.exports = { }, }).then((res) => {return res.json()}) } + function storeFile(file){ + // since for now we are essentially backing up local files, + // upload them directly to s3 + const bucky_fn = file.get('thread') + '/' + file.get('filename') + readFile('public/data/' + bucky_fn) + .then(buffer => { + const remote_path = '/bucky/data/' + bucky_fn + upload.client().putBuffer(buffer, remote_path, { + 'Content-Length': buffer.length, + 'Content-Type': mime.lookup(file.get('filename')), + 'x-amz-acl': 'public-read' + }, function(err, s3res) { + if (err || s3res.statusCode !== 200) { + console.error(err); + if (s3res && s3res.resume) { + s3res.resume() + } + return; + } + var file_url = s3res.url || s3res.req.url + + console.log(file_url) + }).on('error', function(err, s3res){ + console.error(err) + s3res && s3res.resume && s3res.resume() + }) + }).catch(e => { + console.error(e) + + }) + } } }
\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 71b0a4b..16d42a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -978,6 +978,14 @@ "rimraf": "2.6.2" } }, + "fs-readfile-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fs-readfile-promise/-/fs-readfile-promise-3.0.0.tgz", + "integrity": "sha1-j2ZZO8GW5LbBb0oVbE/NfMMcr9M=", + "requires": { + "graceful-fs": "4.1.11" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", diff --git a/package.json b/package.json index 08d962c..ab3390e 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "express": "^4.13.3", "express-json": "^1.0.0", "express-session": "^1.11.3", + "fs-readfile-promise": "^3.0.0", "knex": "^0.8.6", "knox": "^0.9.2", "lodash": "^3.10.1", @@ -43,5 +44,8 @@ "skipper": "^0.5.5", "uglify-es": "^3.2.2", "unix-crypt-td-js": "^1.0.0" + }, + "devDependencies": { + "mime-types": "^2.1.17" } } diff --git a/public/assets/js/lib/views/details/settings.js b/public/assets/js/lib/views/details/settings.js index 0a77774..06bb315 100644 --- a/public/assets/js/lib/views/details/settings.js +++ b/public/assets/js/lib/views/details/settings.js @@ -53,7 +53,7 @@ var ThreadSettingsForm = FormView.extend({ option.innerHTML = color $color.append(option) }) - $color.val(thread.color || keyword ? keyword.color : "") + $color.val(thread && thread.color? thread.color: keyword? keyword.color: "") this.toggleAllowed() this.fetchKeywords() @@ -201,7 +201,8 @@ var ThreadSettingsForm = FormView.extend({ method: "DELETE", url: "/api/thread/" + id, headers: { "csrf-token": $("[name=_csrf]").attr("value") }, - data: { csrf: csrf() }, + data: JSON.stringify({ csrf: csrf() }), + dataType: "application/json", success: function(){ window.location.href = "/" }, |
