Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,7 @@
DB_NAME=database_name
USER_DB=database_user
PASS_DB=database_password
MYSQL_ROOT_PASSWORD=random #only for production docker
MYSQL_ROOT_PASSWORD=random #only for production docker

#Mapbox access token used to render the station map (https://account.mapbox.com/access-tokens/)
MAPBOX_TOKEN=your_mapbox_token
125 changes: 55 additions & 70 deletions src/app.js
Original file line number Diff line number Diff line change
@@ -1,38 +1,26 @@
var createError = require("http-errors");
var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var compression = require("compression");
var cookieParser = require("cookie-parser");
var flash = require("connect-flash");
var helmet = require("helmet");
var session = require("express-session");
var device = require("express-device");
var MySQLStore = require('express-mysql-session')(session);

moment = require('moment')
const { v4: uuidv4 } = require('uuid');
crypto = require("crypto");
async = require("async");
WORKING_DIR = __dirname;


logger = require("./utils/logger");
meteoUtils = require('./utils/meteo_utils')
dateConvert = require('./utils/date_convert')

/*DATABASE MySQL*/
db = require("./database/database");
const createError = require("http-errors");
const express = require("express");
const path = require("path");
const cookieParser = require("cookie-parser");
const compression = require("compression");
const flash = require("connect-flash");
const helmet = require("helmet");
const session = require("express-session");
const MySQLStore = require("express-mysql-session")(session);

const logger = require("./utils/logger");
const database = require("./database/connection");

/*DATABASE MySQL - required for its startup side effects (connect + init tables)*/
require("./database/database");

/*PASSPORT*/
passport = require("passport");
var initPassport = require("./passport/init_passport");
isAuthenticated = require("./passport/is_auth");
isAdmin = require("./passport/is_admin");
const passport = require("passport");
const initPassport = require("./passport/init_passport");
initPassport();

/*Express*/
var app = express();
const app = express();

// view engine setup
app.set("views", path.join(__dirname, "views"));
Expand All @@ -41,13 +29,12 @@ app.set("view engine", "pug");
app.use(helmet());
app.use(compression());

//app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));

var sessionStore = new MySQLStore({}, database);
const sessionStore = new MySQLStore({}, database);

app.use(
session({
Expand All @@ -64,26 +51,25 @@ app.use(
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use(device.capture());

/*Web Routing*/
var indexRouter = require("./routes/web/index");
var history = require("./routes/web/history");
var station = require("./routes/web/station");

var map = require("./routes/web/map");
var login = require("./routes/web/user/login");
var logout = require("./routes/web/user/logout");
var new_user = require("./routes/web/user/new_user");
var modify_user = require("./routes/web/user/modify_user");
var delete_user = require("./routes/web/user/delete_user");
var configuration = require("./routes/web/config/configuration");
var configuration_new_station = require("./routes/web/config/station/new_station");
var configuration_delete_station = require("./routes/web/config/station/delete_station");
var configuration_modify_station = require("./routes/web/config/station/modify_station");
var configuration_delete_data = require("./routes/web/config/delete_data");
var configuration_new_update = require("./routes/web/config/firmware_update/new_update");
var configuration_delete_update = require("./routes/web/config/firmware_update/delete_update");
const indexRouter = require("./routes/web/index");
const history = require("./routes/web/history");
const station = require("./routes/web/station");

const map = require("./routes/web/map");
const login = require("./routes/web/user/login");
const logout = require("./routes/web/user/logout");
const newUser = require("./routes/web/user/new_user");
const modifyUser = require("./routes/web/user/modify_user");
const deleteUser = require("./routes/web/user/delete_user");
const configuration = require("./routes/web/config/configuration");
const configurationNewStation = require("./routes/web/config/station/new_station");
const configurationDeleteStation = require("./routes/web/config/station/delete_station");
const configurationModifyStation = require("./routes/web/config/station/modify_station");
const configurationDeleteData = require("./routes/web/config/delete_data");
const configurationNewUpdate = require("./routes/web/config/firmware_update/new_update");
const configurationDeleteUpdate = require("./routes/web/config/firmware_update/delete_update");

app.use("/", indexRouter);
app.use("/history", history);
Expand All @@ -92,43 +78,42 @@ app.use("/map", map);

app.use("/login", login);
app.use("/logout", logout);
app.use("/user/new_user", new_user);
app.use("/user/modify_user", modify_user);
app.use("/user/delete_user", delete_user);
app.use("/user/new_user", newUser);
app.use("/user/modify_user", modifyUser);
app.use("/user/delete_user", deleteUser);

app.use("/config/configuration", configuration);
app.use("/config/station/new_station", configuration_new_station);
app.use("/config/station/delete_station", configuration_delete_station);
app.use("/config/station/modify_station", configuration_modify_station);
app.use("/config/station/new_station", configurationNewStation);
app.use("/config/station/delete_station", configurationDeleteStation);
app.use("/config/station/modify_station", configurationModifyStation);

app.use("/config/firmware_update/new_update", configuration_new_update);
app.use("/config/firmware_update/delete_update", configuration_delete_update);
app.use("/config/firmware_update/new_update", configurationNewUpdate);
app.use("/config/firmware_update/delete_update", configurationDeleteUpdate);

app.use("/config/delete_data", configuration_delete_data);
app.use("/config/delete_data", configurationDeleteData);

/*API Routing*/
var update = require("./routes/api/update");
var api_station = require("./routes/api/station");
var firmw_updater = require("./routes/api/firmware_update");
const update = require("./routes/api/update");
const apiStation = require("./routes/api/station");
const firmwareUpdater = require("./routes/api/firmware_update");

//Data posting
app.use("/api/update", update);
app.use("/api/station", api_station);
app.use("/api/firmware_update", firmw_updater);
app.use("/api/station", apiStation);
app.use("/api/firmware_update", firmwareUpdater);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
app.use((req, res, next) => {
next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
logger.error("GENERIC ERROR: " + err.message)
app.use((err, req, res, next) => {
logger.error(`GENERIC ERROR: ${err.message}`);
res.locals.message = err.message;
process.exit(-1)
process.exit(1);
});

logger.info("APP: Starting completed. MeteoServer Ready.");

app.listen(3000);
app.listen(3000);
36 changes: 36 additions & 0 deletions src/database/connection.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const mysql = require("mysql");
const util = require("util");
const logger = require("../utils/logger");

if (!process.env.DB_HOST || !process.env.DB_NAME || !process.env.USER_DB || !process.env.PASS_DB) {
logger.error("ENV: Missing some environment variables.");
process.exit(1);
}

const database = mysql.createConnection({
host: process.env.DB_HOST,
database: process.env.DB_NAME,
user: process.env.USER_DB,
password: process.env.PASS_DB,
timezone: "utc"
});

database.connect((err) => {
if (err) {
logger.error("DATABASE: Can't connect to database. Check configuration.");
logger.error(err);
process.exit(1);
}
});

database.on("error", (err) => {
logger.error("DATABASE: Connection error, shutting down.");
logger.error(err);
process.exit(1);
});

logger.info(`DATABASE: Connected to SQL database ${process.env.DB_NAME} at ${process.env.DB_HOST}`);

database.asynchQuery = util.promisify(database.query).bind(database);

module.exports = database;
92 changes: 31 additions & 61 deletions src/database/database.js
Original file line number Diff line number Diff line change
@@ -1,73 +1,45 @@
var express = require('express');

const logger = require("../utils/logger");
const database = require("./connection");
const initTables = require("./init_tables");

//STATION DATA
var queryLastDataFromAllStation = require('./station/data_query/query_last_data_from_all_station');
var querySingleStationLastData = require('./station/data_query/query_single_station_last_data');
var listStation = require('./station/data_query/list_station');
var updateStationData = require('./station/data_query/update_station_data');
var queryHistoryStationData = require('./station/data_query/query_history_station_data');
var deleteData = require('./station/data_query/delete_data');
const queryLastDataFromAllStation = require("./station/data_query/query_last_data_from_all_station");
const querySingleStationLastData = require("./station/data_query/query_single_station_last_data");
const listStation = require("./station/data_query/list_station");
const updateStationData = require("./station/data_query/update_station_data");
const queryHistoryStationData = require("./station/data_query/query_history_station_data");
const deleteData = require("./station/data_query/delete_data");

//STATION
var createStation = require('./station/config/create_station');
var deleteStation = require('./station/config/delete_station');
var getAllStations = require('./station/config/get_all_stations');
var modifyStation = require('./station/config/modify_station');
const createStation = require("./station/config/create_station");
const deleteStation = require("./station/config/delete_station");
const getAllStations = require("./station/config/get_all_stations");
const modifyStation = require("./station/config/modify_station");

//USER
var deleteUser = require('./user/delete_user');
var loginUser = require('./user/login_user');
var getUserById = require('./user/get_user_by_id');
var createUser = require('./user/create_user');
var modifyUser = require('./user/modify_user');
var getAllUsers = require('./user/get_all_users');
const deleteUser = require("./user/delete_user");
const loginUser = require("./user/login_user");
const getUserById = require("./user/get_user_by_id");
const createUser = require("./user/create_user");
const modifyUser = require("./user/modify_user");
const getAllUsers = require("./user/get_all_users");

//FIRMWARE UPDATE
var queryUpdateAvailable = require('./firmware_update/query_update_available');
var createFirmwareUpdate = require('./firmware_update/create_firmware_update');
var deleteFirmwareUpdate = require('./firmware_update/delete_firmware_update');
var queryUpdateById = require('./firmware_update/query_update_by_id');
var getAllFirmwareUpdates = require('./firmware_update/get_all_firmware_updates');


var mysql = require("mysql");
var util = require("util");

if (process.env.DB_HOST == "" || process.env.DB_NAME == "" || process.env.USER_DB == "" || process.env.PASS_DB == "") {
logger.error("ENV: Missing some enviroment variables.");
process.exit();
}


database = mysql.createConnection({
host: process.env.DB_HOST,
database: process.env.DB_NAME,
user: process.env.USER_DB,
password: process.env.PASS_DB,
timezone: 'utc'
});

const queryUpdateAvailable = require("./firmware_update/query_update_available");
const createFirmwareUpdate = require("./firmware_update/create_firmware_update");
const deleteFirmwareUpdate = require("./firmware_update/delete_firmware_update");
const queryUpdateById = require("./firmware_update/query_update_by_id");
const getAllFirmwareUpdates = require("./firmware_update/get_all_firmware_updates");

database.connect(function (err) {
if (err) {
logger.error("DATABASE: Can't connect to database. Check configuration.");
logger.error(err);
process.exit();
}
});

logger.info("DATABASE: Connected to SQL database " + process.env.DB_NAME + " at " + process.env.DB_HOST);

database.asynchQuery = util.promisify(database.query);

var initTables = require("./init_tables");
initTables().catch((err) => {
logger.error("DATABASE: Error initializing tables, message: " + err.message)
process.exit();
})
logger.error(`DATABASE: Error initializing tables, message: ${err.message}`);
process.exit(1);
});

module.exports = Object.assign({},
// Mutated in place (not reassigned) so modules that require this file while
// it is still loading (see query_last_data_from_all_station.js) keep a live
// reference to the fully populated exports once the require graph settles.
Object.assign(module.exports,
database,
queryLastDataFromAllStation,
querySingleStationLastData,
Expand All @@ -91,5 +63,3 @@ module.exports = Object.assign({},
deleteFirmwareUpdate,
getAllFirmwareUpdates
);


10 changes: 6 additions & 4 deletions src/database/firmware_update/create_firmware_update.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
var express = require('express');
const moment = require("moment");
const database = require("../connection");
const logger = require("../../utils/logger");

module.exports.createFirmwareUpdate = async function (model, version, file_name) {
var query = 'INSERT INTO FirmwareUpdate(Model, Version, FileName, Stamp) VALUES (?, ?, ?, ?)';
const query = "INSERT INTO FirmwareUpdate(Model, Version, FileName, Stamp) VALUES (?, ?, ?, ?)";
let res;
try {
res = await database.asynchQuery(query, [
Expand All @@ -14,5 +16,5 @@ module.exports.createFirmwareUpdate = async function (model, version, file_name)
logger.error("DATABASE: Error creating firmware update");
throw err;
}
return res
}
return res;
};
14 changes: 6 additions & 8 deletions src/database/firmware_update/delete_firmware_update.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
var express = require('express');
const database = require("../connection");
const logger = require("../../utils/logger");

module.exports.deleteFirmwareUpdate = async function (update_id) {
var delete_user_query = 'DELETE FROM FirmwareUpdate WHERE Id=?';
const delete_update_query = "DELETE FROM FirmwareUpdate WHERE Id=?";

let res;
try {
res = await database.asynchQuery(delete_user_query, [
res = await database.asynchQuery(delete_update_query, [
update_id
]);
} catch (err) {
logger.error("DATABASE: Error deleting firmware update id: " + id);
logger.error(`DATABASE: Error deleting firmware update id: ${update_id}`);
throw err;
}
return res;
}



};
Loading