Files
JMuseum/models/ResourceManager.js
2018-02-26 14:09:18 +08:00

57 lines
1.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const User = require("./mongooseSchemas/User");
const Painting = require("./mongooseSchemas/Painting");
const router = require("express").Router();
let sourceDir;
/**
* 用於初始化的函式。
* @param {string} sourceDirectory 被管理的資源的根目錄。
*/
function Initialize(sourceDirectory) {
sourceDir = sourceDirectory;
return router;
}
/**
* 檢查使用者是否登入。如果已登入則進行下一步反之則回送403狀態碼。
* @param {Express.Request} req Express的Request物件。
* @param {Express.Response} res Express的Response物件。
* @param {Function} next 導向函式。
*/
function CheckUserLogin(req, res, next) {
if (req.session.passport && req.session.passport.user) {
next();
}
else {
res.state(403).send("Forbidden");
}
}
/**
* 嘗試取得指定的圖畫影像。經過登入檢查之後,還要再檢查該項圖畫是否存在或屬於使用者。
*/
router.get("/db/paintings/:painting_file", (req, res) => {
let user_id = (req.session.passport && req.session.passport.user) ? req.session.passport.user : null;
let fileName = req.params.painting_file; // 取得URL參數中的檔案名稱
let painting_id = fileName.substr(0, fileName.length - 4); // 去掉後面的".png"
// 檢查使用者是否有足夠的權限訪問此畫作
Painting.CheckViewAuthority(painting_id, user_id, (err, result) => {
if (err) {
res.state(500).send("Internal Server Error");
return;
}
// 若權限足夠則將圖畫檔案送至客戶端若無則回送403。
if (result) {
res.status(200).sendFile(sourceDir + "/paintings/" + fileName);
}
else {
res.status(403).send("Forbidden");
}
});
});
module.exports = Initialize;