Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "use strict";
- // Express App (Routes)
- const express = require("express");
- const app = express();
- const path = require("path");
- const fileUpload = require("express-fileupload");
- const bodyParser = require("body-parser");
- const ffi = require("ffi");
- const mysql = require('mysql');
- let connection = null;
- let sharedLib = ffi.Library('./libcal',{
- objectToJSON: ["string", ["string"]],
- fillCalPanel: ["string", ["string"]],
- webToCalendar: [
- "string",
- [
- "string",
- "string",
- "string",
- "string",
- "string",
- "string",
- "string",
- "string",
- "string",
- "string"
- ]
- ],
- webToAddEvent: [
- "string",
- [
- "string",
- "string",
- "string",
- "string",
- "string",
- "string",
- "string",
- "string",
- "string"
- ]
- ],
- webToProps: ["string", ["string", "int"]],
- webToAlarms: ["string", ["string", "int"]]
- });
- app.use(fileUpload());
- app.use(bodyParser.urlencoded({ extended: false }));
- app.use(bodyParser.json());
- // Minimization
- const fs = require("fs");
- const JavaScriptObfuscator = require("javascript-obfuscator");
- // Important, pass in port as in `npm run dev 1234`, do not change
- const portNum = process.argv[2];
- // Send HTML at root, do not change
- app.get("/", function(req, res) {
- res.sendFile(path.join(__dirname + "/public/index.html"));
- });
- // Send Style, do not change
- app.get("/style.css", function(req, res) {
- //Feel free to change the contents of style.css to prettify your Web app
- res.sendFile(path.join(__dirname + "/public/style.css"));
- });
- // Send obfuscated JS, do not change
- app.get("/index.js", function(req, res) {
- fs.readFile(path.join(__dirname + "/public/index.js"), "utf8", function(
- err,
- contents
- ) {
- const minimizedContents = JavaScriptObfuscator.obfuscate(contents, {
- compact: true,
- controlFlowFlattening: true
- });
- res.contentType("application/javascript");
- res.send(minimizedContents._obfuscatedCode);
- });
- });
- //Respond to POST requests that upload files to uploads/ directory
- app.post("/upload", function(req, res) {
- if (!req.files) {
- return res.status(400).send("No files were uploaded.");
- }
- let uploadFile = req.files.file;
- console.log("uploadFile", uploadFile);
- try {
- // Use the mv() method to place the file somewhere on your server
- uploadFile.mv("uploads/" + uploadFile.name, function(err) {
- if (err) {
- return res.status(500).send(err);
- }
- res.redirect("/");
- });
- } catch (err) {
- res.send("No file selected");
- }
- });
- //Respond to GET requests for files in the uploads/ directory
- app.get("/uploads/:name", function(req, res) {
- fs.stat("uploads/" + req.params.name, function(err, stat) {
- console.log(err);
- if (err == null) {
- res.sendFile(path.join(__dirname + "/uploads/" + req.params.name));
- } else {
- res.send("");
- }
- });
- });
- const errorMessages = {
- INV_FILE: 'Invalid File',
- INV_CAL: 'Invalid Calendar',
- INV_EVENT: 'Invald Event',
- INV_ALARM: 'Invalid Alarm'
- }
- app.get("/props", function(req, res) {
- let files = [];
- files = fs.readdirSync("./uploads/");
- let array = [];
- for (let x = 0; x < files.length; x++) {
- array[x] = sharedLib.objectToJSON(files[x]);
- console.log(array[x]);
- }
- res.send(array);
- });
- app.get("/invFileCheck", function(req, res) {
- var file = req.query.fileName;
- let files = [];
- files = fs.readdirSync("./uploads/");
- let response;
- for (let x = 0; x < files.length; x++) {
- if (files[x] == file){
- response = JSON.parse(sharedLib.objectToJSON(file));
- }
- alert(response);
- }
- res.send(response);
- });
- app.get("/fileObject", function(req, res) {
- let files = [];
- files = fs.readdirSync("./uploads/");
- let array = [];
- for (let x = 0; x < files.length; x++) {
- array[x] = JSON.parse(sharedLib.objectToJSON(files[x]));
- console.log(array[x]);
- }
- res.send(array);
- });
- app.get("/dropDownBtn", function(req, res) {
- let files = [];
- files = fs.readdirSync("./uploads/");
- res.send(files);
- });
- // app.get("/alarms", function(req, res) {
- // const alarms = ["asdf", "aalrm2"];
- // res.send(alarms);
- // });
- app.get("/eventProps", function(req, res) {
- const errors = ["INV_FILE"]
- let filename = req.query.filename;
- let eventNum = req.query.eventNumber;
- console.log("adding event props file ", filename + eventNum, " to status db");
- let output = sharedLib.webToProps(filename, eventNum);
- console.log("added event props file ", filename + eventNum, " to status db with output", output);
- const hasError = errors.find(function(error) {
- return error === output
- })
- if(hasError) {
- res.statusMessage = errorMessages[output]
- return res.status(503).send()
- }
- res.send(JSON.parse(output));
- });
- app.get("/eventAlarms", function(req, res) {
- let filename = req.query.filename;
- let alarmNum = req.query.alarmNumber;
- console.log("adding alarm file ", filename + alarmNum, " to status db");
- let output = sharedLib.webToAlarms(filename, alarmNum);
- console.log("added alarm file ", filename + alarmNum, " to status db with output", output);
- res.send(JSON.parse(output));
- });
- app.get("/fillCPanel", function(req, res) {
- let filename = req.query.filename;
- let array = sharedLib.fillCalPanel(filename);
- console.log(array);
- res.send(array);
- //
- // let files = [];
- // files = fs.readdirSync('./uploads/');
- //
- // res.send(files);
- //
- });
- app.post("/calendar", function(req, res, next) {
- const prodid = req.body.prodID;
- const versionEntry = req.body.versionEntry;
- const startDate = req.body.sdtDate;
- const startTime = req.body.sdtTime;
- const creationDate = req.body.cdtDate;
- const creationTime = req.body.cdtTime;
- const uid = req.body.uid;
- const fileName = req.body.filename;
- const sUtcValue = req.body.sUtcValue;
- const cUtcValue = req.body.cUtcValue;
- console.log("Got data from frontend: ", req.body, "\n");
- const requiredFields = [
- "prodID",
- "versionEntry",
- "sdtDate",
- "sdtTime",
- "cdtDate",
- "cdtTime",
- "uid",
- "filename",
- "sUtcValue",
- "cUtcValue"
- ]
- let unavailableField = ""
- const isAllFieldsAvailable =requiredFields.every(function(requiredField) {
- const isCurrentFieldAvailable = !!req.body[requiredField]
- if(!isCurrentFieldAvailable) {
- unavailableField = requiredField
- }
- return isCurrentFieldAvailable
- })
- console.log(isAllFieldsAvailable)
- if(!isAllFieldsAvailable) {
- res.statusMessage = `Please provide ${unavailableField}`
- res.status(400).send()
- return next();
- }
- try {
- const calendarResponse= sharedLib.webToCalendar(
- prodid,
- versionEntry,
- startDate,
- startTime,
- creationDate,
- creationTime,
- uid,
- fileName,
- sUtcValue,
- cUtcValue
- );
- // console.log(calendarResponse);
- if(calendarResponse === "OK") {
- res.status(200).send({message: calendarResponse})
- next();
- }
- else {
- throw Error(calendarResponse)
- }
- } catch (error) {
- res.statusMessage = error
- res.status(500).send(res.statusMg)
- }
- // res.status(200).send({
- // message: "Successfully uploaded"
- // });
- // } catch (error) {
- // res.status(503).send(error);
- // }
- });
- app.post("/event", function(req, res, next) {
- const uid = req.body.eUid;
- const startDate = req.body.sdtDate;
- const startTime = req.body.sdtTime;
- const startUTC = req.body.esUtcValue;
- const creationDate = req.body.cdtDate;
- const creationTime = req.body.cdtTime;
- const creationUTC = req.body.ecUtcValue;
- const summary = req.body.summary;
- const filename = req.body.filename;
- console.log("Got data from frontend: ", req.body, "\n");
- const requiredFields = [
- "eUid",
- "sdtDate",
- "sdtTime",
- "esUtcValue",
- "cdtDate",
- "cdtTime",
- "ecUtcValue",
- "summary",
- "filename"
- ]
- let unavailbleField = ""
- const isAllFieldsAvailable =requiredFields.every(function(requiredField) {
- const isCurrentFieldAvailable = !!req.body[requiredField]
- if(!isCurrentFieldAvailable) {
- unavailbleField = requiredField
- }
- return isCurrentFieldAvailable
- })
- console.log(isAllFieldsAvailable)
- if(!isAllFieldsAvailable) {
- res.statusMessage = `Please provide ${unavailbleField}`
- res.status(400).send()
- return next()
- }
- try {
- const eventResponse= sharedLib.webToAddEvent(
- uid,
- startDate,
- startTime,
- startUTC,
- creationDate,
- creationTime,
- creationUTC,
- summary,
- filename
- );
- console.log(eventResponse);
- if(eventResponse === 'OK') {
- res.status(200).send(eventResponse);
- next();
- }
- else {
- console.log("Got error from add event function",eventResponse)
- throw Error(eventResponse)
- }
- } catch (error) {
- res.statusMessage = error
- res.status(500).send(res.statusMg)
- }
- });
- app.get("/login", function(req, res) {
- let username = req.query.username
- let password = req.query.password
- let database = req.query.database
- console.log(username);
- console.log(password);
- console.log(database);
- connection = mysql.createConnection({
- host : 'dursley.socs.uoguelph.ca',
- user : username,
- password : password,
- database : database
- });
- connection.connect(function(err){
- if (err){
- const errorMessage = "FAILED TO CONNECT"
- res.status(500).send(errorMessage)
- }
- else {
- let file = `create table if not exists FILE(
- cal_id int auto_increment primary key,
- file_Name varchar(60) not null,
- version int not null,
- prod_id varchar(256) not null
- );`;
- let event = `create table if not exists EVENT(
- event_id int auto_increment primary key,
- summary varchar(1024),
- start_time datetime not null,
- location varchar(60),
- organizer varchar(256),
- cal_file int not null,
- foreign key(cal_file) references FILE(cal_id) on delete cascade
- );`;
- let alarm = "create table if not exists ALARM( alarm_id int auto_increment primary key,action varchar(256) not null,`trigger` varchar(256) not null,event int not null,foreign key(event) references EVENT(event_id) on delete cascade);";
- connection.query(file, function(err, results, fields) {
- if (err) {
- const errorMessage = "FAILED TO CONNECT"
- res.status(500).send(errorMessage)
- console.log("UNABLE TO CREATE TABLE");
- }
- else {
- console.log("SUCCESSFULLY CREATED TABLE");
- }
- });
- connection.query(event, function(err, results, fields) {
- if (err) {
- const errorMessage = "FAILED TO CONNECT"
- console.log("UNABLE TO CREATE TABLE");
- res.status(500).send(errorMessage)
- }
- else {
- console.log("SUCCESSFULLY CREATED TABLE");
- }
- });
- connection.query(alarm, function(err, results, fields) {
- if (err) {
- const errorMessage = "FAILED TO CONNECT"
- console.log("UNABLE TO CREATE TABLE");
- res.status(500).send(errorMessage)
- }
- else {
- console.log("SUCCESSFULLY CREATED TABLE");
- }
- });
- const message = "OK"
- res.status(200).send(message);
- }
- });
- });
- app.get("/deleteTables", function(req, res) {
- connection.query("delete from ALARM", function (err, rows, fields) {
- if (err) {
- console.log("Something went wrong. "+err);
- const failMessage = "FAILED TO DELETE FROM ALARM TABLE"
- res.status(500).send(failMessage);
- }
- else
- console.log("Cleared data from ALARM table");
- });
- connection.query("delete from EVENT", function (err, rows, fields) {
- if (err) {
- console.log("Something went wrong. "+err);
- const failMessage = "FAILED TO DELETE FROM EVENT TABLE"
- res.status(500).send(failMessage);
- }
- else
- console.log("Cleared data from EVENT table");
- });
- connection.query("delete from FILE", function (err, rows, fields) {
- if (err) {
- console.log("Something went wrong. "+err);
- const failMessage = "FAILED TO DELETE FROM FILE TABLE"
- res.status(500).send(failMessage);
- }
- else
- console.log("Cleared data from FILE table");
- });
- });
- app.get("/storeFile", function(req, res) {
- let files = [];
- files = fs.readdirSync("./uploads/");
- let array = [];
- connection.query("delete from FILE", function (err, rows, fields) {
- if (err)
- console.log("Something went wrong. "+err);
- else
- console.log("Cleared data from table");
- });
- connection.query("delete from EVENT", function (err, rows, fields) {
- if (err)
- console.log("Something went wrong. "+err);
- else
- console.log("Cleared data from table");
- });
- connection.query("delete from ALARM", function (err, rows, fields) {
- if (err)
- console.log("Something went wrong. "+err);
- else
- console.log("Cleared data from table");
- });
- for (let x = 0; x < files.length; x++) {
- array[x] = JSON.parse(sharedLib.objectToJSON(files[x]));
- let records = "INSERT INTO FILE (file_Name, version, prod_id) VALUES ('"+array[x].Filename+"','"+array[x].version+"', '"+array[x].prodID+"')";
- connection.query(records, function (err, rows, fields) {
- if (err){
- console.log("FAILED TO INSERT into FILE Table. "+err);
- const failMessage = "FAILED TO INSERT"
- res.status(500).send(failMessage);
- }
- });
- }
- connection.query("SELECT * FROM FILE ORDER BY cal_id", function (err, rows, fields) {
- console.log("FILE TABLE LENGTH", rows.length);
- //Throw an error if we cannot run the query
- if (err) {
- console.log("Something went wrong. "+err);
- }
- else {
- let a = 0;
- //Rows is an array of objects. Each object has fields corresponding to table columns
- for (let row of rows){
- let eventList = JSON.parse(sharedLib.fillCalPanel(row.file_Name));
- for (let y = 0; y < eventList.length; y++) {
- a = y;
- let date = eventList[y].startDT.date;
- let time = eventList[y].startDT.time;
- let formattedDate = date.slice(0, 4) + "-" + date.slice(4, 6) + "-" + date.slice(6, 8);
- let formattedTime = time.slice(0, 2) + ":" + time.slice(2, 4) + ":" + time.slice(4, 6);
- let startTime = formattedDate + " " + formattedTime;
- let output = JSON.parse(sharedLib.webToProps(row.file_Name, y+1));
- let summary = "";
- let location = "";
- let organizer = "";
- if (output.SUMMARY != undefined){
- summary = output.SUMMARY;
- }
- else {
- summary = null;
- }
- if (output.LOCATION != undefined){
- location = output.SUMMARY;
- }
- else {
- location = null;
- }
- if (output.ORGANIZER != undefined){
- organizer = output.SUMMARY;
- }
- else {
- organizer = null;
- }
- console.log("ROW ID:", row.cal_id);
- //INSERT INTO EVENT (summary, start_time, location, organizer, cal_file) VALUES ("hey", '1900-01-01 00:00:00' ,"ua", "dfa", 92);
- let eventRecords = "INSERT INTO EVENT (summary, start_time, location, organizer, cal_file) VALUES ('"+summary+"','"+startTime+"','"+location+"','"+organizer+"','"+row.cal_id+"')";
- connection.query(eventRecords, function (err, rows, fields) {
- if (err){
- console.log("FAILED TO INSERT into EVENT Table. "+err);
- const failMessage = "FAILED TO INSERT"
- res.status(500).send(failMessage);
- }
- });
- // let alarmList = JSON.parse(sharedLib.webToAlarms(row.file_Name, y+1));
- // console.log("ALARM LIST", alarmList);
- // console.log("VALUE OF ALARMLIST LENGTH", alarmList.length);
- // console.log("ALARM TITLE:", alarmList.title);
- // if (alarmList.title != "No Event Alarms"){
- // for (var p = 0; p<alarmList.length; p++){
- // let alarmRecords = "INSERT INTO ALARM (action, trigger, event) VALUES ('"+alarmList[p].action+"','"+alarmList[p].trigger+"','"+eventList[a].event_id+"')";
- // console.log("ALARM ACTION", alarmList[p].action);
- // console.log("ALARM LIST", alarmList[p].trigger);
- // console.log("EVENT ID:", eventList[a].event_id);
- // connection.query(alarmRecords, function (err, rows, fields) {
- // if (err){
- // console.log("FAILED TO INSERT into ALARM Table. "+err);
- // const failMessage = "FAILED TO INSERT"
- // res.status(500).send(failMessage);
- // }
- // });
- // }
- // }
- }
- }
- }
- });
- // connection.query("SELECT * FROM ALARM ORDER BY alarm_id", function (err, rows, fields) {
- // if (err){
- // console.log("Something went wrong. "+err);
- // }
- // else {
- // console.log("Database contents sorted by alarm_id:");
- // console.log(rows.length);
- // for (let i = 0; i < rows.length; i++){
- // console.log("in the for loop");
- // console.log("ID: "+rows[i].id+" ACTION: "+rows[i].action+" TRIGGER: "+rows[i].trigger);
- // }
- // }
- // });
- connection.query("SELECT * FROM EVENT ORDER BY event_id", function (err, rows, fields) {
- if (err){
- console.log("Something went wrong. "+err);
- }
- else {
- console.log("Database contents sorted by event_id:");
- console.log(rows.length);
- for (let row of rows){
- console.log("in the for loop");
- console.log("ID: "+rows[i].id+" Summary: "+rows[i].summary+" Start Time: "+rows[i].start_time+" Location: "+rows[i].location+" Organizer: "+ rows[i].organizer + "CAL_FILE: " + rows[i].cal_id);
- }
- }
- });
- //*** Uncomment the code below if you want ot see the data in rows and fields ***
- /*
- console.log("Rows:");
- for (let row of rows){
- console.log(row);
- }
- console.log("Fields:");
- for (let field of fields){
- console.log(field);
- }
- */
- // res.status(500).send("OK");
- res.send(array);
- });
- app.use(function (err, req, res, next) {
- console.error(err.stack)
- res.status(500).send()
- })
- app.listen(portNum);
- console.log("Running app at localhost: " + portNum);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement