UNPKG

imboard

Version:

Most convenient platform for webpage development.

868 lines (777 loc) 21.8 kB
var ArticleDao = require(_path.src + "/dao/ArticleDao.js"); var CommentDao = require(_path.src + "/dao/CommentDao.js"); var ArticleVo = require(_path.src + '/vo/ArticleVo.js'); var UserVo = require(_path.src + '/vo/UserVo.js'); var ArticleReaderVo = require(_path.src + "/vo/ArticleReaderVo.js"); var UserDao = require(_path.src + "/dao/UserDao.js"); var ArticleReaderDao = require(_path.src + "/dao/ArticleReaderDao.js"); var easyimg = require('easyimage'); var fs = require('fs'); module.exports.getArticleListCount = { type : 'post', path : '/article/getArticleListCount.do', callback : function(req, res) { var param = req.body; var boardId = param.boardId; if(!param.searchData) param.searchData = {}; if(req.session.user != null) { param.searchData.signinUserId = req.session.user.id; param.searchData.signinUserLevel = req.session.user.level; } if(param.searchData.startIndex) param.searchData.startIndex = parseInt(param.searchData.startIndex); if(param.searchData.endIndex) param.searchData.endIndex = parseInt(param.searchData.endIndex); ArticleDao.getArticleListCount(boardId, param.searchData, function(response) { res.end(JSON.stringify({code : _code.SUCCESS, data : response, msg : "SUCCESS"})); }); } }; module.exports.getArticleList = { type : 'post', path : '/article/getArticleList.do', auth : {check : true}, callback : function(req, res) { var param = req.body; var boardId = param.boardId; if(param.searchData == null) param.searchData = {}; var pageIndex = param.searchData.pageIndex; var cpp = param.searchData.cpp; try { if(pageIndex != null && cpp != null) { param.searchData.startIndex = parseInt(cpp) * (parseInt(pageIndex) -1); param.searchData.endIndex = parseInt(cpp); } } catch(err) { param.searchData.startIndex = null; param.searchData.endIndex = null; } if(param.searchData.startIndex) param.searchData.startIndex = parseInt(param.searchData.startIndex); if(param.searchData.endIndex) param.searchData.endIndex = parseInt(param.searchData.endIndex); if(req.session.user != null) { param.searchData.signinUserId = req.session.user.id; param.searchData.signinUserLevel = req.session.user.level; } ArticleDao.getArticleList(boardId, param.searchData, function(response) { res.end(JSON.stringify({code : _code.SUCCESS, data : response, msg : "SUCCESS"})); }); } }; module.exports.getArticle = { type : 'post', path : '/article/getArticle.do', auth : {check : true}, callback : function(req, res) { var param = req.body; if(req.session.user != null) { if(param.searchData == null) param.searchData = {}; param.searchData.signinUserId = req.session.user.id; param.searchData.signinUserLevel = req.session.user.level; } _async.waterfall([ function(cb) { ArticleDao.getArticle(param.boardId, param.seq, param.searchData, function(response) { if(response != null) { if(response.password != null) { if((req.session.user != null && req.session.user.level < 0) || response.password == param.password) { cb(null, response); } else { res.end(JSON.stringify({code : _code.ACCESS_DENIED})); } } else { cb(null, response); } } else { res.end(JSON.stringify({code : _code.ERROR})); } }); }, function(response, cb) { response.password = null; if(param.seq != null) { var userId = null; if(req.session.user != null && req.session.user.id != null) userId = req.session.user.id; else userId = (req.headers['x-forwarded-for'] || req.connection.remoteAddress) + "__" + req.headers['user-agent']; ArticleReaderDao.getArticleReader(param.boardId, param.seq, userId, function(articleReader) { if(articleReader == null) { var vo = new ArticleReaderVo(); vo.boardId = param.boardId; vo.articleSeq = param.seq; vo.userId = userId; ArticleReaderDao.insertArticleReader(vo); ArticleDao.updateHit(vo.boardId, vo.articleSeq, function() { res.end(JSON.stringify({code : _code.SUCCESS, data : response, msg : "SUCCESS"})); }); } else { res.end(JSON.stringify({code : _code.SUCCESS, data : response, msg : "SUCCESS"})); } }); } else { res.end(JSON.stringify({code : _code.SUCCESS, data : response, msg : "SUCCESS"})); } } ]); } }; module.exports.insertArticle = { type : 'post', path : '/article/insertArticle.do', auth : {check : true}, callback : function(req, res) { var param = req.body; var vo = new ArticleVo(param); if(!vo.writerId && req.session.user != null) vo.writerId = req.session.user.id; ArticleDao.getNextSeq(vo.boardId, function(seq) { if(seq == null) seq = 1; else seq++; vo.seq = seq; if(!req.session.user || req.session.user.level >= 0) vo.isNotice = null; ArticleDao.insertArticleWithSeq(vo, function(response) { res.end(JSON.stringify({code : _code.SUCCESS, message : "SUCCESS", data:{seq : seq}})); }); }); } }; function updateArticle(req, res) { var param = req.body; if(!param.searchData) param.searchData = {}; param.searchData.signinUserId = req.session.user ? req.session.user.id : ""; var vo = new ArticleVo(param); ArticleDao.getArticle(param.boardId, param.seq, param.searchData, function(response) { if(response) { if((!response.writerId && (!response.password || response.password == param.password)) || (req.session && req.session.user && (req.session.user.id == response.writerId || req.session.user.level < 0))) { ArticleDao.updateArticle(vo, function(response) { if(response == 1) res.end(JSON.stringify({code : _code.SUCCESS, data : {seq : param.seq}, msg : "SUCCESS"})); else res.end(JSON.stringify({code : _code.ERROR, message : "FAIL", data : response})); }); } else { res.end(JSON.stringify({code : _code.ACCESS_DENIED, data : '', msg : "ACCESS_DENIED"})); } } else { res.end(JSON.stringify({code : _code.ACCESS_DENIED, data : '', msg : "ARTICLE IS NOT FOUND"})); } }); } module.exports.updateArticle = { type : 'post', path : '/article/updateArticle.do', auth : {check : true}, callback : function(req, res) { updateArticle(req, res); } }; module.exports.writeArticle = { type : 'post', path : '/article/writeArticle.do', callback : function(req, res) { var param = req.body; if(!param.searchData) param.searchData = {}; if(req.session.user) param.searchData.signinUserId = req.session.user.id; var vo = new ArticleVo(param); if(vo.writerId == null && req.session.user != null) vo.writerId = req.session.user.id; if(vo.seq) { updateArticle(req, res); } else { ArticleDao.getNextSeq(vo.boardId, function(seq) { if(seq == null) seq = 1; else seq++; vo.seq = seq; ArticleDao.insertArticleWithSeq(vo, function(response) { res.end(JSON.stringify({code : _code.SUCCESS, message : "SUCCESS", data:{seq : seq}})); }); }); } } }; module.exports.updateArticleBoardId = { type : 'post', path : '/article/updateArticleBoardId.do', callback : function(req, res) { var param = req.body; ArticleDao.updateArticleBoardId(new ArticleVo(param), function(response) { if(response == 1) res.end(JSON.stringify({code : _code.SUCCESS, data : _code.SUCCESS, msg : "SUCCESS"})); else res.end(JSON.stringify({code : _code.ERROR, message : "FAIL", data : response})); }); } }; module.exports.updateHit = { type : 'post', path : '/article/updateHit.do', callback : function(req, res) { var param = req.body; ArticleDao.updateHit(param.boardId, param.seq, function(response) { if(response == 1) res.end(JSON.stringify({code : _code.SUCCESS, data : _code.SUCCESS, msg : "SUCCESS"})); else res.end(JSON.stringify({code : _code.ERROR, message : "FAIL", data : response})); }); } }; module.exports.updateGood = { type : 'post', path : '/article/updateGood.do', callback : function(req, res) { var param = req.body; if(req.session.user) { ArticleDao.updateGood(param.boardId, param.seq, param.good, function(response) { if(response == 1) res.end(JSON.stringify({code : _code.SUCCESS, data : _code.SUCCESS, msg : "SUCCESS"})); else res.end(JSON.stringify({code : _code.ERROR, message : "FAIL", data : response})); }); } else { res.end(JSON.stringify({code : _code.ACCESS_DENIED, data : '', msg : "ACCESS_DENIED"})); } } }; module.exports.updateBad = { type : 'post', path : '/article/updateBad.do', callback : function(req, res) { var param = req.body; if(req.session.user) { ArticleDao.updateBad(param.boardId, param.seq, param.bad, function(response) { if(response == 1) res.end(JSON.stringify({code : _code.SUCCESS, data : _code.SUCCESS, msg : "SUCCESS"})); else res.end(JSON.stringify({code : _code.ERROR, message : "FAIL", data : response})); }); } else { res.end(JSON.stringify({code : _code.ACCESS_DENIED, data : '', msg : "ACCESS_DENIED"})); } } }; module.exports.updateStatus = { type : 'post', path : '/article/updateStatus.do', callback : function(req, res) { var param = req.body; if(!param.searchData) param.searchData = {}; param.searchData.signinUserId = req.session.user ? req.session.user.id : ""; ArticleDao.getArticle(param.boardId, param.seq, param.searchData, function(response) { if(response) { if((!response.writerId && (!response.password || response.password == param.password)) || (req.session && req.session.user && (req.session.user.id == response.writerId || req.session.user.level < 0))) { var vo = new ArticleVo(param); ArticleDao.updateStatus(vo, function(response) { if(response == 1) res.end(JSON.stringify({code : _code.SUCCESS, data : _code.SUCCESS, msg : "SUCCESS"})); else res.end(JSON.stringify({code : _code.ERROR, message : "FAIL", data : response})); }); } else { //작성자가 아님 res.end(JSON.stringify({code : _code.ACCESS_DENIED, data : '', msg : "ACCESS_DENIED"})); } } else { //글이 없다 res.end(JSON.stringify({code : _code.ACCESS_DENIED, data : '', msg : "ARTICLE_IS_EMPTY"})); } }); } }; module.exports.deleteArticle = { type : 'post', path : '/article/deleteArticle.do', auth : {check : true}, callback : function(req, res) { var param = req.body; if(!param.searchData) param.searchData = {}; param.searchData.signinUserId = req.session.user ? req.session.user.id : ""; ArticleDao.getArticle(param.boardId, param.seq, param.searchData, function(response) { if(response) { if((!response.writerId && (!response.password || response.password == param.password)) || (req.session && req.session.user && (req.session.user.id == response.writerId || req.session.user.level < 0))) { ArticleDao.deleteArticle(param.boardId, param.seq, param.isRemove, function(response) { if(response == 1) { CommentDao.deleteCommentByArticle(param.boardId, param.seq, function(response) { if(response >= 0) res.end(JSON.stringify({code : _code.SUCCESS, data : _code.SUCCESS, msg : "SUCCESS"})); else res.end(JSON.stringify({code : _code.ERROR, message : "FAIL", data : response})); }); } else { res.end(JSON.stringify({code : _code.ERROR, message : "FAIL", data : response})); } }); } else { //작성자가 아님 res.end(JSON.stringify({code : _code.ACCESS_DENIED, data : '', msg : "ACCESS_DENIED"})); } } else { //글이 없다 res.end(JSON.stringify({code : _code.ACCESS_DENIED, data : '', msg : "ARTICLE_IS_NOT_FOUND"})); } }); } }; module.exports.updateArticleReaderStatus = { type : 'post', path : '/article/updateArticleReaderStatus.do', callback : function(req, res) { var param = req.body; var vo = new ArticleReaderVo(param); ArticleReaderDao.getArticleReader(vo.imboardId, vo.boardId, vo.articleSeq, vo.userId, function(response) { if(response == null) { ArticleReaderDao.insertArticleReader(vo, function() { ArticleReaderDao.updateArticleReaderStatus(vo, function(response) { res.end(JSON.stringify({code : _code.SUCCESS, data : _code.SUCCESS, msg : "SUCCESS"})); }); }); } else { ArticleReaderDao.updateArticleReaderStatus(vo, function(response) { res.end(JSON.stringify({code : _code.SUCCESS, data : _code.SUCCESS, msg : "SUCCESS"})); }); } }); } }; module.exports.uploadFile = { type : 'post', path : '/article/uploadFile.do', multipart : true, callback : function(req, res) { var param = req.body; var folder = "anonymous"; if(req.session.user != null && req.session.user.id != null) { folder = req.session.user.id; } var files = req.files; var keyList = []; for(var key in files) keyList.push(key); var pathList = []; var path = _path.userdata + '/' + folder + "/"; try { fileList = fs.readdirSync(path); } catch(err) { fs.mkdirSync(path, 0777); } finally { var forEach = require('async-foreach').forEach; forEach(keyList, function(key, index) { var done = this.async(); var file = files[key]; var filepath = file.path; var filename = file.originalFilename; if(filepath.lastIndexOf(".gif") == filepath.length-4) { easyimg.convert({src : filepath + "[0]", dst : filepath.replace(".gif", ".png"), quality:100}).then(function() { try { var data = fs.readFileSync(filepath.replace(".gif", ".png")); fs.writeFileSync(path + filename.replace(".gif", ".png"), data); var data = fs.readFileSync(filepath); fs.writeFileSync(path + filename, data); fs.unlinkSync(filepath); pathList.push("/resources/" + folder + "/" + filename); } catch(err) { _loge.error("================================================="); _loge.error("time : " + new Date().toString()); _loge.error("name : ArticleRouter uploadFile"); _loge.error("-------------------------------------------------"); _loge.error(err.stack); _loge.error("================================================="); } finally { done(); } }); } else { try { var data = fs.readFileSync(filepath); fs.writeFileSync(path + filename, data); fs.unlinkSync(filepath); pathList.push("/resources/" + folder + "/" + filename); } catch(err) { _loge.error("================================================="); _loge.error("time : " + new Date().toString()); _loge.error("name : ArticleRouter uploadFile"); _loge.error("-------------------------------------------------"); _loge.error(err.stack); _loge.error("================================================="); } finally { done(); } } }, function(){ res.end(JSON.stringify({code : 1000, data : pathList, message : "SUCCESS"})); }); } } }; module.exports.uploadFileToAWS = { type : 'post', path : '/article/uploadFileToAWS.do', multipart : true, callback : function(req, res) { var param = req.body; var bucketName = param.bucketName ? param.bucketName : _aws.s3.bucketName; var resourcesUrl = _aws.s3.resourcesUrl; var folder = "anonymous"; if(req.session.user != null && req.session.user.id != null) { folder = req.session.user.id; } var files = req.files; var keyList = []; for(var key in files) keyList.push(key); var pathList = []; var forEach = require('async-foreach').forEach; forEach(keyList, function(key, index) { var done = this.async(); var file = files[key]; var path = file.path; var param = {}; param.filePath = file.path.replace(".gif", ".png"); param.fileName = file.originalFilename.replace(".gif", ".png"); param.folder = folder; param.bucketName = bucketName; if(path.lastIndexOf(".gif") == path.length -4) { param.callback = function(path) { if(path != null) { uploadFileToS3({filePath : file.path, fileName : file.originalFilename, folder : folder, callback : function(path) { fs.unlinkSync(file.path); if(path != null) pathList.push(path); done(); }}); } else { done(); } }; easyimg.convert({src : path + "[0]", dst : path.replace(".gif", ".png"), quality:100}).then(function() { uploadFileToS3(param); }, function() { done(); }); } else { param.callback = function(path) { if(path != null) pathList.push(path); done(); }; uploadFileToS3(param); } }, function(){ res.end(JSON.stringify({code : 1000, data : pathList, message : "SUCCESS"})); }); } }; //function uploadLocal(files, keyList, rootPath, folder, pathList, successCallback) //{ // if(keyList.length == 0) // { // successCallback(); // return; // } // // var file = files[keyList.pop()]; // var filepath = file.path; // var filename = file.originalFilename; // // if(filepath.lastIndexOf(".gif") == filepath.length-4) // { // easyimg.convert({src : filepath + "[0]", dst : filepath.replace(".gif", ".png"), quality:100}).then(function() // { // try // { // var data = fs.readFileSync(filepath.replace(".gif", ".png")); // // fs.writeFileSync(rootPath + filename.replace(".gif", ".png"), data); // // var data = fs.readFileSync(filepath); // fs.writeFileSync(rootPath + filename, data); // // pathList.push("/resources/" + folder + "/" + filename); // // uploadLocal(files, keyList, rootPath, folder, pathList, successCallback); // } // catch(err) // { // _loge.error("================================================="); // _loge.error("time : " + new Date().toString()); // _loge.error("name : ArticleRouter uploadLocal"); // _loge.error("-------------------------------------------------"); // _loge.error(err.stack); // _loge.error("================================================="); // } // }); // } // else // { // var data = fs.readFileSync(filepath); // fs.writeFileSync(rootPath + filename, data); // // pathList.push("/resources/" + folder + "/" + filename); // uploadLocal(files, keyList, rootPath, folder, pathList, successCallback); // } //} //function uploadAws(files, keyList, folder, pathList, successCallback) //{ // if(keyList.length == 0) // { // successCallback(); // return; // } // // var file = files[keyList.pop()]; // var path = file.path; // if(path.lastIndexOf(".gif") == path.length -4) // { // easyimg.convert({src : path + "[0]", dst : path.replace(".gif", ".png"), quality:100}).then(function() // { // uploadFileToS3({filePath : file.path.replace(".gif", ".png"), fileName : file.originalFilename.replace(".gif", ".png"), folder : folder, callback : function(path) // { // if(path != null) // { // uploadFileToS3({filePath : file.path, fileName : file.originalFilename, folder : folder, callback : function(path) // { // if(path != null) // pathList.push(path); // // uploadAws(files, keyList, folder, pathList, successCallback); // }}); // } // else // { // uploadAws(files, keyList, folder, pathList, successCallback); // } // }}); // }, function(){ // uploadAws(files, keyList, folder, pathList, successCallback); // }); // } // else // { // uploadFileToS3({filePath : file.path, fileName : file.originalFilename, folder : folder, callback : function(path) // { // if(path != null) // pathList.push(path); // // uploadAws(files, keyList, folder, pathList, successCallback); // }}); // } //} function uploadFileToS3(param) { var filePath = param.filePath; var fileName = param.fileName; var folder = param.folder; var callback = param.callback; var AWS = require('aws-sdk'); AWS.config.update({accessKeyId: _aws.accessKeyId, secretAccessKey: _aws.secretAccessKey}); // AWS.config.loadFromPath(_path.resources + "/properties/aws.json"); var s3 = new AWS.S3({endpoint:"http://s3.amazonaws.com"}); try { fs.readFile(filePath, function(err, data) { if(err) { _log.log(err, err.stack); callback(); } else { var params = { Bucket: param.bucketName, Key : folder + "/" + fileName, ACL : "public-read", Body : data }; s3.putObject(params, function(err, data) { if(err) { _loge.error("================================================="); _loge.error("time : " + new Date().toString()); _loge.error("name : ArticleRouter uploadFileToS3"); _loge.error("-------------------------------------------------"); _loge.error(err.stack); _loge.error("================================================="); callback(); } else { callback(_aws.s3.resourcesUrl + folder + "/" + encodeURIComponent(fileName)); } }); } }); } catch(err) { _loge.error("================================================="); _loge.error("time : " + new Date().toString()); _loge.error("name : ArticleRouter uploadFileToS3"); _loge.error("-------------------------------------------------"); _loge.error(err.stack); _loge.error("================================================="); callback(); } }