require("dotenv").config(); const express = require("express"); const cors = require("cors"); const _wol = require("wol"); const mariadb = require("mariadb"); const bodyParser = require("body-parser"); const _escapeString = require("sql-escape-string"); const multer = require("multer"); const pool = mariadb.createPool({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASS, port: process.env.DB_PORT, connectionLimit: 5, }); module.exports = { pool }; const { getPersonalData, updatePersonalData, getGuacamoleHost, getGuacamoleEnabled, getWolEnabled, } = require("./commands/personalData.cjs"); const { getMessages, getDisplayedGreeting, postMessage, patchMessage, deleteMessage, } = require("./commands/messageData.cjs"); const { getApplications, getEnabledApplications, postApplication, patchApplication, deleteApplication, getAppCategories, updateApplicationOrder, } = require("./commands/applicationData.cjs"); const { getBookmarks, postBookmark, patchBookmark, deleteBookmark, patchBookmarkOrder, getBookmarkCategories, postBookmarkCategory, patchBookmarkCategory, deleteBookmarkCategory, patchBookmarkCategoryOrder, } = require("./commands/bookmarkData.cjs"); const { getProviders, getDefaultProvider, postProvider, patchProvider, deleteProvider, } = require("./commands/providerData.cjs"); const { getThemes, addTheme, updateTheme, deleteTheme, getThemePlaylists, addThemePlaylist, updateThemePlaylist, deleteThemePlaylist, getBackgrounds, uploadBackground, updateBackground, deleteBackground, } = require("./commands/themeData.cjs"); const { getWolClients, createWolClient, updateWolClient, deleteWolClient, wakeWolClient, } = require("./commands/wolData.cjs"); const { getGuacamoleClients, createGuacamoleClient, updateGuacamoleClient, deleteGuacamoleClient, } = require("./commands/guacamoleData.cjs"); const { getSearchHistory, addSearchHistoryItem, deleteSearchHistoryItem, } = require("./commands/SearchData.cjs"); const storage = multer.diskStorage({ destination: (_req, _file, cb) => { cb(null, "../TriggerFrontend/backgrounds/"); }, filename: (_req, file, cb) => { cb(null, file.originalname); }, }); const uploads = multer({ storage: storage }); const app = express(); app.use(cors()); app.use(bodyParser.json({ limit: "50mb" })); app.use(bodyParser.urlencoded({ limit: "50mb", extended: true })); app.use( `/${process.env.API_URI}/api/backgroundImages`, express.static("../TriggerFrontend/backgrounds"), ); ////////////////////////////////////////////// // Personal Data // ////////////////////////////////////////////// app.get(`/${process.env.API_URI}/api/personalData`, getPersonalData); app.get(`/${process.env.API_URI}/api/guacamoleHost`, getGuacamoleHost); app.get(`/${process.env.API_URI}/api/guacamoleEnabled`, getGuacamoleEnabled); app.get(`/${process.env.API_URI}/api/wolEnabled`, getWolEnabled); app.patch(`/${process.env.API_URI}/api/personalData`, updatePersonalData); ////////////////////////////////////////////// // Messages // ////////////////////////////////////////////// app.get(`/${process.env.API_URI}/api/messages`, getMessages); app.get(`/${process.env.API_URI}/api/displayedGreeting`, getDisplayedGreeting); app.post(`/${process.env.API_URI}/api/messages`, postMessage); app.patch(`/${process.env.API_URI}/api/messages`, patchMessage); app.delete(`/${process.env.API_URI}/api/messages`, deleteMessage); ////////////////////////////////////////////// // Application Data // ////////////////////////////////////////////// app.get(`/${process.env.API_URI}/api/applications`, getApplications); app.get( `/${process.env.API_URI}/api/enabledApplications`, getEnabledApplications, ); app.post(`/${process.env.API_URI}/api/applications`, postApplication); app.patch(`/${process.env.API_URI}/api/applications`, patchApplication); app.delete(`/${process.env.API_URI}/api/applications`, deleteApplication); app.get(`/${process.env.API_URI}/api/appCategories`, getAppCategories); app.patch( `/${process.env.API_URI}/api/applicationOrder`, updateApplicationOrder, ); ////////////////////////////////////////////// // Bookmark Data // ////////////////////////////////////////////// app.get(`/${process.env.API_URI}/api/bookmarks`, getBookmarks); app.post(`/${process.env.API_URI}/api/bookmarks`, postBookmark); app.patch(`/${process.env.API_URI}/api/bookmarks`, patchBookmark); app.delete(`/${process.env.API_URI}/api/bookmarks`, deleteBookmark); app.patch(`/${process.env.API_URI}/api/bookmarkOrder`, patchBookmarkOrder); app.get( `/${process.env.API_URI}/api/bookmarkCategories`, getBookmarkCategories, ); app.post( `/${process.env.API_URI}/api/bookmarkCategories`, postBookmarkCategory, ); app.patch( `/${process.env.API_URI}/api/bookmarkCategories`, patchBookmarkCategory, ); app.delete( `/${process.env.API_URI}/api/bookmarkCategories`, deleteBookmarkCategory, ); app.patch( `/${process.env.API_URI}/api/bookmarkCategoryOrder`, patchBookmarkCategoryOrder, ); ////////////////////////////////////////////// // Provider Data // ////////////////////////////////////////////// app.get(`/${process.env.API_URI}/api/providers`, getProviders); app.get(`/${process.env.API_URI}/api/providers/default`, getDefaultProvider); app.post(`/${process.env.API_URI}/api/providers`, postProvider); app.patch(`/${process.env.API_URI}/api/providers`, patchProvider); app.delete(`/${process.env.API_URI}/api/providers`, deleteProvider); ////////////////////////////////////////////// // Theming // ////////////////////////////////////////////// app.get(`/${process.env.API_URI}/api/themes`, getThemes); app.post(`/${process.env.API_URI}/api/themes`, addTheme); app.patch(`/${process.env.API_URI}/api/themes`, updateTheme); app.delete(`/${process.env.API_URI}/api/themes`, deleteTheme); app.get(`/${process.env.API_URI}/api/themePlaylists`, getThemePlaylists); app.post(`/${process.env.API_URI}/api/themePlaylists`, addThemePlaylist); app.patch(`/${process.env.API_URI}/api/themePlaylists`, updateThemePlaylist); app.delete(`/${process.env.API_URI}/api/themePlaylists`, deleteThemePlaylist); app.get(`/${process.env.API_URI}/api/backgrounds`, getBackgrounds); app.post( `/${process.env.API_URI}/api/backgrounds`, uploads.single("background"), uploadBackground, ); app.patch(`/${process.env.API_URI}/api/backgrounds`, updateBackground); app.delete(`/${process.env.API_URI}/api/backgrounds`, deleteBackground); ////////////////////////////////////////////// // Wake on LAN Clients // ////////////////////////////////////////////// app.get(`/${process.env.API_URI}/api/wolClients`, getWolClients); app.post(`/${process.env.API_URI}/api/wolClients`, createWolClient); app.patch(`/${process.env.API_URI}/api/wolClients`, updateWolClient); app.delete(`/${process.env.API_URI}/api/wolClients`, deleteWolClient); app.post(`/${process.env.API_URI}/api/wakeClient`, wakeWolClient); ////////////////////////////////////////////// // Guacamole Clients // ////////////////////////////////////////////// app.get(`/${process.env.API_URI}/api/guacamoleClients`, getGuacamoleClients); app.post(`/${process.env.API_URI}/api/guacamoleClients`, createGuacamoleClient); app.patch( `/${process.env.API_URI}/api/guacamoleClients`, updateGuacamoleClient, ); app.delete( `/${process.env.API_URI}/api/guacamoleClients`, deleteGuacamoleClient, ); ////////////////////////////////////////////// // Search // ////////////////////////////////////////////// app.get(`/${process.env.API_URI}/api/searchHistory`, getSearchHistory); app.post(`/${process.env.API_URI}/api/searchHistory`, addSearchHistoryItem); app.delete( `/${process.env.API_URI}/api/searchHistory`, deleteSearchHistoryItem, ); app.listen(process.env.API_PORT, "0.0.0.0", () => {});