Files
2026-04-07 14:50:23 +09:00

5427 lines
160 KiB
JavaScript

var express = require('express');
var router = express.Router();
var util = require('util');
var mysql = require('mysql');
var utils = require('../../../src/utils');
var crossCtl = require('../../../src/crossCtl');
var path = require('path');
var passport = require('passport');
var moment = require('moment');
var async = require('async');
const fs = require('fs');
// operation
/*
router.use(function (req, res, next) {
next()/
})
*/
function checkFilePriv(fid, req, cb) {
crossCtl.getFidInfo(fid, null, function (error, fileInfo) {
console.log('checkFilePriv(), error=', error);
console.log('checkFilePriv(), fileInfo=', fileInfo);
if (error) {
cb(500, error.message ? error.message : error.toString(), fileInfo);
} else {
if (fileInfo.responseCode !== 200) {
cb(fileInfo.responseCode, fileInfo.responseMessage, fileInfo);
} else {
let bid = fileInfo['attached_to'];
let userLevel = req.isAuthenticated()
? req.user.account_info.user_level
: -1;
let uid = req.isAuthenticated()
? req.user.uid
: utils.uuid('uid_' + req.sessionID);
if (bid == null) {
if (fileInfo['secure_enabled'] == 1) {
if (req.infos.userInfo.adminFlag == true) {
cb(200, 'ok', fileInfo);
} else if (fileInfo['uid'] == uid) {
cb(200, 'ok', fileInfo);
} else {
cb(401, 'Unauthorized', fileInfo);
}
} else {
cb(200, 'ok', fileInfo);
}
} else {
crossCtl.getBoardInfo(bid, true, function (error, boardInfo) {
if (error) {
if (error.toString().startsWith('Error: #404')) {
cb(404, 'not found', fileInfo);
} else {
cb(
500,
error.message ? error.message : error.toString(),
fileInfo
);
}
} else {
console.log('boardInfo = ', boardInfo);
console.log('in checkFilePriv(), userLevel = ', userLevel);
if (userLevel >= boardInfo['read_level_min'] == false) {
cb(401, 'Unauthorized', fileInfo);
} else {
cb(200, 'ok', fileInfo);
}
}
});
}
}
}
});
}
router.get('/download/:fidName', function (req, res) {
var fidName = req.params.fidName;
var tmpAry = fidName.split('.');
var fid = tmpAry[0];
checkFilePriv(fid, req, function (resultCode, resultMessage, fileInfo) {
if (resultCode != 200) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: resultCode,
responseMessage: resultMessage,
});
} else {
crossCtl.cache.useFile(fileInfo.path);
req.workTag
.res()
.status(200)
.type(fileInfo.type)
.download(fileInfo.path, fileInfo.name);
}
});
});
router.get('/file/:fidName', function (req, res) {
var fidName = req.params.fidName;
var tmpAry = fidName.split('.');
var fid = tmpAry[0];
checkFilePriv(fid, req, function (resultCode, resultMessage, fileInfo) {
if (resultCode != 200) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: resultCode,
responseMessage: resultMessage,
});
} else {
crossCtl.cache.useFile(fileInfo.path);
let mimeType = utils.getMimeFromPath(fileInfo.name);
req.workTag.res().status(200).type(mimeType).sendFile(fileInfo.path);
}
});
});
router.get('/file/:fid/:name', function (req, res) {
var fid = req.params.fid;
var name = req.params.name;
checkFilePriv(fid, req, function (resultCode, resultMessage, fileInfo) {
if (resultCode != 200) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: resultCode,
responseMessage: resultMessage,
});
} else {
crossCtl.cache.useFile(fileInfo.path);
let mimeType = utils.getMimeFromPath(fileInfo.name);
req.workTag.res().status(200).type(mimeType).sendFile(fileInfo.path);
}
});
});
router.post('/upload', function (req, res) {
if (req.isAuthenticated()) {
crossCtl.handleUpload(req, function (err, fields, files) {
if (err) {
utils.log(
'error',
'/upload, err : ' + JSON.stringify(err) + ' ' + utils.__where()
);
responseCode = 500;
responseMessage = err.toString();
req.workTag
.res()
.status(responseCode)
.send({
...req.workTag.responsePacket,
responseCode: responseCode,
responseMessage: responseMessage,
});
} else {
console.log('fields=', fields);
console.log('files=', files);
var uploadedUrls = [];
for (var i = 0; i < files.length; i++) {
// name, size, type, localUrl
uploadedUrls.push(files[i]);
}
var newHero = {
...fields,
files: uploadedUrls,
airList: fields.airList ? JSON.parse(fields.airList) : null,
};
req.body = newHero;
switch (newHero.target) {
case 'support:ask':
case 'support:reply':
handleInsert(req, res);
break;
case 'just':
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
files: files,
});
break;
default:
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: 'unknown target : ' + newHero.target,
});
}
}
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized',
});
}
});
router.get('/dummy', function (req, res) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
});
// i18n.setLocale(req, req.session.lang ? req.session.lang : 'ko');
router.get('/apple/endpoint', function (req, res) {
console.log('apple/endpoint with get, req.query =', req.query);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
});
router.post('/apple/endpoint', function (req, res) {
console.log('apple/endpoint with post, req.body =', req.body);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
});
router.get('/set-lang', function (req, res) {
req.session.lang = req.query.lang ? req.query.lang : 'ko';
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
});
router.post('/signup', function (req, res, next) {
var type = 0;
var key = req.body.userName;
var token = req.body.password;
var defaultLevel = 0;
var qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_white_list WHERE uid = ' +
mysql.escape(key) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND status = 0';
crossCtl.db.doEasyQuery(qry, function (err, results) {
if (err) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: err.message ? err.message : err.toString(),
});
} else {
if (results.length !== 1 && crossCtl.sConfig.allowSignup === false) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: 'not in a white list',
});
} else {
defaultLevel = results.length == 1 ? results[0].level : defaultLevel;
utils.getHash(token, function (err, hash) {
if (err) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: err.message ? err.message : err.toString(),
});
} else {
var user_info = crossCtl.normalizeUserInfo('id/password', {
email: key,
password: key,
});
var prefDataJson = {
account_info: user_info,
newAccountFlag: true,
};
var post = {
site_id: crossCtl.sConfig.type,
name: user_info.name,
auth_type: type,
auth_key: key,
auth_token: hash,
pref_data: JSON.stringify(prefDataJson),
user_level: defaultLevel,
};
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.tbl_account_users SET ? ';
crossCtl.db.doEasyQueryPost(qry, post, function (err, results) {
if (err) {
if (err.code == 'ER_DUP_ENTRY') {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: -1,
responseMessage: 'User already registered',
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: err.message
? err.message
: err.toString(),
});
}
} else {
var serial = results.insertId;
var uid = utils.uuid('uid_' + serial);
req.body.password = '******';
crossCtl.logUserAction(uid, 'new', utils.dumpReq(req));
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_account_users SET uid = ' +
mysql.escape(uid) +
' WHERE serial = ' +
serial;
crossCtl.db.doEasyQuery(qry, function (err, results) {
if (err) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: err.message
? err.message
: err.toString(),
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
crossCtl.passEventToLocalHandler(
'addUser',
{ uid: uid, user_info: user_info },
function (error) {
if (error) {
utils.log(
'error',
'on crossCtl.passEventToLocalHandler(), error =',
error
);
}
}
);
});
}
});
}
});
}
}
});
});
router.post('/reset', function (req, res, next) {
var type = 0;
var key = req.body.userName;
var qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_account_users WHERE auth_key = ' +
mysql.escape(key) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND auth_type = 0' +
' AND status = 0';
crossCtl.db.doEasyQuery(qry, function (err, results) {
if (err) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: err.message ? err.message : err.toString(),
});
} else {
if (results.length == 0) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 404,
responseMessage: 'no user found',
});
} else {
var userInfo = results[0];
var uid = userInfo.uid;
var requestInfoDump = utils.dumpReq(req);
var token = uid + '_jollyINAJungle_' + new Date().getTime();
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_reset_list SET status = 4 WHERE uid = ' +
mysql.escape(uid) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND status = 0';
crossCtl.db.doEasyQuery(qry, function (err, results) {
if (err) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: err.message ? err.message : err.toString(),
});
} else {
utils.getHash(token, function (err, hash) {
if (err) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: err.message ? err.message : err.toString(),
});
} else {
var post = {
site_id: crossCtl.sConfig.type,
uid: uid,
token: hash,
created_hint: requestInfoDump,
};
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.tbl_reset_list SET ? ';
crossCtl.db.doEasyQueryPost(qry, post, function (err, results) {
if (err) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: err.message
? err.message
: err.toString(),
});
} else {
/*
crossCtl.passEventToLocalHandler(
'resetReq',
{
uid: uid,
user_info: JSON.parse(
utils.dumpReq(req)
),
},
function (error) {
if (error) {
utils.log(
'error',
'on crossCtl.passEventToLocalHandler(), error =',
error
);
}
}
);
*/
var resetLink =
'https://' +
crossCtl.sConfig.baseUrl +
'/user/reset-password?key=' +
hash;
utils.mail.sendMailRaw(
key,
crossCtl.sConfig.name + ' 비밀번호 재설정 링크',
'다음 링크를 방문하여 비밀번호를 재설정 하세요. 신청하신 적이 없다면 무시하셔도 안전합니다. <a href="' +
resetLink +
'">재설정 링크</a>',
function (error) {
if (err) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: err.message
? err.message
: err.toString(),
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
}
);
}
});
}
});
}
});
}
}
});
});
function handleLoadDaily(req, cb) {
var uid = req.user.uid;
if (req.body.token) {
req.body.token = '******';
}
var req_dump = req.session.req_dump;
req.session.req_dump = undefined;
crossCtl.logUserAction(
uid,
'signin',
req_dump === undefined ? utils.dumpReq(req) : req_dump
);
crossCtl.loadUserDaily(uid, function (error, dailyJson) {
if (error) {
utils.log(
'error',
'error at loadUserDaily() : ' + req_dump
? req_dump
: utils.dumpReq(req) + ' ' + utils.__where()
);
cb(error);
} else {
crossCtl.doWorkOnDailyWithTransaction(
uid,
function (dailyJson, afterCallback) {
// afterCallback(error, afterDailyJson, finalCallback)
if (dailyJson.loginCount === undefined) {
dailyJson.loginCount = 1;
} else {
dailyJson.loginCount += 1;
}
if (dailyJson.loginCount === 1) {
crossCtl.giveCreditToUser(
req.user.uid,
0,
1,
'daily login gift',
'system',
function (error, result) {
if (error) {
utils.log(
'error',
'giveCreditToUser(), daily login gift, error =' + error
);
}
afterCallback(error, dailyJson, function (error, result) {
cb(error);
});
}
);
} else {
crossCtl.giveCreditToUser(
req.user.uid,
1,
1,
'daily login gift - bad value test',
'system',
function (error, result) {
if (error) {
utils.log(
'error',
'giveCreditToUser(), daily login gift, error =' + error
);
}
afterCallback(error, dailyJson, function (error, result) {
cb(error);
});
}
);
}
},
function (error, result) {
if (error) {
utils.log(
'error',
'doWorkOnDailyWithTransaction(), error =' + error
);
}
cb(error);
}
);
}
});
}
router.post('/signin', function (req, res, next) {
// console.log('at /api/signin, req.body=', req.body)
var responseJson = {};
var passcard =
req.headers['user-agent'] != undefined ? req.headers['user-agent'] : '';
if (
(passcard.startsWith('Dart/') && passcard.endsWith(' (dart:io)')) ||
passcard == 'usm'
) {
} else {
if (
crossCtl.sConfig.minBuildNumber != undefined &&
req.body.buildNumber == undefined
) {
req.body.buildNumber = crossCtl.sConfig.minBuildNumber;
}
}
if (crossCtl.sConfig.minBuildNumber != undefined) {
if (req.body.buildNumber == undefined) {
req.workTag.res().send({
...req.workTag.responsePacket,
responseCode: 426,
responseMessage:
'Upgrade Required. Required buildNumber = ' +
crossCtl.sConfig.minBuildNumber,
minBuildNumber: crossCtl.sConfig.minBuildNumber,
});
return;
} else if (
parseInt(req.body.buildNumber) < crossCtl.sConfig.minBuildNumber
) {
req.workTag.res().send({
...req.workTag.responsePacket,
responseCode: 426,
responseMessage:
'Upgrade Required. Required buildNumber = ' +
crossCtl.sConfig.minBuildNumber,
minBuildNumber: crossCtl.sConfig.minBuildNumber,
});
return;
}
}
passport.authenticate('api-login', function (err, user, info) {
if (err) {
req.workTag.res().send({
...req.workTag.responsePacket,
responseCode: utils.__line(),
responseMessage: err.message,
...responseJson,
});
} else {
if (user.auth_flag === false) {
req.workTag.res().send({
...req.workTag.responsePacket,
responseCode: utils.__line(),
responseMessage: 'user.auth_flag === false',
...responseJson,
});
} else {
req.login(user, (loginErr) => {
if (loginErr) {
responseJson = { error: util.inspect(loginErr) };
req.workTag.res().send({
...req.workTag.responsePacket,
responseCode: utils.__line(),
responseMessage: 'login error',
...responseJson,
});
} else {
handleLoadDaily(req, function (error) {
req.session.user = user;
responseJson = { user: user };
req.workTag.res().send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
...responseJson,
});
});
}
});
}
}
})(req, res, next);
});
/* POST home page. */
router.get('/signout', function (req, res, next) {
if (req.isAuthenticated() == true) {
crossCtl.logUserAction(req.user.uid, 'signout', utils.dumpReq(req));
}
req.logout();
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
});
router.post('/withdrawal', function (req, res, next) {
if (!req.isAuthenticated()) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized',
});
} else {
var uid = req.user.uid;
var hero = req.body;
// console.log("withdrawal, hero=", hero);
var qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_account_users SET auth_key = concat(' +
mysql.escape('withdrawal_') +
', auth_key, ' +
mysql.escape('_' + utils.shortid.generate()) +
'), status = 4, withdrawal_info = ' +
mysql.escape(JSON.stringify(hero)) +
' WHERE uid = ' +
mysql.escape(uid) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
req.logout();
crossCtl.db.doEasyQuery(qry, function (error, results) {
if (error) {
utils.log(
'error',
'withdrawal, uid =',
uid,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message ? error.message : error.toString(),
});
} else {
if (results.affectedRows === 0) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message ? error.message : error.toString(),
});
} else if (results.affectedRows > 1) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage:
'bad affectedRows. affectedRows= ' + results.affectedRows,
});
} else {
crossCtl.logUserAction(uid, 'withdrawal', utils.dumpReq(req));
crossCtl.passEventToLocalHandler(
'withdrawal',
{ req: req, uid: uid },
function (error) {
if (error) {
utils.log(
'error',
'withdrawal handle error in localHandler. error = ' +
JSON.stringify(error) +
' ' +
utils.__where()
);
}
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
);
}
}
});
}
});
/*
router.get('/businessinfo', function (req, res) {
crossCtl.loadBusinessInfo(function (error, businessInfo) {
if (error) {
req.workTag.responsePacket.responseCode = 500
req.workTag.responsePacket.responseMessage = error
} else {
req.workTag.responsePacket.responseCode = 200
req.workTag.responsePacket.responseMessage = 'ok'
req.workTag.responsePacket.businessInfo = businessInfo
}
req.workTag.res().status(req.workTag.responsePacket.responseCode).send({
...req.workTag.responsePacket
})
})
})
router.post('/businessinfo', function (req, res) {
if (req.infos.userInfo.adminFlag === false) {
req.workTag.res().status(200).send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized'
})
} else {
var businessInfo = req.body.businessInfo
console.log('req.body=', req.body)
if (businessInfo === null) {
crossCtl.deleteBusinessInfo(function (error) {
if (error) {
req.workTag.res().status(200).send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error
})
} else {
req.workTag.res().status(200).send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
businessInfo: null
})
}
})
} else {
console.log('businessInfo=', businessInfo)
crossCtl.saveBusinessInfo(businessInfo, function (error) {
if (error) {
req.workTag.res().status(200).send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error
})
} else {
req.workTag.res().status(200).send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
businessInfo: businessInfo
})
}
})
}
}
})
router.get('/maintenance', function (req, res) {
crossCtl.loadMaintenanceInfo(function (error, maintenanceInfo) {
if (error) {
req.workTag.responsePacket.responseCode = 500
req.workTag.responsePacket.responseMessage = error
} else {
maintenanceInfo.until = utils.dateFormat(maintenanceInfo.until, '%Y-%m-%dT%H:%M', false)
req.workTag.responsePacket.responseCode = 200
req.workTag.responsePacket.responseMessage = 'ok'
req.workTag.responsePacket.maintenanceInfo = maintenanceInfo
}
req.workTag.res().status(req.workTag.responsePacket.responseCode).send({
...req.workTag.responsePacket
})
})
})
router.post('/maintenance', function (req, res) {
if (req.infos.userInfo.adminFlag === false) {
req.workTag.res().status(200).send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized'
})
} else {
var currentMaintenanceInfo = crossCtl.getMaintenanceInfo()
var maintenanceInfo = req.body.maintenanceInfo
// console.log('req.body=', req.body)
if (maintenanceInfo === null) {
if (currentMaintenanceInfo !== null) {
// crossCtl.sms.sendSMS('01050277214', '01021811127', 'Maintenance End!')
}
crossCtl.deleteMaintenanceInfo(function (error) {
if (error) {
req.workTag.res().status(200).send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error
})
} else {
req.workTag.res().status(200).send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
maintenanceInfo: null
})
}
})
} else {
var requestIP = utils.getIPFromReq(req)
var staffIPs = crossCtl.getStaffIPs()
if (!staffIPs.includes(requestIP)) {
staffIPs[staffIPs.length] = requestIP
}
maintenanceInfo['staff-ips'] = staffIPs.toString()
// console.log('maintenanceInfo=', maintenanceInfo)
if (currentMaintenanceInfo === null) {
// crossCtl.sms.sendSMS('01050277214', '01021811127', 'Maintenance Start!')
} else {
// crossCtl.sms.sendSMS('01050277214', '01021811127', 'Maintenance Update!')
}
crossCtl.saveMaintenanceInfo(maintenanceInfo, function (error) {
if (error) {
req.workTag.res().status(200).send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error
})
} else {
req.workTag.res().status(200).send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
maintenanceInfo: maintenanceInfo
})
}
})
}
}
})
*/
router.post('/select', function (req, res) {
var hero = req.body;
// console.log('hero=', hero)
console.log('req.sessionID = ', req.sessionID);
var authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
var uid = req.isAuthenticated()
? req.user.uid
: utils.uuid('uid_' + req.sessionID);
let userLevel = req.isAuthenticated() ? req.user.account_info.user_level : -1;
var qry = '';
let boardInfoActiveOnlyflag = true;
switch (hero.target) {
case 'shortUrl':
authorized = req.isAuthenticated(); // req.isAuthenticated()
qry = hero.target;
break;
case 'admin:white':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_white_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND uid = ' +
mysql.escape(hero.hero);
break;
case 'board:info:all':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry = hero.target;
boardInfoActiveOnlyflag = false;
break;
case 'board:info':
authorized = true; // req.isAuthenticated()
qry = hero.target;
break;
case 'board:infoBACKUP':
authorized = true; // req.isAuthenticated()
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_board_info WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND id = ' +
mysql.escape(hero.hero) +
(req.infos.userInfo.adminFlag ? '' : ' AND status = 0');
break;
case 'board':
authorized = true; // req.isAuthenticated()
qry = hero.target;
break;
case 'log:user':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_user_log WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND serial = ' +
mysql.escape(hero.hero);
break;
case 'maintenance':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_maintenance_info WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND status = 0';
break;
case 'businessInfo':
authorized = true;
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_business_info WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND status = 0';
break;
case 'inquiry':
authorized = req.isAuthenticated(); // req.isAuthenticated()
if (req.infos.userInfo.adminFlag == true) {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_inquiry_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND serial = ' +
mysql.escape(hero.hero);
} else {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_inquiry_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND uid = ' +
mysql.escape(uid) +
' AND serial = ' +
mysql.escape(hero.hero);
}
break;
case 'notice':
authorized = req.isAuthenticated(); // req.isAuthenticated()
if (req.infos.userInfo.adminFlag == true) {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_notice_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND serial = ' +
mysql.escape(hero.hero);
} else {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_notice_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND status = 0 AND serial = ' +
mysql.escape(hero.hero);
}
break;
case 'faq':
authorized = req.isAuthenticated(); // req.isAuthenticated()
if (req.infos.userInfo.adminFlag == true) {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_faq_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND serial = ' +
mysql.escape(hero.hero);
} else {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_faq_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND status = 0 AND serial = ' +
mysql.escape(hero.hero);
}
break;
case 'me':
authorized = req.isAuthenticated(); // req.isAuthenticated()
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_account_users WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND uid = ' +
mysql.escape(uid) +
' AND status = 0';
break;
case 'admin:user:byid':
authorized = req.infos.userInfo.adminFlag;
qry =
'SELECT ' +
'*, ' +
crossCtl.db.options.database +
'.tbl_account_users.serial as serial' +
' FROM ' +
crossCtl.db.options.database +
'.tbl_account_users ' +
'LEFT JOIN ' +
crossCtl.db.options.database +
'.tbl_profile_list ON ' +
crossCtl.db.options.database +
'.tbl_account_users.uid = ' +
crossCtl.db.options.database +
'.tbl_profile_list.uid ' +
'WHERE ' +
crossCtl.db.options.database +
'.tbl_account_users.uid = ' +
mysql.escape(hero.hero);
console.log('qry = ', qry);
break;
case 'admin:user':
authorized = req.infos.userInfo.adminFlag;
qry =
'SELECT ' +
'*, ' +
crossCtl.db.options.database +
'.tbl_account_users.serial as serial' +
' FROM ' +
crossCtl.db.options.database +
'.tbl_account_users ' +
'LEFT JOIN ' +
crossCtl.db.options.database +
'.tbl_profile_list ON ' +
crossCtl.db.options.database +
'.tbl_account_users.uid = ' +
crossCtl.db.options.database +
'.tbl_profile_list.uid ' +
'WHERE ' +
crossCtl.db.options.database +
'.tbl_account_users.serial = ' +
mysql.escape(hero.hero);
console.log('qry = ', qry);
break;
case 'user':
authorized = true; // req.isAuthenticated()
qry = hero.target;
break;
case 'profile':
if (hero.hero !== undefined) {
authorized = true; // req.isAuthenticated()
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_profile_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND pid = ' +
mysql.escape(hero.hero) +
' AND status = 0';
} else {
authorized = req.isAuthenticated();
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_profile_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND uid = ' +
mysql.escape(uid) +
' AND status = 0';
}
break;
case 'settings':
authorized = req.isAuthenticated();
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_setting_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND uid = ' +
mysql.escape(uid) +
' AND status = 0';
break;
default:
}
if (qry === '') {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: 'unknown target : ' + hero.target,
});
} else if (authorized === false) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized',
});
} else {
if (qry === hero.target) {
switch (hero.target) {
case 'huk':
req.workTag.responsePacket.data = [];
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
break;
case 'shortUrl':
crossCtl.setShortUrlInfo(
uid,
hero.hero,
function (error, shortUrlInfo) {
if (error) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
console.log('shortUrlInfo = ', shortUrlInfo);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
shortUrlId: shortUrlInfo.short_id,
});
}
}
);
break;
case 'board:info':
case 'board:info:all':
crossCtl.getBoardInfo(
hero.hero,
boardInfoActiveOnlyflag,
function (error, boardInfo) {
if (error) {
if (error.toString().startsWith('Error: #404')) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 404,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
}
} else {
console.log('boardInfo = ', boardInfo);
if (userLevel >= boardInfo['read_level_min'] == false) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized',
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
data: [boardInfo],
});
}
}
}
);
break;
case 'board':
crossCtl.getBoardInfo(hero.boardId, true, function (error, boardInfo) {
if (error) {
if (error.toString().startsWith('Error: #404')) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 404,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
}
} else {
console.log('boardInfo = ', boardInfo);
if (userLevel >= boardInfo['read_level_min'] == false) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized',
});
} else {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_board_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND cid = ' +
mysql.escape(hero.hero) +
' AND status = 0';
crossCtl.db.doEasyQuery(qry, function (error, results) {
if (error) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
let filteredResult = results;
if (filteredResult.length > 0) {
filteredResult[0].myFlag = filteredResult[0].uid == uid;
delete filteredResult[0].uid;
delete filteredResult[0].site_id;
}
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
data: filteredResult,
metaData: {
attachmentEnabled:
boardInfo['attachment_enabled'] == 1,
commentEnabled: boardInfo['comment_enabled'] == 1,
},
});
crossCtl.doTheHit(req, hero.target, hero.hero);
}
});
}
}
});
break;
case 'user':
req.workTag.responsePacket.data = [
{
isAuthenticated: req.isAuthenticated(),
uid: req.isAuthenticated()
? crossCtl.sConfig.type == 'usm'
? req.user.account_info.uid
: null
: null,
userInfo: req.isAuthenticated() ? req.infos.userInfo : {},
isHighLeveled: req.isAuthenticated()
? req.user.account_info.user_level > 1
: false,
isOp: req.isAuthenticated()
? req.user.account_info.user_level == 3
: false,
isSuperOp: req.isAuthenticated()
? req.user.account_info.user_level == 4
: false,
isAdmin: req.isAuthenticated()
? req.user.account_info.user_level == 5
: false,
isApproved: req.isAuthenticated()
? req.user.account_info.user_level > 0
: false,
},
];
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
break;
default:
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: 'unknown target : ' + hero.target,
});
}
} else {
crossCtl.db.doEasyQuery(qry, function (error, results) {
if (error) {
utils.log(
'error',
'select, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message ? error.message : error.toString(),
hero: hero,
});
} else {
var filteredResult = results;
if (hero.target === 'profile') {
if (results.length > 0) {
delete filteredResult[0].uid;
filteredResult[0].infos = utils.safeJSON(filteredResult[0].infos);
if (hero.hero == undefined) {
filteredResult[0].addon = req.user.user_info;
}
delete filteredResult[0].serial;
delete filteredResult[0].site_id;
delete filteredResult[0].status;
delete filteredResult[0].updated;
delete filteredResult[0].created;
// delete filteredResult[0].infos;
filteredResult[0].fromAir = false;
}
} else if (hero.target === 'settings') {
if (filteredResult.length > 0) {
filteredResult[0].settings = JSON.parse(
filteredResult[0].settings
);
delete filteredResult[0].uid;
delete filteredResult[0].site_id;
}
} else if (hero.target === 'board') {
if (filteredResult.length > 0) {
filteredResult[0].myFlag = filteredResult[0].uid == uid;
delete filteredResult[0].uid;
delete filteredResult[0].site_id;
}
}
if (filteredResult.length == 0) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 404,
responseMessage: 'not found',
data: filteredResult,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
data: filteredResult,
});
}
}
});
}
}
});
var packetPool = {};
var packetAry = [];
router.post('/insert', function (req, res) {
handleInsert(req, res);
});
function handleInsert(req, res) {
var hero = req.body;
console.log('hero=', hero);
var authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
var uid = req.isAuthenticated()
? req.user.uid
: utils.uuid('uid_' + req.sessionID);
let userLevel = req.isAuthenticated() ? req.user.account_info.user_level : -1;
var qry = '';
var post = {};
var tmpIdGenerated = utils.shortid.generate();
switch (hero.target) {
case 'comment':
authorized = req.isAuthenticated();
qry = hero.target;
break;
case 'admin:white':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'INSERT INTO ' + crossCtl.db.options.database + '.tbl_white_list SET ? ';
post = {
site_id: crossCtl.sConfig.type,
uid: hero.uid,
level: hero.level,
memo: hero.memo,
};
break;
case 'board:info':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'INSERT INTO ' + crossCtl.db.options.database + '.tbl_board_info SET ? ';
post = {
bid: tmpIdGenerated,
id: hero.boardId,
site_id: crossCtl.sConfig.type,
title: hero.title,
description: hero.description,
read_level_min: hero.readLevelMin,
write_level_min: hero.writeLevelMin,
comment_enabled: hero.commentEnabled == true ? 1 : 0,
attachment_enabled: hero.attachmentEnabled == true ? 1 : 0,
ago_enabled: hero.agoEnabled == true ? 1 : 0,
memo: hero.memo,
};
break;
case 'board':
authorized = true; // req.isAuthenticated()
qry = hero.target;
break;
case 'packet':
authorized = true; // req.isAuthenticated()
qry = hero.target;
break;
case 'inquiry':
authorized = req.isAuthenticated(); // req.isAuthenticated()
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.tbl_inquiry_list SET ? ';
post = {
site_id: crossCtl.sConfig.type,
uid: uid,
name: mysql.escape(
req.isAuthenticated() ? req.infos.userInfo['userName'] : '?'
),
title: hero.title,
question: hero.question,
attachment_from: JSON.stringify(hero.attachmentFrom),
flags: hero.flags,
};
utils.mail.sendMailRaw('netsafe@kiso.or.kr', '[1:1문의]' + hero.title, hero.question)
break;
case 'notice':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.tbl_notice_list SET ? ';
post = {
site_id: crossCtl.sConfig.type,
uid: uid,
title: hero.title,
detail: hero.detail,
flags: hero.flags,
};
break;
case 'faq':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'INSERT INTO ' + crossCtl.db.options.database + '.tbl_faq_list SET ? ';
post = {
site_id: crossCtl.sConfig.type,
uid: uid,
question: hero.question,
answer: hero.answer,
};
break;
case 'support:ask':
console.log('on support:ask, hero=', hero);
authorized = req.isAuthenticated();
qry = hero.target;
break;
case 'support:reply':
authorized = req.infos.userInfo.adminFlag;
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.tbl_support_list SET ? ';
// type : send received, system
post = {
site_id: crossCtl.sConfig.type,
type: 'received',
session_id: hero.sessionId,
uid: hero.uid,
name: req.infos.userInfo.profile.display_name,
from_id: uid,
message: hero.message,
};
break;
default:
}
if (qry === '') {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: 'unknown target : ' + hero.target,
});
} else if (authorized === false) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized',
});
} else {
if (qry === hero.target) {
if (hero.target == 'packet') {
hero.parsedResponse = JSON.parse(hero.response);
// packetPool
var tmpPacketUrlToken = hero.url
.replace('https://usm-dev.inspond.com/api/', '')
.replace('/', '_');
if (packetPool[tmpPacketUrlToken] == undefined) {
packetPool[tmpPacketUrlToken] = {};
}
var targetPool = packetPool[tmpPacketUrlToken];
var targetToken = hero.params.target;
if (targetPool[targetToken] == undefined) {
targetPool[targetToken] = {};
}
targetPool[targetToken] = {
url: hero.url,
method: hero.method,
params: hero.params,
response: hero.parsedResponse,
};
packetAry.push({
url: hero.url,
method: hero.method,
params: hero.params,
response: hero.parsedResponse,
});
var logStreamA = fs.createWriteStream('packets.txt', {
flags: 'w',
});
// use {flags: 'a'} to append and {flags: 'w'} to erase and write a new file
logStreamA.end(JSON.stringify(packetAry, null, 4));
var logStream = fs.createWriteStream('packet.txt', {
flags: 'w',
});
// use {flags: 'a'} to append and {flags: 'w'} to erase and write a new file
logStream.end(JSON.stringify(packetPool, null, 4));
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
} else if (hero.target == 'support:ask') {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_support_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND status = 0 AND uid = ' +
mysql.escape(uid) +
' ORDER BY serial DESC LIMIT 1';
crossCtl.db.doEasyQuery(qry, function (error, results) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
var lastRecord = results.length > 0 ? results[0] : null;
var currentSessionId = tmpIdGenerated;
if (lastRecord != null) {
currentSessionId = lastRecord.session_id;
}
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.tbl_support_list SET ? ';
post = {
site_id: crossCtl.sConfig.type,
type: 'send',
session_id: currentSessionId,
uid: uid,
name: req.infos.userInfo.profile.display_name,
from_id: uid,
message: hero.message,
attachment: hero.files
? JSON.stringify({
files: hero.files,
airList: hero.airList,
})
: null,
};
crossCtl.db.doEasyQueryPost(qry, post, function (error, results) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
var msgBase = {
collapse_key: currentSessionId,
notification: {
title: '일대일 문의 접수',
body: hero.message,
},
data: {
eventTag: 'support:new',
location: '/admin/support',
title: '일대일 문의 접수',
body: hero.message,
},
};
crossCtl.sendFCMToLeveledUser(
5,
msgBase,
function (error, response) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
}
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
);
}
});
}
});
} else if (hero.target == 'comment') {
crossCtl.handleComment('insert', req, function (error) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
switch (hero.for) {
case 'post':
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_post_list SET comment_count = comment_count + 1 WHERE pid = ' +
mysql.escape(hero.hero);
break;
case 'board':
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_board_list SET comment_count = comment_count + 1 WHERE cid = ' +
mysql.escape(hero.hero);
break;
default:
qry = '';
}
if (qry != '') {
crossCtl.db.doEasyQuery(qry, function (error, results) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
pid: hero.hero,
});
}
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
}
});
} else if (hero.target == 'board') {
console.log('hero=', hero);
crossCtl.getBoardInfo(hero.boardId, true, function (error, boardInfo) {
if (error) {
if (error.toString().startsWith('Error: #404')) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 404,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
}
} else {
if (boardInfo == undefined) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 404,
responseMessage: 'target board not found',
hero: hero,
});
} else if (userLevel < boardInfo['write_level_min']) {
console.log('traped by write_level_min');
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized',
});
} else {
console.log('pass write_level_min test');
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.tbl_board_list SET ? ';
post = {
site_id: crossCtl.sConfig.type,
board_id: boardInfo['bid'],
cid: tmpIdGenerated,
uid: uid,
name: req.isAuthenticated()
? req.infos.userInfo['userName']
: '?',
profile_url: req.isAuthenticated()
? req.infos.userInfo['profileUrl']
: '',
title: hero.title,
content: hero.content,
flags: JSON.stringify(['new']),
attachments: JSON.stringify(hero.attachments),
};
crossCtl.db.doEasyQueryPost(qry, post, function (error, results) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
cid: tmpIdGenerated,
});
}
});
}
// do gatekeeping
}
});
} else {
switch (hero.target) {
case 'huk':
req.workTag.responsePacket.data = [];
break;
default:
}
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
} else {
crossCtl.db.doEasyQueryPost(qry, post, function (error, results) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message ? error.message : error.toString(),
hero: hero,
});
} else {
if (hero.target == 'support:reply') {
var msgBase = {
collapse_key: hero.sessionId,
notification: {
title: '일대일 문의 답변',
body: hero.message,
},
data: {
eventTag: 'support:reply',
location: '/support',
title: '일대일 문의 답변',
body: hero.message,
},
};
crossCtl.sendFcmToUids(
[hero.uid],
msgBase,
function (error, response) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
}
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
);
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
}
});
}
}
}
router.post('/update', function (req, res) {
handleUpdate(req, res);
});
function handleUpdate(req, res) {
var hero = req.body;
console.log('hero=', hero);
var authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
var uid = req.isAuthenticated()
? req.user.uid
: utils.uuid('uid_' + req.sessionID);
let userLevel = req.isAuthenticated() ? req.user.account_info.user_level : -1;
var qry = '';
var post = {};
switch (hero.target) {
case 'like':
case 'report':
authorized = req.isAuthenticated();
qry = hero.target;
break;
case 'password:reset':
authorized = true;
qry = hero.target;
break;
case 'password':
authorized = req.isAuthenticated();
qry = hero.target;
break;
case 'admin:password':
authorized = req.infos.userInfo.adminFlag;
qry = hero.target;
break;
case 'hit':
authorized = req.isAuthenticated(); // req.isAuthenticated()
switch (hero.for) {
case 'board':
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_board_list SET ' +
' hit_count = hit_count + 1 WHERE cid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'post':
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_post_list SET ' +
' hit_count = hit_count + 1 WHERE pid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
}
break;
case 'admin:white':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_white_list SET ? WHERE serial = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
post = {
level: hero.level,
memo: hero.memo,
status: hero.status,
};
break;
case 'board:info':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_board_info SET' +
' id = ' +
mysql.escape(hero.boardId) +
', title = ' +
mysql.escape(hero.title) +
', description = ' +
mysql.escape(hero.description) +
', read_level_min = ' +
mysql.escape(hero.readLevelMin) +
', write_level_min = ' +
mysql.escape(hero.writeLevelMin) +
', comment_enabled = ' +
mysql.escape(hero.commentEnabled) +
', attachment_enabled = ' +
mysql.escape(hero.attachmentEnabled) +
', ago_enabled = ' +
mysql.escape(hero.agoEnabled) +
', memo = ' +
mysql.escape(hero.memo) +
', status = ' +
mysql.escape(hero.status) +
' WHERE bid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'board':
authorized = true;
qry = hero.target;
break;
case 'boardBAK':
authorized = req.isAuthenticated(); // req.isAuthenticated()
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_board_list SET' +
' name = ' +
mysql.escape(
req.isAuthenticated() ? req.infos.userInfo['userName'] : 'anonym'
) +
', profile_url = ' +
mysql.escape(
req.isAuthenticated() ? req.infos.userInfo['profileUrl'] : ''
) +
', title = ' +
mysql.escape(hero.title) +
', content = ' +
mysql.escape(hero.content) +
', attachments = ' +
mysql.escape(JSON.stringify(hero.attachments)) +
', status = ' +
mysql.escape(hero.status) +
' WHERE cid = ' +
mysql.escape(hero.hero) +
' AND board_id = ' +
mysql.escape(hero.boardId) +
' AND uid = ' +
mysql.escape(uid) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'inquiry':
authorized = req.isAuthenticated(); // req.isAuthenticated()
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_inquiry_list SET ' +
' title = ' +
mysql.escape(hero.title) +
', question = ' +
mysql.escape(hero.question) +
', attachment_from = ' +
mysql.escape(JSON.stringify(hero.attachmentFrom)) +
', status = ' +
mysql.escape(hero.status) +
' WHERE serial = ' +
mysql.escape(hero.hero) +
' AND uid = ' +
mysql.escape(uid) +
' AND status = 0 AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'inquiry:admin':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_inquiry_list SET ' +
' `by` = ' +
mysql.escape(
req.isAuthenticated() ? req.infos.userInfo['userName'] : '?'
) +
' ,answer = ' +
mysql.escape(hero.answer) +
', attachment_to = ' +
mysql.escape(JSON.stringify(hero.attachmentTo)) +
', memo = ' +
mysql.escape(hero.memo) +
', status = ' +
mysql.escape(hero.status) +
' WHERE serial = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'profile':
authorized = req.isAuthenticated();
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.tbl_profile_list SET ? ON DUPLICATE KEY UPDATE display_name = ' +
mysql.escape(hero.displayName) +
', photo_url = ' +
mysql.escape(hero.photoUrl) +
', infos = ' +
mysql.escape(JSON.stringify(hero.infos));
post = {
site_id: crossCtl.sConfig.type,
uid: uid,
display_name: hero.displayName,
photo_url: hero.photoUrl,
infos: JSON.stringify(hero.infos),
};
break;
case 'admin:limitCount':
authorized = req.infos.userInfo.adminFlag;
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_account_users SET limit_count = ' +
mysql.escape(hero.limitCount) +
' WHERE uid = ' +
mysql.escape(uid) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
console.log('qry = ', qry);
break;
case 'admin:level':
authorized = req.infos.userInfo.adminFlag;
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_account_users SET user_level = ' +
mysql.escape(hero.level) +
' WHERE uid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'admin:profile':
authorized = req.infos.userInfo.adminFlag;
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.tbl_profile_list SET ? ON DUPLICATE KEY UPDATE display_name = ' +
mysql.escape(hero.displayName) +
', photo_url = ' +
mysql.escape(hero.photoUrl) +
', infos = ' +
mysql.escape(JSON.stringify(hero.infos));
post = {
site_id: crossCtl.sConfig.type,
uid: hero.hero,
display_name: hero.displayName,
photo_url: hero.photoUrl,
infos: JSON.stringify(hero.infos),
};
break;
case 'admin:withdrawal':
authorized = req.infos.userInfo.adminFlag;
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_account_users SET auth_key = concat(' +
mysql.escape('withdrawal_') +
', auth_key, ' +
mysql.escape('_' + utils.shortid.generate()) +
'), status = 4, withdrawal_info = ' +
mysql.escape(
'운영자에 의한 탈퇴처리 ' + JSON.stringify(req.infos.userInfo)
) +
' WHERE uid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'settings':
authorized = req.isAuthenticated();
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.tbl_setting_list SET ? ON DUPLICATE KEY UPDATE settings = ' +
mysql.escape(hero.settings);
post = {
site_id: crossCtl.sConfig.type,
uid: uid,
settings: hero.settings,
};
break;
case 'fcmToken':
if (crossCtl.sConfig.type == 'hatch') {
authorized = true;
} else {
authorized = req.isAuthenticated();
}
// authorized = true
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.tbl_fcm_tokens SET ? ON DUPLICATE KEY UPDATE uid = ' +
mysql.escape(uid) +
', hit_count = hit_count + 1, status = 0, nick = ' +
mysql.escape(req.infos.userInfo.profile.display_name);
post = {
tid: utils.shortid.generate(),
site_id: crossCtl.sConfig.type,
token: hero.token,
duid: hero.duid,
uid: uid,
nick: req.infos.userInfo.profile.display_name,
};
req.session.fcmInfo = post;
break;
case 'fcm':
authorized = req.isAuthenticated();
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_fcm_tokens SET last_received = NOW() WHERE uid = ' +
mysql.escape(uid) +
' AND duid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
post = {};
break;
case 'notice':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_notice_list SET ? WHERE serial = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
post = {
title: hero.title,
detail: hero.detail,
flags: hero.flags,
status: hero.status,
};
break;
case 'faq':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_faq_list SET ? WHERE serial = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
post = {
question: hero.question,
answer: hero.answer,
status: hero.status,
};
break;
case 'support':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_support_list SET ? WHERE uid = ' +
mysql.escape(uid) +
' AND status = 0' +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
post = {
session_id: utils.shortid.generate(),
status: 4,
};
break;
case 'maintenance':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_maintenance_info SET ? WHERE status = 0' +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
var requestIP = utils.getIPFromReq(req);
var staffIPs = crossCtl.getStaffIPs();
if (!staffIPs.includes(requestIP)) {
staffIPs[staffIPs.length] = requestIP;
}
post = {
site_id: crossCtl.sConfig.type,
title: hero.title,
description: hero.description,
until: hero.until,
type: hero.type,
};
post['staff-ips'] = staffIPs.toString();
break;
case 'businessInfo':
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_business_info SET ? WHERE status = 0' +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
post = {
site_id: crossCtl.sConfig.type,
name: hero.name,
owner: hero.owner,
address: hero.address,
phone: hero.phone,
email: hero.email,
phone: hero.phone,
registration_number: hero.registration_number,
capp_biz_cd: hero.capp_biz_cd,
note: hero.note,
};
break;
default:
}
if (qry === '') {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: 'unknown target : ' + hero.target,
});
} else if (authorized === false) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized',
});
} else {
if (qry === hero.target) {
if (hero.target === 'like') {
crossCtl.handleLike(req, function (error, resultPack) {
if (error) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
});
} else {
console.log('resultPack=', resultPack);
if (hero.for === 'post') {
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_post_list SET ' +
resultPack.amountTag +
' WHERE pid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
} else if (hero.for === 'comment') {
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_comment_list SET ' +
resultPack.amountTag +
' WHERE cid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
} else if (hero.for === 'board') {
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_board_list SET ' +
resultPack.amountTag +
' WHERE cid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
}
crossCtl.db.doEasyQuery(qry, function (error, results) {
if (error) {
utils.log(
'error',
'update, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
if (hero.for === 'post') {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_post_list WHERE pid = ' +
mysql.escape(hero.hero);
} else if (hero.for === 'comment') {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_comment_list WHERE cid = ' +
mysql.escape(hero.hero);
} else if (hero.for === 'board') {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_board_list WHERE cid = ' +
mysql.escape(hero.hero);
}
crossCtl.db.doEasyQuery(qry, function (error, results) {
if (error) {
utils.log(
'error',
'update, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
var finalResult = {
hero: hero.hero,
oldTag: resultPack.oldTag,
oldCount: resultPack.oldCount,
newTag: resultPack.newTag,
newCount: resultPack.newCount,
like_count: results[0].like_count,
dislike_count: results[0].dislike_count,
likeToggleFlag: crossCtl.sConfig.likeToggleFlag,
};
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
finalResult: finalResult,
});
}
});
}
});
}
});
} else if (hero.target === 'report') {
crossCtl.handleReport(req, function (error, resultPack) {
if (error) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
});
} else {
console.log('resultPack=', resultPack);
if (hero.for === 'post') {
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_post_list SET ' +
resultPack.amountTag +
' WHERE pid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
} else if (hero.for === 'comment') {
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_comment_list SET ' +
resultPack.amountTag +
' WHERE cid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
} else if (hero.for === 'board') {
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_board_list SET ' +
resultPack.amountTag +
' WHERE cid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
}
crossCtl.db.doEasyQuery(qry, function (error, results) {
if (error) {
utils.log(
'error',
'update, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
if (hero.for === 'post') {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_post_list WHERE pid = ' +
mysql.escape(hero.hero);
} else if (hero.for === 'comment') {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_comment_list WHERE cid = ' +
mysql.escape(hero.hero);
} else if (hero.for === 'board') {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_board_list WHERE cid = ' +
mysql.escape(hero.hero);
}
crossCtl.db.doEasyQuery(qry, function (error, results) {
if (error) {
utils.log(
'error',
'update, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
var finalResult = {
hero: hero.hero,
oldTag: resultPack.oldTag,
oldCount: resultPack.oldCount,
newTag: resultPack.newTag,
newCount: resultPack.newCount,
report_count: results[0].report_count,
};
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
finalResult: finalResult,
});
}
});
}
});
}
});
} else if (hero.target === 'password') {
crossCtl.changePassword(
uid,
hero.password_current,
hero.password_new,
hero.password_again,
function (err) {
if (err) {
console.log('err=', err);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: err.message ? err.message : err.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
}
);
} else if (hero.target === 'admin:password') {
crossCtl.changePasswordByAdmin(
hero.hero,
'',
hero.password_new,
hero.password_again,
function (err) {
if (err) {
console.log('err=', err);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: err.message ? err.message : err.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
}
);
} else if (hero.target === 'password:reset') {
crossCtl.changePasswordByResetKey(
hero.hero,
'',
hero.passwordNew,
hero.passwordAgain,
function (err) {
if (err) {
console.log('err=', err);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: err.message ? err.message : err.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
}
);
} else if (hero.target == 'board') {
crossCtl.getBoardInfo(hero.boardId, true, function (error, boardInfo) {
if (error) {
if (error.toString().startsWith('Error: #404')) {
cb(
{
responseCode: 404,
responseMessage: error.message
? error.message
: error.toString(),
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
},
null
);
} else {
cb(
{
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
},
null
);
}
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
if (boardInfo == undefined) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 404,
responseMessage: 'target board not found',
hero: hero,
});
} else if (userLevel < boardInfo['write_level_min']) {
console.log('traped by write_level_min');
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized',
});
} else {
console.log('pass write_level_min test');
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_board_list SET' +
' name = ' +
mysql.escape(
req.isAuthenticated()
? req.infos.userInfo['userName']
: 'anonym'
) +
', profile_url = ' +
mysql.escape(
req.isAuthenticated() ? req.infos.userInfo['profileUrl'] : ''
) +
', title = ' +
mysql.escape(hero.title) +
', content = ' +
mysql.escape(hero.content) +
', attachments = ' +
mysql.escape(JSON.stringify(hero.attachments)) +
', status = ' +
mysql.escape(hero.status) +
' WHERE cid = ' +
mysql.escape(hero.hero) +
' AND board_id = ' +
mysql.escape(boardInfo['bid']) +
' AND uid = ' +
mysql.escape(uid) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
crossCtl.db.doEasyQueryPost(qry, post, function (error, results) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
});
}
// do gatekeeping
}
});
} else {
switch (hero.target) {
case 'huk':
req.workTag.responsePacket.data = [];
break;
default:
}
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
} else {
// console.log('qry=', qry)
// console.log('post=', post)
crossCtl.db.doEasyQueryPost(qry, post, function (error, results) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message ? error.message : error.toString(),
hero: hero,
});
} else {
if (hero.target === 'maintenance' || hero.target === 'businessInfo') {
if (results.affectedRows === 0) {
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.' +
(hero.target === 'maintenance'
? 'tbl_maintenance_info'
: 'tbl_business_info') +
' SET ?';
crossCtl.db.doEasyQueryPost(qry, post, function (error, results) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
crossCtl.redis.publishMessage({
cmd:
hero.target === 'maintenance' ? 'maintenance' : 'business',
});
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
});
} else {
crossCtl.redis.publishMessage({
cmd: hero.target === 'maintenance' ? 'maintenance' : 'business',
});
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
} else if (hero.target === 'board:info') {
crossCtl.redis.publishMessage({
cmd: 'update',
target: hero.target,
hero: hero.hero,
});
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
} else if (hero.target === 'profile') {
if (crossCtl.sConfig.type == 'linkcare') {
var tmpQry =
'UPDATE linkcare.tbl_family_list SET profile_url = ' +
mysql.escape(hero.photoUrl) +
' WHERE uid = ' +
mysql.escape(uid);
console.log('qry = ', tmpQry);
crossCtl.db.doEasyQuery(tmpQry, function (error, results) {});
}
crossCtl.loadProfile(req.user, function (err, result) {
if (hero.password !== undefined) {
crossCtl.chanePassword(uid, hero.password, function (err) {
if (err) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
}
});
}
}
}
router.post('/delete', function (req, res) {
var hero = req.body;
console.log('hero=', hero);
var authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
var uid = req.isAuthenticated()
? req.user.uid
: utils.uuid('uid_' + req.sessionID);
let userLevel = req.isAuthenticated() ? req.user.account_info.user_level : -1;
var qry = '';
var post = {};
switch (hero.target) {
case 'board:info':
authorized = req.infos.userInfo.adminFlag;
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_board_info SET ? WHERE bid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND status = 0';
post = {
status: 4,
};
break;
case 'board':
authorized = true;
qry = hero.target;
break;
case 'fcmToken':
authorized = req.isAuthenticated();
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_fcm_tokens SET ? WHERE tid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
post = {
status: 4,
};
break;
case 'notice':
authorized = req.infos.userInfo.adminFlag;
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_notice_list SET ? WHERE serial = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
post = {
status: 4,
};
break;
case 'faq':
authorized = req.infos.userInfo.adminFlag;
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_faq_list SET ? WHERE serial = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
post = {
status: 4,
};
break;
case 'support:ask':
authorized = req.isAuthenticated();
qry = hero.target;
/*
qry =
"UPDATE " +
crossCtl.db.options.database +
".tbl_support_list SET ? WHERE uid = " +
mysql.escape(uid) +
" AND status = 0" +
" AND site_id = " +
mysql.escape(crossCtl.sConfig.type) +
" AND session_id = " +
mysql.escape(hero.hero);
post = {
status: 4,
};
*/
break;
case 'file':
authorized = req.infos.userInfo.adminFlag;
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_file_list SET ? WHERE serial = ' +
mysql.escape(hero.hero) +
' AND status = 0' +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
post = {
status: 4,
};
break;
case 'maintenance':
authorized = req.infos.userInfo.adminFlag;
qry = hero.target;
break;
case 'businessInfo':
authorized = req.infos.userInfo.adminFlag;
qry = hero.target;
break;
case 'comment':
authorized = req.isAuthenticated();
qry = hero.target;
break;
default:
}
if (qry === '') {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: 'unknown target : ' + hero.target,
});
} else if (authorized === false) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized',
});
} else {
if (qry === hero.target) {
if (hero.target === 'maintenance') {
crossCtl.deleteMaintenanceInfo(function (error) {
if (error) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
maintenanceInfo: null,
});
}
});
} else if (hero.target === 'businessInfo') {
crossCtl.deleteBusinessInfo(function (error) {
if (error) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
businessInfo: null,
});
}
});
} else if (hero.target === 'support:ask') {
qry =
'SELECT * FROM ' +
crossCtl.db.options.database +
'.tbl_support_list WHERE site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND status = 0 AND uid = ' +
mysql.escape(uid) +
' ORDER BY serial DESC LIMIT 1';
crossCtl.db.doEasyQuery(qry, function (error, results) {
if (error) {
utils.log(
'error',
'select, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
if (results.length == 0) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: 'no session to close',
hero: hero,
});
} else {
var currentSessionId = results[0].session_id;
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_support_list SET ? WHERE uid = ' +
mysql.escape(uid) +
' AND status = 0' +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND session_id = ' +
mysql.escape(currentSessionId);
post = {
status: 4,
};
crossCtl.db.doEasyQueryPost(qry, post, function (error, results) {
if (error) {
utils.log(
'error',
'update, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
qry =
'INSERT INTO ' +
crossCtl.db.options.database +
'.tbl_support_list SET ? ';
post = {
site_id: crossCtl.sConfig.type,
type: 'system',
session_id: currentSessionId,
uid: uid,
name: req.infos.userInfo.profile.display_name,
from_id: uid,
message: '사용자에 의해 상담이 종료되었습니다.',
status: 4,
};
crossCtl.db.doEasyQueryPost(
qry,
post,
function (error, results) {
if (error) {
utils.log(
'error',
'delete, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
}
);
}
});
}
}
});
} else if (hero.target === 'comment') {
crossCtl.handleComment('delete', req, function (error) {
if (error) {
utils.log(
'error',
'delete, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
switch (hero.from) {
case 'post':
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_post_list SET comment_count = comment_count - 1 WHERE pid = ' +
mysql.escape(hero.tid);
break;
case 'board':
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_board_list SET comment_count = comment_count - 1 WHERE cid = ' +
mysql.escape(hero.tid);
break;
default:
qry = '';
}
if (qry != '') {
crossCtl.db.doEasyQuery(qry, function (error, results) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
pid: hero.hero,
});
}
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
}
});
} else if (hero.target == 'board') {
crossCtl.getBoardInfo(hero.boardId, true, function (error, boardInfo) {
if (error) {
if (error.toString().startsWith('Error: #404')) {
cb(
{
responseCode: 404,
responseMessage: error.message
? error.message
: error.toString(),
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
},
null
);
} else {
cb(
{
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
},
null
);
}
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
if (boardInfo == undefined) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 404,
responseMessage: 'target board not found',
hero: hero,
});
} else if (userLevel < boardInfo['write_level_min']) {
console.log('traped by write_level_min');
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized',
});
} else {
console.log('pass write_level_min test');
qry =
'UPDATE ' +
crossCtl.db.options.database +
'.tbl_board_list SET ? WHERE cid = ' +
mysql.escape(hero.hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND board_id = ' +
mysql.escape(boardInfo['bid']);
(' AND status = 0');
post = {
status: 4,
};
console.log('qry = ', qry);
crossCtl.db.doEasyQueryPost(qry, post, function (error, results) {
if (error) {
utils.log(
'error',
'insert, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
hero: hero,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
});
}
// do gatekeeping
}
});
} else {
switch (hero.target) {
case 'huk':
req.workTag.responsePacket.data = [];
break;
default:
}
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
} else {
crossCtl.db.doEasyQueryPost(qry, post, function (error, results) {
if (error) {
utils.log(
'error',
'delete, hero =',
hero,
', error=',
error,
utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message ? error.message : error.toString(),
hero: hero,
});
} else {
if (hero.target === 'file') {
crossCtl.getFidInfoBySerial(hero.hero, function (error, results) {
if (error) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
});
} else {
if (results.length !== 1) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 404,
responseMessage: 'target not found',
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
var fidKey = results[0].fid + '::' + results[0].name;
crossCtl.redis.publishMessage({
cmd: 'file',
fidKey: fidKey,
});
}
}
});
} else if (hero.target === 'board:info') {
crossCtl.redis.publishMessage({
cmd: 'update',
target: hero.target,
hero: hero.hero,
});
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
});
}
}
});
}
}
});
function preListWork(req, res, cb) {
let target = req.query.target;
let hero = req.query.hero;
let draw = req.query.draw;
let userLevel = req.isAuthenticated() ? req.user.account_info.user_level : -1;
switch (target) {
case 'board':
// 접근 권한이 있는지체크하고 오케이 된 경우에만 다음 작업으로 넘어가자.
crossCtl.getBoardInfo(hero, true, function (error, boardInfo) {
if (error) {
if (error.toString().startsWith('Error: #404')) {
cb(
{
responseCode: 404,
responseMessage: error.message
? error.message
: error.toString(),
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
},
null
);
} else {
cb(
{
responseCode: 500,
responseMessage: error.message
? error.message
: error.toString(),
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
},
null
);
}
} else {
console.log('result of getBoardInfo = ', boardInfo);
console.log('read_level_min = ', boardInfo['read_level_min']);
console.log('write_level_min = ', boardInfo['write_level_min']);
console.log('userLevel = ', userLevel);
console.log('condition = ', userLevel < boardInfo['read_level_min']);
// do gatekeeping
if (userLevel < boardInfo['read_level_min']) {
console.log('traped by read_level_min');
cb(
{
responseCode: 401,
responseMessage: 'Unauthorized',
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
},
null
);
} else {
console.log('pass read_level_min test');
cb(null, boardInfo);
}
}
});
break;
default:
cb(null, null);
}
}
function doListWork(req, res, metaData, cb) {
var uid = req.isAuthenticated()
? req.user.uid
: utils.uuid('uid_' + req.sessionID);
var lang = req.infos.lang;
moment.locale(lang);
var user_info = req.isAuthenticated() ? req.user.user_info : {};
let userLevel = req.isAuthenticated() ? req.user.account_info.user_level : -1;
var response = {};
var target = req.query.target;
var hero = req.query.hero;
var draw = req.query.draw;
var start = req.query.start ? req.query.start : 0;
var length = req.query.length ? req.query.length : 10;
var selectClause = '*';
var tableName = '';
var joinClause = '';
var whereClause = '';
var groupByClause = '';
var orderByClause = 'serial DESC';
var columns = req.query.columns;
var order = req.query.order ? req.query.order : [];
// orderByClause = ''
for (var i = 0; i < order.length; i++) {
if (orderByClause !== '') {
orderByClause = orderByClause + ', ';
}
orderByClause =
orderByClause +
columns[order[i].column].data +
' ' +
order[i].dir.toUpperCase();
}
// console.log('orderByClause=', orderByClause)
var authorized = req.infos.userInfo.adminFlag;
switch (target) {
case 'admin:board:info:deactivated':
authorized = req.infos.userInfo.adminFlag;
tableName = crossCtl.db.options.database + '.tbl_board_info';
whereClause =
' status <> 0 AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'admin:white':
authorized = req.infos.userInfo.adminFlag;
tableName = crossCtl.db.options.database + '.tbl_white_list';
whereClause = ' site_id = ' + mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'admin:board:info:active':
authorized = req.infos.userInfo.adminFlag;
tableName = crossCtl.db.options.database + '.tbl_board_info';
whereClause =
' status = 0 AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'like':
authorized = true;
tableName = crossCtl.db.options.database + '.tbl_like_list';
whereClause =
'domain = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND uid = ' +
mysql.escape(uid);
break;
case 'comment:active':
authorized = true;
tableName = crossCtl.db.options.database + '.tbl_comment_list';
whereClause =
'tid = ' +
mysql.escape(hero) +
' AND status < 4 AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial ASC';
break;
case 'board':
console.log('read_level_min = ', metaData['read_level_min']);
console.log('userLevel = ', userLevel);
console.log('condition = ', userLevel >= metaData['read_level_min']);
authorized = userLevel >= metaData['read_level_min'];
console.log('board, authorized = ', authorized);
tableName = crossCtl.db.options.database + '.tbl_board_list';
whereClause =
'site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND board_id = ' +
mysql.escape(metaData['bid']) +
' AND status = 0';
orderByClause = 'serial DESC';
break;
case 'inquiry':
authorized = req.infos.userInfo.loginFlag;
tableName = crossCtl.db.options.database + '.tbl_inquiry_list';
whereClause =
' uid = ' +
mysql.escape(uid) +
' AND status = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'inquiry:all':
authorized = req.infos.userInfo.loginFlag;
tableName = crossCtl.db.options.database + '.tbl_inquiry_list';
whereClause =
' uid = ' +
mysql.escape(uid) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'admin:inquiry:all':
authorized = req.infos.userInfo.adminFlag;
tableName = crossCtl.db.options.database + '.tbl_inquiry_list';
whereClause = ' site_id = ' + mysql.escape(crossCtl.sConfig.type);
/*
whereClause =
' status = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
*/
orderByClause = 'serial DESC';
break;
case 'admin:inquiry:wait':
authorized = req.infos.userInfo.adminFlag;
tableName = crossCtl.db.options.database + '.tbl_inquiry_list';
whereClause =
' status = 0 AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'admin:inquiry:done':
authorized = req.infos.userInfo.adminFlag;
tableName = crossCtl.db.options.database + '.tbl_inquiry_list';
whereClause =
' status = 2 OR status = 4' +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'admin:inquiry:user':
authorized = req.infos.userInfo.adminFlag;
tableName = crossCtl.db.options.database + '.tbl_inquiry_list';
whereClause =
' uid = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'fcmToken:active':
authorized = req.infos.userInfo.loginFlag;
tableName = crossCtl.db.options.database + '.tbl_fcm_tokens';
whereClause =
'status = 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'files:active':
authorized = true;
tableName = crossCtl.db.options.database + '.tbl_file_list';
whereClause =
'status = 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'notice:all':
tableName = crossCtl.db.options.database + '.tbl_notice_list';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'notice:active':
tableName = crossCtl.db.options.database + '.tbl_notice_list';
whereClause =
'site_id = ' + mysql.escape(crossCtl.sConfig.type) + ' AND status = 0';
break;
case 'notice:deleted':
tableName = crossCtl.db.options.database + '.tbl_notice_list';
whereClause =
'status <> 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'support:my':
authorized = req.infos.userInfo.loginFlag;
tableName = crossCtl.db.options.database + '.tbl_support_list';
whereClause =
'uid = ' +
mysql.escape(uid) +
' AND status = 0' +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial ASC';
break;
case 'support:all':
tableName = crossCtl.db.options.database + '.tbl_support_list';
groupByClause = 'uid';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'support:active':
tableName = crossCtl.db.options.database + '.tbl_support_list';
groupByClause = 'session_id';
whereClause =
'status = 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'support:user':
tableName = crossCtl.db.options.database + '.tbl_support_list';
// whereClause = 'uid = ' + mysql.escape(hero) + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type) + ' AND status = 0'
whereClause =
'uid = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'support:user:active':
tableName = crossCtl.db.options.database + '.tbl_support_list';
whereClause =
'uid = ' +
mysql.escape(hero) +
' AND status = 0' +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'admin:users:level:all':
console.log('in get.list, req.sessionID = ', req.sessionID);
authorized = req.infos.userInfo.adminFlag;
selectClause =
'*, ' +
crossCtl.db.options.database +
'.tbl_account_users.serial as serial';
tableName = crossCtl.db.options.database + '.tbl_account_users';
joinClause =
'LEFT JOIN ' +
crossCtl.db.options.database +
'.tbl_profile_list ON ' +
crossCtl.db.options.database +
'.tbl_account_users.uid = ' +
crossCtl.db.options.database +
'.tbl_profile_list.uid ';
whereClause =
tableName +
'.site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND ' +
tableName +
'.status = 0';
orderByClause =
crossCtl.db.options.database + '.tbl_account_users.' + 'serial DESC';
break;
case 'faq:active':
authorized = true;
tableName = crossCtl.db.options.database + '.tbl_faq_list';
whereClause =
'status = 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
orderByClause = 'list_order DESC';
break;
case 'faq:all':
tableName = crossCtl.db.options.database + '.tbl_faq_list';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'faq:deleted':
tableName = crossCtl.db.options.database + '.tbl_faq_list';
whereClause =
'status <> 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'users:active':
tableName = crossCtl.db.options.database + '.tbl_account_users';
whereClause =
'status = 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'users:all':
tableName = crossCtl.db.options.database + '.tbl_account_users';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'users:withdrawal':
tableName = crossCtl.db.options.database + '.tbl_account_users';
whereClause =
'status = 4' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'users:deleted':
tableName = crossCtl.db.options.database + '.tbl_account_users';
whereClause =
'status = 9' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'log:user':
tableName = crossCtl.db.options.database + '.tbl_user_log';
whereClause =
'uid = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'log:user:active':
tableName = crossCtl.db.options.database + '.tbl_user_log';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'log:credit':
tableName = crossCtl.db.options.database + '.tbl_credit_log';
whereClause =
'uid = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'log:credit:active':
tableName = crossCtl.db.options.database + '.tbl_credit_log';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'statistics':
tableName = crossCtl.db.options.database + '.tbl_statistics_list';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
default:
}
if (tableName === '') {
cb(
{
responseCode: 500,
responseMessage: 'unknown target : ' + target,
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
},
null
);
} else if (authorized === false) {
cb(
{
responseCode: 401,
responseMessage: 'Unauthorized',
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
},
null
);
} else {
var targetPageNumber = parseInt(start / length) + 1;
var targetPageSize = length;
// console.log('targetPageNumber=', targetPageNumber)
// console.log('targetPageSize=', targetPageSize)
crossCtl.getPagedList(
selectClause,
tableName,
joinClause,
whereClause,
groupByClause,
orderByClause,
targetPageSize,
targetPageNumber,
function (error, results) {
var data = [];
if (error) {
utils.log(
'error',
'error : ' + JSON.stringify(error) + ' ' + utils.__where()
);
cb(
{
responseCode: 500,
responseMessage: error.message ? error.message : error.toString(),
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
},
null
);
} else {
// console.log('results.fileList=', results.fileList)
cb(null, { metaData: metaData, results: results });
}
}
);
}
}
function postListWork(req, res, metaData, cb) {
var uid = req.isAuthenticated()
? req.user.uid
: utils.uuid('uid_' + req.sessionID);
var lang = req.infos.lang;
moment.locale(lang);
var user_info = req.isAuthenticated() ? req.user.user_info : {};
var target = req.query.target;
var hero = req.query.hero;
var draw = req.query.draw;
var rawList = metaData.results.fileList;
var filteredMetaData = JSON.parse(JSON.stringify(metaData.metaData));
var filteredData = [];
switch (target) {
case 'board':
delete filteredMetaData.serial;
delete filteredMetaData.bid;
delete filteredMetaData.site_id;
delete filteredMetaData.level_min;
delete filteredMetaData.read_level_min;
delete filteredMetaData.write_level_min;
delete filteredMetaData.memo;
delete filteredMetaData.status;
delete filteredMetaData.updated;
delete filteredMetaData.creaed;
break;
default:
}
for (var i = 0; i < rawList.length; i++) {
var tmpObject = JSON.parse(JSON.stringify(rawList[i]));
if (tmpObject.uid == uid) {
tmpObject.myFlag = true;
} else {
tmpObject.myFlag = false;
}
/*
if (tmpObject.created !== undefined) {
tmpObject.created = moment(tmpObject.created).format("LLLL")
}
if (tmpObject.updated !== undefined) {
tmpObject.updated = moment(tmpObject.updated).format("LLLL")
}
*/
switch (target) {
case 'board':
delete tmpObject.uid;
break;
case 'admin:users:level:all':
// tmpObject.serial
let tmpUserInfo = utils.safeJSON(tmpObject.infos);
tmpObject.name = tmpObject.display_name;
tmpObject.email = tmpUserInfo.email ? tmpUserInfo.email : '';
tmpObject.phone = tmpUserInfo.phone ? tmpUserInfo.phone : '';
tmpObject.memo = tmpUserInfo.memo ? tmpUserInfo.memo : '';
let tmpMailParts = tmpObject.email.split('@');
console.log('tmpMailParts=', tmpMailParts);
console.log('tmpObject.email=', tmpObject.email);
if (tmpMailParts.length > 1) {
tmpObject.domain = tmpObject.email.replace(tmpMailParts[0] + '@', '');
} else {
tmpObject.domain = 'unknown';
}
switch (tmpObject.user_level) {
case 0:
case 1:
case 2:
tmpObject.role = 'user';
break;
case 3:
tmpObject.role = 'op';
break;
case 4:
tmpObject.role = 'super';
break;
case 5:
tmpObject.role = 'admin';
break;
default:
tmpObject.role = 'unknown';
break;
}
/*
delete tmpObject.auth_key;
delete tmpObject.auth_token;
delete tmpObject.auth_type;
delete tmpObject.coach_id;
delete tmpObject.credit_bonus;
delete tmpObject.credit_real;
delete tmpObject.lock_flag;
delete tmpObject.pref_data;
delete tmpObject.role_tag;
delete tmpObject.site_id;
// delete tmpObject.uid;
delete tmpObject.withdrawal_info;
delete tmpObject.site_id;
delete tmpObject.display_name;
delete tmpObject.infos;
delete tmpObject.photo_url;
// delete tmpObject.pid;
delete tmpObject.status;
delete tmpObject.user_level;
*/
break;
case 'notice:active':
case 'notice:all':
case 'notice:deleted':
break;
case 'support:my':
case 'support:all':
case 'support:all:active':
case 'support:user':
case 'support:user:active':
break;
case 'faq:active':
case 'faq:all':
case 'faq:deleted':
break;
case 'users:active':
case 'users:all':
case 'users:withdrawal':
case 'users:deleted':
break;
case 'log:user':
case 'log:user:all':
break;
case 'log:credit':
case 'log:credit:all':
break;
case 'statistics':
break;
default:
}
filteredData[filteredData.length] = tmpObject;
// console.log('tmpObject=', tmpObject)
}
cb(null, {
responseCode: 200,
responseMessage: 'ok',
draw: draw,
recordsTotal: metaData.results.totalCount,
pageSize: metaData.results.pageSize,
totalPageCount: metaData.results.totalPageCount,
currentPageNumber: metaData.results.currentPageNumber,
recordsFiltered: filteredData.length,
metaData: filteredMetaData,
data: filteredData,
});
}
function handleListWork(req, res) {
preListWork(req, res, function (errorResponseData, metaData) {
if (errorResponseData) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
...errorResponseData,
});
} else {
doListWork(req, res, metaData, function (errorResponseData, results) {
if (errorResponseData) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
...errorResponseData,
});
} else {
postListWork(
req,
res,
results,
function (errorResponseData, responseData) {
if (errorResponseData) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
...errorResponseData,
});
} else {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
...responseData,
});
}
}
);
}
});
}
});
}
router.get('/list', function (req, res) {
handleListWork(req, res);
});
router.get('/listBack', function (req, res) {
// console.log('/list, query=', req.query)
var uid = req.isAuthenticated()
? req.user.uid
: utils.uuid('uid_' + req.sessionID);
var lang = req.infos.lang;
moment.locale(lang);
var user_info = req.isAuthenticated() ? req.user.user_info : {};
var response = {};
var target = req.query.target;
var hero = req.query.hero;
var draw = req.query.draw;
var start = req.query.start ? req.query.start : 0;
var length = req.query.length ? req.query.length : 10;
var selectClause = '*';
var tableName = '';
var joinClause = '';
var whereClause = '';
var groupByClause = '';
var orderByClause = 'serial DESC';
var columns = req.query.columns;
var order = req.query.order ? req.query.order : [];
// orderByClause = ''
for (var i = 0; i < order.length; i++) {
if (orderByClause !== '') {
orderByClause = orderByClause + ', ';
}
orderByClause =
orderByClause +
columns[order[i].column].data +
' ' +
order[i].dir.toUpperCase();
}
// console.log('orderByClause=', orderByClause)
var authorized = req.infos.userInfo.adminFlag;
switch (target) {
case 'admin:board:info:deactivated':
authorized = req.infos.userInfo.adminFlag;
tableName = crossCtl.db.options.database + '.tbl_board_info';
whereClause =
' status <> 0 AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'admin:board:info:active':
authorized = req.infos.userInfo.adminFlag;
tableName = crossCtl.db.options.database + '.tbl_board_info';
whereClause =
' status = 0 AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'like':
authorized = true;
tableName = crossCtl.db.options.database + '.tbl_like_list';
whereClause =
'domain = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND uid = ' +
mysql.escape(uid);
break;
case 'comment:active':
authorized = true;
tableName = crossCtl.db.options.database + '.tbl_comment_list';
whereClause =
'tid = ' +
mysql.escape(hero) +
' AND status < 4 AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial ASC';
break;
case 'board':
authorized = req.infos.userInfo.loginFlag;
tableName = crossCtl.db.options.database + '.tbl_board_list';
whereClause =
'site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND board_id = ' +
mysql.escape(hero) +
' AND status = 0';
orderByClause = 'serial DESC';
break;
case 'inquiry':
authorized = req.infos.userInfo.loginFlag;
tableName = crossCtl.db.options.database + '.tbl_inquiry_list';
whereClause =
' uid = ' +
mysql.escape(uid) +
' AND status = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'inquiry:all':
authorized = req.infos.userInfo.loginFlag;
tableName = crossCtl.db.options.database + '.tbl_inquiry_list';
whereClause =
' uid = ' +
mysql.escape(uid) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'admin:inquiry':
authorized = req.infos.userInfo.adminFlag;
tableName = crossCtl.db.options.database + '.tbl_inquiry_list';
whereClause =
' status = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'admin:inquiry:done':
authorized = req.infos.userInfo.adminFlag;
tableName = crossCtl.db.options.database + '.tbl_inquiry_list';
whereClause =
' status = 2 OR status = 4' +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'admin:inquiry:user':
authorized = req.infos.userInfo.adminFlag;
tableName = crossCtl.db.options.database + '.tbl_inquiry_list';
whereClause =
' uid = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial DESC';
break;
case 'fcmToken:active':
authorized = req.infos.userInfo.loginFlag;
tableName = crossCtl.db.options.database + '.tbl_fcm_tokens';
whereClause =
'status = 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'files:active':
authorized = true;
tableName = crossCtl.db.options.database + '.tbl_file_list';
whereClause =
'status = 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'notice:all':
tableName = crossCtl.db.options.database + '.tbl_notice_list';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'notice:active':
tableName = crossCtl.db.options.database + '.tbl_notice_list';
whereClause =
'site_id = ' + mysql.escape(crossCtl.sConfig.type) + ' AND status = 0';
break;
case 'notice:deleted':
tableName = crossCtl.db.options.database + '.tbl_notice_list';
whereClause =
'status <> 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'support:my':
authorized = req.infos.userInfo.loginFlag;
tableName = crossCtl.db.options.database + '.tbl_support_list';
whereClause =
'uid = ' +
mysql.escape(uid) +
' AND status = 0' +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
orderByClause = 'serial ASC';
break;
case 'support:all':
tableName = crossCtl.db.options.database + '.tbl_support_list';
groupByClause = 'uid';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'support:active':
tableName = crossCtl.db.options.database + '.tbl_support_list';
groupByClause = 'session_id';
whereClause =
'status = 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'support:user':
tableName = crossCtl.db.options.database + '.tbl_support_list';
// whereClause = 'uid = ' + mysql.escape(hero) + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type) + ' AND status = 0'
whereClause =
'uid = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'support:user:active':
tableName = crossCtl.db.options.database + '.tbl_support_list';
whereClause =
'uid = ' +
mysql.escape(hero) +
' AND status = 0' +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'admin:users:level:all':
console.log('in get.list, req.sessionID = ', req.sessionID);
authorized = req.infos.userInfo.adminFlag;
selectClause =
'*, ' +
crossCtl.db.options.database +
'.tbl_account_users.serial as serial';
tableName = crossCtl.db.options.database + '.tbl_account_users';
joinClause =
'LEFT JOIN ' +
crossCtl.db.options.database +
'.tbl_profile_list ON ' +
crossCtl.db.options.database +
'.tbl_account_users.uid = ' +
crossCtl.db.options.database +
'.tbl_profile_list.uid ';
whereClause =
tableName +
'.site_id = ' +
mysql.escape(crossCtl.sConfig.type) +
' AND ' +
tableName +
'.status = 0';
orderByClause =
crossCtl.db.options.database + '.tbl_account_users.' + 'serial DESC';
break;
case 'faq:active':
authorized = true;
tableName = crossCtl.db.options.database + '.tbl_faq_list';
whereClause =
'status = 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
orderByClause = 'list_order DESC';
break;
case 'faq:all':
tableName = crossCtl.db.options.database + '.tbl_faq_list';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'faq:deleted':
tableName = crossCtl.db.options.database + '.tbl_faq_list';
whereClause =
'status <> 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'users:active':
tableName = crossCtl.db.options.database + '.tbl_account_users';
whereClause =
'status = 0' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'users:all':
tableName = crossCtl.db.options.database + '.tbl_account_users';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'users:withdrawal':
tableName = crossCtl.db.options.database + '.tbl_account_users';
whereClause =
'status = 4' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'users:deleted':
tableName = crossCtl.db.options.database + '.tbl_account_users';
whereClause =
'status = 9' + ' AND site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'log:user':
tableName = crossCtl.db.options.database + '.tbl_user_log';
whereClause =
'uid = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'log:user:active':
tableName = crossCtl.db.options.database + '.tbl_user_log';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'log:credit':
tableName = crossCtl.db.options.database + '.tbl_credit_log';
whereClause =
'uid = ' +
mysql.escape(hero) +
' AND site_id = ' +
mysql.escape(crossCtl.sConfig.type);
break;
case 'log:credit:active':
tableName = crossCtl.db.options.database + '.tbl_credit_log';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
case 'statistics':
tableName = crossCtl.db.options.database + '.tbl_statistics_list';
whereClause = 'site_id = ' + mysql.escape(crossCtl.sConfig.type);
break;
default:
}
if (tableName === '') {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: 'unknown target : ' + target,
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
});
} else if (authorized === false) {
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 401,
responseMessage: 'Unauthorized',
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
});
} else {
var targetPageNumber = parseInt(start / length) + 1;
var targetPageSize = length;
// console.log('targetPageNumber=', targetPageNumber)
// console.log('targetPageSize=', targetPageSize)
crossCtl.getPagedList(
selectClause,
tableName,
joinClause,
whereClause,
groupByClause,
orderByClause,
targetPageSize,
targetPageNumber,
function (error, results) {
var data = [];
if (error) {
utils.log(
'error',
'error : ' + JSON.stringify(error) + ' ' + utils.__where()
);
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 500,
responseMessage: error.message ? error.message : error.toString(),
draw: draw,
recordsTotal: 0,
recordsFiltered: 0,
data: [],
});
} else {
// console.log('results.fileList=', results.fileList)
var rawList = results.fileList;
var filteredData = [];
for (var i = 0; i < rawList.length; i++) {
var tmpObject = JSON.parse(JSON.stringify(rawList[i]));
if (tmpObject.uid == uid) {
tmpObject.myFlag = true;
} else {
tmpObject.myFlag = false;
}
/*
if (tmpObject.created !== undefined) {
tmpObject.created = moment(tmpObject.created).format("LLLL")
}
if (tmpObject.updated !== undefined) {
tmpObject.updated = moment(tmpObject.updated).format("LLLL")
}
*/
switch (target) {
case 'board':
delete tmpObject.uid;
break;
case 'admin:users:level:all':
// tmpObject.serial
let tmpUserInfo = utils.safeJSON(tmpObject.infos);
tmpObject.name = tmpObject.display_name;
tmpObject.email = tmpUserInfo.email ? tmpUserInfo.email : '';
tmpObject.phone = tmpUserInfo.phone ? tmpUserInfo.phone : '';
tmpObject.memo = tmpUserInfo.memo ? tmpUserInfo.memo : '';
let tmpMailParts = tmpObject.email.split('@');
console.log('tmpMailParts=', tmpMailParts);
console.log('tmpObject.email=', tmpObject.email);
if (tmpMailParts.length > 1) {
tmpObject.domain = tmpObject.email.replace(
tmpMailParts[0] + '@',
''
);
} else {
tmpObject.domain = 'unknown';
}
switch (tmpObject.user_level) {
case 0:
case 1:
case 2:
tmpObject.role = 'user';
break;
case 3:
tmpObject.role = 'op';
break;
case 4:
tmpObject.role = 'super';
break;
case 5:
tmpObject.role = 'admin';
break;
default:
tmpObject.role = 'unknown';
break;
}
/*
delete tmpObject.auth_key;
delete tmpObject.auth_token;
delete tmpObject.auth_type;
delete tmpObject.coach_id;
delete tmpObject.credit_bonus;
delete tmpObject.credit_real;
delete tmpObject.lock_flag;
delete tmpObject.pref_data;
delete tmpObject.role_tag;
delete tmpObject.site_id;
// delete tmpObject.uid;
delete tmpObject.withdrawal_info;
delete tmpObject.site_id;
delete tmpObject.display_name;
delete tmpObject.infos;
delete tmpObject.photo_url;
// delete tmpObject.pid;
delete tmpObject.status;
delete tmpObject.user_level;
*/
break;
case 'notice:active':
case 'notice:all':
case 'notice:deleted':
break;
case 'support:my':
case 'support:all':
case 'support:all:active':
case 'support:user':
case 'support:user:active':
break;
case 'faq:active':
case 'faq:all':
case 'faq:deleted':
break;
case 'users:active':
case 'users:all':
case 'users:withdrawal':
case 'users:deleted':
break;
case 'log:user':
case 'log:user:all':
break;
case 'log:credit':
case 'log:credit:all':
break;
case 'statistics':
break;
default:
}
filteredData[filteredData.length] = tmpObject;
// console.log('tmpObject=', tmpObject)
}
req.workTag
.res()
.status(200)
.send({
...req.workTag.responsePacket,
responseCode: 200,
responseMessage: 'ok',
draw: draw,
recordsTotal: results.totalCount,
recordsFiltered: results.totalCount,
pageSize: results.pageSize,
totalPageCount: results.totalPageCount,
currentPageNumber: results.currentPageNumber,
recordsFiltered: results.totalCount,
data: filteredData,
});
}
}
);
}
});
module.exports = router;