UNPKG

kpiplus

Version:

KPI+

1 lines 5.64 kB
var express=require("express"),bodyParser=require("body-parser"),session=require("express-session"),passport=require("passport"),underscore=require("underscore"),https=require("https"),http=require("http"),fs=require("fs"),path=require("path"),async=require("async");global.rootDir=__dirname,global.mongoose=require("mongoose"),global.Schema=mongoose.Schema,global.ctrlVouchers={},global.postingVouchers={},global.cacheDatas={};var configs=require("./configs");global.port=configs.PORT||443,global.GCM_API_KEY="AIzaSyDhOzWmkfOVKRR9wCijzyyCJeBTdJllReY";var moment=require("moment-timezone");moment.tz.setDefault(configs.timezone||"Asia/Ho_Chi_Minh");var connect=mongoose.connect(configs.database.url),redisCache=require("./libs/redis-cache"),redis=require("redis");global.clientRedis=redis.createClient(),clientRedis.on("connect",function(){console.log("redis connected")});var Mailmanagement=require("./libs/mailmanagement");global.mailmanagement=new Mailmanagement,mailmanagement.start();var Agenda=require("agenda");global.agenda=new Agenda({db:{address:configs.database.url}});var schedule=require("./libs/schedule");schedule.define(),agenda.on("ready",function(){});const EventEmitter=require("events");class GlobalEmitter extends EventEmitter{}global.globalEvents=new GlobalEmitter;let campaign=require("./models/campaign");campaign.find({status:!0}).lean().exec((e,r)=>{r&&r.forEach(e=>{campaign.listenerEvents(e,()=>{})})});var Menu=require("./menu"),modulesVisible=Menu.getModules();global.modulesInMenu={},underscore.values(modulesVisible).forEach(function(e){global.modulesInMenu[e.name]=e});var app=express();app.use(session({secret:"098STP123456",resave:!1,saveUninitialized:!0}));var compress=require("compression");app.use(compress());var multer=require("multer")({dest:"./uploads"});app.use(multer),app.options("/*",function(e,r){r.header("Access-Control-Allow-Origin",e.headers.origin||"*"),r.header("Access-Control-Allow-Methods","GET,POST,PUT,HEAD,DELETE,OPTIONS"),r.header("Access-Control-Allow-Headers","content-Type,x-requested-with,X-Access-Token,Authorization"),r.sendStatus(200)}),app.use(function(e,r,s){r.header("Access-Control-Allow-Origin",e.headers.origin||"*"),r.header("Access-Control-Allow-Methods","GET,POST,PUT,HEAD,DELETE,OPTIONS"),r.header("Access-Control-Allow-Headers","content-Type,x-requested-with,X-Access-Token,Authorization"),s()}),app.use("/",express.static(__dirname+"/public")),app.use("/templates",express.static(__dirname+"/templates")),app.use("/images",express.static(__dirname+"/images")),app.use(bodyParser.urlencoded({extended:!0})),app.use(bodyParser.json()),app.use(passport.initialize());var morgan=require("morgan"),rfs=require("rotating-file-stream"),logDirectory=path.join(__dirname,"log");fs.existsSync(logDirectory)||fs.mkdirSync(logDirectory);var server,accessLogStream=rfs("access.log",{interval:"1d",path:logDirectory});if(app.use(morgan("combined",{stream:accessLogStream,skip:function(e,r){return r.statusCode<400}})),configs.use_ssl){var privateKey=fs.readFileSync("./ssl/key.pem"),certificate=fs.readFileSync("./ssl/cert.crt");server=https.createServer({key:privateKey,cert:certificate},app)}else server=http.createServer(app);var getNotifies=require("./libs/getNotifies"),Message=require("./models/message");global.socketIO=require("socket.io")(server,{wsEngine:"ws"}),global.clientIO={},socketIO.on("connection",function(e){e.on("login",function(r){r.token.indexOf("guest@")>=0&&(r.token=r.token.toLowerCase()),clientIO[r.token]||(clientIO[r.token]=[]),clientIO[r.token].push(e.id),getNotifies(r.email,function(r,s){r?console.log(r):socketIO.to(e.id).emit("notify:count",s.colls.length+s.apps.length+s.notifications.length)}),Message.find({email_owner:r.email,email_receiver:r.email,read:!1},{_id:1},function(r,s){r?console.log(r):socketIO.to(e.id).emit("message:count",s.length)})}),e.on("disconnect",function(){var r=function(r){return e.id==r};for(var s in clientIO)clientIO[s]=underscore.reject(clientIO[s],r)})});var WebSocketServer=require("ws").Server,wss=new WebSocketServer({port:8888}),url=require("url");global.wsClients={},wss.on("connection",function(e){"/ws"===url.parse(e.upgradeReq.url,!0).pathname&&(e.on("message",function(r){var s=JSON.parse(r);underscore.isObject(s)&&s.token&&(e.upgradeReq.token=s.token,global.wsClients[s.token]=e)}),e.on("close",function(r,s){delete global.wsClients[e.upgradeReq.token]}))});var User=require("./models/user");global.alertMessage=function(e){Message.find({email_owner:e,email_receiver:e,read:!1},{_id:1},function(r,s){r?console.log(r):User.emitEvent(e,"message:count",s.length,!1)})};var route=require("./route");route(app),configs.adminUsers.forEach(function(e){User.findOne({email:e.email},function(r,s){if(r)return console.error(r);if(!s){e.local={name:e.name,email:e.email,active:!0};var o=new User(e);o.local.password=o.generateHash(e.defaultPassword),o.save(function(e,r){if(e)return console.error(e);r&&console.log("da tao thanh cong user "+r.email),console.log("creating system data...");var s=fs.readdirSync(__dirname+"/data/sys");async.map(s,function(e,r){if(".js"==e.substr(-3)){var s=require("./data/sys/"+e).data,o=require("./models/"+e);async.map(s,function(e,r){delete e._id,delete e.__v,delete e.collection_name,delete e.pkey,o.create(e,function(e){if(e)return r(e);r()})},function(e,s){r(e,s)})}else r()},function(e){if(e)return console.log(e);console.log("created system data")})})}})}),server.listen(port,()=>{console.log("server start at "+port+" port")}),"443"===port&&http.createServer(function(e,r){r.writeHead(301,{Location:"https://"+e.headers.host+":"+port+e.url}),r.end()}).listen(80);