summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2015-09-07 14:29:23 -0400
committerJules Laplace <jules@okfoc.us>2015-09-07 14:29:23 -0400
commit43265c66f757222bbe8fefb670300c0a3d3b51bf (patch)
tree175240fb3041b3f6cd60b0c3a33d391493941542
parentff6954f49a4006095ddcf85289679fc515a38f82 (diff)
stub middleware
-rw-r--r--lib/bucky.js32
-rw-r--r--lib/router.js55
-rw-r--r--lib/util.js1
-rw-r--r--public/assets/js/lib/router.js3
-rw-r--r--public/assets/js/lib/views/mail/mailbox.js1
-rw-r--r--views/partials/header.ejs2
-rw-r--r--views/partials/scripts.ejs1
7 files changed, 87 insertions, 8 deletions
diff --git a/lib/bucky.js b/lib/bucky.js
index 997d680..742f74d 100644
--- a/lib/bucky.js
+++ b/lib/bucky.js
@@ -70,6 +70,9 @@ var bucky = module.exports = {
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){
if (thread) {
res.thread = thread
@@ -106,7 +109,7 @@ var bucky = module.exports = {
ensureKeyword: function (req, res, next){
var keyword = req.params.keyword
if (! keyword) {
- res.sendStatus(404)
+ return res.sendStatus(404)
}
db.getKeyword(keyword).then(function(k){
if (! k) {
@@ -128,5 +131,32 @@ var bucky = module.exports = {
next()
})
},
+
+ /* MAIL */
+ ensureMailbox: function (req, res, next){
+ var box = req.params.box
+ if (! box) {
+ res.sendStatus(404)
+ }
+ db.getMailbox(req.user.username, box).then(function(box){
+ if (! box) {
+ return res.sendStatus(404)
+ }
+ next()
+ })
+ },
+ ensureMailboxCounts: function (req, res, next){
+ db.getMailboxes(req.user.username).then(function(boxes){
+ res.boxes = boxes
+ next()
+ })
+ },
+ ensureMessages: function (req, res, next){
+ // todo: define offset
+ db.getMessages(req.user.username, req.params.box, 50, 0).then(function(messages){
+ res.messages = messages
+ next()
+ })
+ },
} \ No newline at end of file
diff --git a/lib/router.js b/lib/router.js
index 92c0054..e2ba442 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -28,6 +28,7 @@ module.exports = function(app){
app.post("/api/login", auth.loggedInLocal)
app.get("/api/index",
+ middleware.ensureAuthenticated,
bucky.ensureLatestThreads,
bucky.ensureCommentCountsForThreads,
bucky.ensureFileCountsForThreads,
@@ -43,6 +44,7 @@ module.exports = function(app){
}
)
app.get("/api/thread/:id",
+ middleware.ensureAuthenticated,
bucky.ensureThread,
bucky.ensureKeywordForThread,
bucky.ensureCommentsForThread,
@@ -56,14 +58,21 @@ module.exports = function(app){
})
}
)
- app.post("/api/thread/:id", function(req, res){
+ app.post("/api/thread/:id",
+ middleware.ensureAuthenticated,
+ function(req, res){
})
- app.post("/api/thread/:id/comment", function(req, res){
+ app.post("/api/thread/:id/comment",
+ middleware.ensureAuthenticated,
+ function(req, res){
})
- app.delete("/api/thread/:id", function(req, res){
+ app.delete("/api/thread/:id",
+ middleware.ensureAuthenticated,
+ function(req, res){
})
app.get("/api/keyword/:keyword",
+ middleware.ensureAuthenticated,
bucky.ensureKeyword,
bucky.ensureThreadsForKeyword,
bucky.ensureCommentCountsForThreads,
@@ -77,9 +86,45 @@ module.exports = function(app){
}
)
- app.put("/api/comment/:id", function(req, res){
+ app.put("/api/comment/:id",
+ middleware.ensureAuthenticated,
+ function(req, res){
})
- app.delete("/api/comment/:id", function(req, res){
+ app.delete("/api/comment/:id",
+ middleware.ensureAuthenticated,
+ function(req, res){
})
+ app.get("/mail/",
+ middleware.ensureAuthenticated,
+ function(req, res){
+ res.render("pages/mailbox", {title: "inbox" })
+ }
+ )
+ app.get("/mail/:box",
+ middleware.ensureAuthenticated,
+ function(req, res){
+ res.render("pages/mailbox", { title: util.sanitize(req.params.box) })
+ }
+ )
+ app.get("/mail/read/:id",
+ middleware.ensureAuthenticated,
+ function(req, res){
+ res.render("pages/message", { title: util.sanitize(req.params.box) })
+ }
+ )
+
+ app.get("/api/mailbox/:box",
+ middleware.ensureAuthenticated,
+ bucky.ensureMailbox,
+ bucky.ensureMailboxCounts,
+ bucky.ensureMessages,
+ function(req, res){
+ res.json({
+ messages: res.messages,
+ boxes: res.boxes,
+ })
+ }
+ )
+
}
diff --git a/lib/util.js b/lib/util.js
index 11c0cac..e67488b 100644
--- a/lib/util.js
+++ b/lib/util.js
@@ -1,3 +1,4 @@
var util = module.exports = {}
util.sanitizeName = function (s){ return (s || "").replace(new RegExp("[^-_a-zA-Z0-9]", 'g'), "") }
+util.sanitize = function (s){ return (s || "").replace(/<>&/g, "") }
diff --git a/public/assets/js/lib/router.js b/public/assets/js/lib/router.js
index 64b8719..0482c0e 100644
--- a/public/assets/js/lib/router.js
+++ b/public/assets/js/lib/router.js
@@ -9,6 +9,7 @@ var SiteRouter = Router.extend({
"/index": 'index',
"/login": 'login',
"/details/:id": 'details',
+ "/mail": 'mailbox',
"/mail/:mailbox": 'mailbox',
"/mail/read/:id": 'message',
"/mail/compose": 'compose',
@@ -32,7 +33,7 @@ var SiteRouter = Router.extend({
},
mailbox: function(box){
- app.view = new Mailbox ()
+ app.view = new MailboxView ()
app.view.load(box)
},
diff --git a/public/assets/js/lib/views/mail/mailbox.js b/public/assets/js/lib/views/mail/mailbox.js
index fb85252..315a713 100644
--- a/public/assets/js/lib/views/mail/mailbox.js
+++ b/public/assets/js/lib/views/mail/mailbox.js
@@ -13,6 +13,7 @@ var MailboxView = View.extend({
},
load: function(name){
+ name = sanitize(name) || "inbox"
$("h1").html(name)
$.get(this.action + name, this.populate.bind(this))
},
diff --git a/views/partials/header.ejs b/views/partials/header.ejs
index 799040f..6cd7b2e 100644
--- a/views/partials/header.ejs
+++ b/views/partials/header.ejs
@@ -23,7 +23,7 @@
<a href="/index">home</a> |
<a href="/search">search</a> |
<a href="/post">post</a> |
- <a href="/inbox">inbox</a> |
+ <a href="/mail">inbox</a> |
<a href="/message">message</a> |
<a href="/profile">profile</a> |
<a href="/logout">logout</a>
diff --git a/views/partials/scripts.ejs b/views/partials/scripts.ejs
index da76d88..d0f5908 100644
--- a/views/partials/scripts.ejs
+++ b/views/partials/scripts.ejs
@@ -27,5 +27,6 @@
<script src="/assets/js/lib/views/mail/mailbox.js"></script>
<script src="/assets/js/lib/views/mail/message.js"></script>
+<script src="/assets/js/lib/views/mail/compose.js"></script>
<script src="/assets/js/index.js"></script>