You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.8 KiB
CoffeeScript
83 lines
2.8 KiB
CoffeeScript
Promise = require "bluebird"
|
|
router = require("express-promise-router")()
|
|
errors = require "errors"
|
|
moment = require "moment"
|
|
|
|
path = require "path"
|
|
|
|
rfr = require "rfr"
|
|
parseBoolean = rfr "lib/parse-boolean"
|
|
config = rfr "config.json"
|
|
|
|
router.param "documentSlug", (req, res, next, documentSlug) ->
|
|
Promise.try ->
|
|
req.model("Document").getOneWhere SlugId: documentSlug
|
|
.then (document) ->
|
|
req.document = document
|
|
|
|
if document.get("Public") != 1
|
|
res.append "X-Robots-Tag", "noindex"
|
|
|
|
next()
|
|
.catch req.db.NotFoundError, (err) ->
|
|
next new errors.Http404Error "No such document exists."
|
|
|
|
router.get "/:documentSlug", (req, res) ->
|
|
Promise.try ->
|
|
if req.document.get "Disabled"
|
|
res.locals.abuseReason = true
|
|
|
|
Promise.reject new errors.Http403Error
|
|
message: "This document is not available."
|
|
subMessage: "It may have been removed for violation of the Terms of Service, or on request of the uploader."
|
|
explanation: req.document.get "DisabledReason"
|
|
else
|
|
documentData = req.document.toJSON()
|
|
documentData.Uploaded = moment(req.document.get("Uploaded")).format "MMM Do, YYYY hh:mm:ss"
|
|
|
|
res.render "view",
|
|
document: documentData
|
|
currentMonth: moment().format "MMMM YYYY"
|
|
|
|
router.get "/:documentSlug/embed", (req, res) ->
|
|
Promise.try ->
|
|
res.locals.compactLayout = true
|
|
|
|
if req.document.get "Disabled"
|
|
res.locals.abuseReason = true
|
|
|
|
Promise.reject new errors.Http403Error
|
|
message: "This document is not available."
|
|
subMessage: "It may have been removed for violation of the Terms of Service, or on request of the uploader."
|
|
explanation: req.document.get("DisabledReason")
|
|
else
|
|
# We want our update to be atomic, so we can't use the default model, and need to construct a Knex query instead.
|
|
req.model("Document").query()
|
|
.where SlugId: req.params.documentSlug
|
|
.increment "Views"
|
|
.catch (err) ->
|
|
# An error here is not very important - we'll log it still, but we won't need to abort the request.
|
|
req.reportError(err)
|
|
|
|
res.render "embed",
|
|
document: req.document.toJSON()
|
|
sparse: parseBoolean(req.query.sparse) ? false
|
|
footer: parseBoolean(req.query.footer) ? true
|
|
showDonationLink: parseBoolean(req.query.donation_link) ? false
|
|
url: "/d/#{req.document.toJSON().SlugId}/download"
|
|
|
|
router.get "/:documentSlug/download", (req, res) ->
|
|
Promise.try ->
|
|
if req.document.get "Disabled"
|
|
res.locals.abuseReason = true
|
|
|
|
Promise.reject new errors.Http403Error
|
|
message: "This document is not available."
|
|
subMessage: "It may have been removed for violation of the Terms of Service, or on request of the uploader."
|
|
explanation: req.document.get("DisabledReason")
|
|
else
|
|
document = req.document.toJSON()
|
|
res.download path.join(config.storage_path, document.Filename), document.OriginalFilename
|
|
|
|
module.exports = router
|