const express = require("express"); const cors = require("cors"); const bodyParser = require("body-parser"); const path = require("path"); const compression = require("compression"); const twilio = require("twilio"); global.fetch = require("node-fetch"); var fb = require("./server/firebase/firebase-handler"); //var enforce = require("express-sslify"); require("dotenv").config({ path: path.resolve( process.cwd(), `.env.${process.env.NODE_ENV || "development"}` ), }); const app = express(); const port = process.env.PORT || 5000; //const port = 5000; //app.use(fb.validateFirebaseIdToken); app.use(compression()); app.use(bodyParser.json({ limit: "50mb" })); app.use(bodyParser.urlencoded({ limit: "50mb", extended: true })); //app.use(enforce.HTTPS({ trustProtoHeader: true })); app.use(cors()); //Email Based Paths. var sendEmail = require("./server/email/sendemail.js"); app.post("/sendemail", fb.validateFirebaseIdToken, sendEmail.sendEmail); //Test route to ensure Express is responding. app.get("/test", async function (req, res) { console.log("Incoming request verified.", req); res.status(200).send("OK"); }); const test = require("./server/_test/test.js"); app.post("/test", test.testResponse); //Accounting-IIF const accountingIIF = require("./server/accounting/iif/iif"); app.post( "/accounting/iif/receivables", fb.validateFirebaseIdToken, accountingIIF.receivables ); //Accounting Qbxml const accountQbxml = require("./server/accounting/qbxml/qbxml"); app.post( "/accounting/qbxml/receivables", fb.validateFirebaseIdToken, accountQbxml.receivables ); app.post( "/accounting/qbxml/payables", fb.validateFirebaseIdToken, accountQbxml.payables ); app.post( "/accounting/qbxml/payments", fb.validateFirebaseIdToken, accountQbxml.payments ); //Cloudinary Media Paths var media = require("./server/media/media"); app.post( "/media/sign", fb.validateFirebaseIdToken, media.createSignedUploadURL ); app.post("/media/download", fb.validateFirebaseIdToken, media.downloadFiles); app.post("/media/rename", fb.validateFirebaseIdToken, media.renameKeys); //SMS/Twilio Paths var smsReceive = require("./server/sms/receive"); app.post( "/sms/receive", twilio.webhook({ validate: process.env.NODE_ENV === "PRODUCTION" }), smsReceive.receive ); var smsSend = require("./server/sms/send"); app.post("/sms/send", fb.validateFirebaseIdToken, smsSend.send); var smsStatus = require("./server/sms/status"); app.post( "/sms/status", twilio.webhook({ validate: process.env.NODE_ENV === "PRODUCTION" }), smsStatus.status ); var job = require("./server/job/job"); app.post("/job/totals", fb.validateFirebaseIdToken, job.totals); app.post("/job/totalsssu", fb.validateFirebaseIdToken, job.totalsSsu); app.post("/job/costing", fb.validateFirebaseIdToken, job.costing); app.post("/job/costingmulti", fb.validateFirebaseIdToken, job.costingmulti); //Scheduling var scheduling = require("./server/scheduling/scheduling-job"); app.post("/scheduling/job", fb.validateFirebaseIdToken, scheduling.job); //Handlebars Paths for Email/Report Rendering var renderHandlebars = require("./server/render/renderHandlebars"); app.post("/render", fb.validateFirebaseIdToken, renderHandlebars.render); var inlineCss = require("./server/render/inlinecss"); app.post("/render/inlinecss", fb.validateFirebaseIdToken, inlineCss.inlinecss); app.post( "/notifications/send", fb.validateFirebaseIdToken, fb.sendNotification ); //Stripe Processing var stripe = require("./server/stripe/payment"); app.post("/stripe/payment", fb.validateFirebaseIdToken, stripe.payment); app.post( "/stripe/mobilepayment", fb.validateFirebaseIdToken, stripe.mobile_payment ); //Tech Console var tech = require("./server/tech/tech"); app.post("/tech/login", fb.validateFirebaseIdToken, tech.techLogin); var utils = require("./server/utils/utils"); app.post("/utils/time", utils.servertime); var qbo = require("./server/accounting/qbo/qbo"); app.post("/qbo/authorize", qbo.authorize); app.get("/qbo/callback", qbo.callback); var data = require("./server/data/data"); app.get("/data/ah", data.autohouse); var ioevent = require("./server/ioevent/ioevent"); app.post("/ioevent", ioevent.default); app.get("/", async function (req, res) { res.status(200).send("Access Forbidden."); }); if (process.env.NODE_ENV === "production") { app.listen(port, (error) => { if (error) throw error; console.log("AWS - [PRODUCTION] Server running on port " + port); }); } else { app.listen(port, (error) => { if (error) throw error; console.log( `[${process.env.NODE_ENV}] Non Secured Server running on port ` + port ); }); }