summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bucky/app/api.js (renamed from bucky/app/router.js)116
-rw-r--r--bucky/app/index.js18
-rw-r--r--bucky/app/pages.js116
-rw-r--r--bucky/util/federate.js (renamed from bucky/app/federate.js)37
-rw-r--r--package-lock.json8
-rw-r--r--package.json4
-rw-r--r--public/assets/js/lib/views/details/settings.js5
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 = "/"
},