const handlebars = require("handlebars"); const cookieParser = require("cookie-parser"); const path = require("path"); const fs = require("fs"); const axios = require("axios"); const express = require("express"); const app = express(); require("dotenv").config(); require("dotenv").config(); app.use(express.static("static")); app.use(cookieParser()); const twelveHoursInSeconds = 12 * 60 * 60; // 12 часов в секундах const checkAuthorization = async (req, res, next) => { const token = req.cookies.token; req.isAuth = false; const options = { method: "GET", url: process.env.API_SERVER + "/secure", headers: { Authorization: token, }, }; try { const response = await axios.request(options); const authorizationHeader = response.headers["authorization"]; const responseBody = response.data; req.apiResponse = responseBody; req.isAuth = responseBody.user; res.cookie("token", authorizationHeader, { maxAge: twelveHoursInSeconds * 1000, }); next(); } catch (error) { if ( (error.response && error.response.status === 401) || (error.response && error.response.status === 400) ) { req.isAuth = false; next(); } else { console.error("Ошибка при отправке GET-запроса:", error); res.status(500).send("Произошла ошибка при выполнении запроса."); } } }; app.get("/", checkAuthorization, async (req, res) => { var templateData = { API_SERVER: process.env.API_SERVER, SITE_DOMAIN: process.env.SITE_DOMAIN, isAuth: req.isAuth, }; const source = fs.readFileSync("static/templates/index.html", "utf8"); const template = handlebars.compile(source); const resultT = template(templateData); res.send(resultT); }); app.get("/projects", checkAuthorization, async (req, res) => { const token = req.cookies.token; console.log(token); if (!req.isAuth) { res.redirect("/"); return; } var options = { method: "GET", url: process.env.API_SERVER + "/projects", headers: { Authorization: req.cookies.token, }, data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="searchText"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name="page"\r\n\r\n\r\n-----011000010111000001101001--\r\n', }; axios .request(options) .then(function (response) { var templateData = { API_SERVER: process.env.API_SERVER, SITE_DOMAIN: process.env.SITE_DOMAIN, IsAdmin: req.apiResponse.isadmin, User: response.data.user, Projects: response.data.data, }; const source = fs.readFileSync("static/templates/projects.html", "utf8"); const template = handlebars.compile(source); const resultT = template(templateData); res.send(resultT); }) .catch(function (error) { if (error.response && error.response.status === 401) { res.redirect("/"); } else { console.error("Ошибка при отправке GET-запроса:", error); res.status(500).send("Произошла ошибка при выполнении запроса."); } }); }); app.get("/user/settings", checkAuthorization, async (req, res) => { const token = req.cookies.token; console.log(token); if (!req.isAuth) { res.redirect("/"); return; } var options = { method: "GET", url: process.env.API_SERVER + "/usersettings", headers: { Authorization: req.cookies.token, }, data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="searchText"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name="page"\r\n\r\n\r\n-----011000010111000001101001--\r\n', }; axios .request(options) .then(function (response) { var templateData = { API_SERVER: process.env.API_SERVER, SITE_DOMAIN: process.env.SITE_DOMAIN, IsAdmin: req.apiResponse.isadmin, User: response.data.user, isAuth: req.isAuth, }; const source = fs.readFileSync( "static/templates/user/settings.html", "utf8" ); const template = handlebars.compile(source); const resultT = template(templateData); res.send(resultT); }) .catch(function (error) { if (error.response && error.response.status === 401) { res.redirect("/"); } else { console.error("Ошибка при отправке GET-запроса:", error); res.status(500).send("Произошла ошибка при выполнении запроса."); } }); }); app.get("/admin/users", checkAuthorization, async (req, res) => { const token = req.cookies.token; console.log(token); if (!req.isAuth) { res.redirect("/"); return; } var options = { method: "POST", url: process.env.API_SERVER + "/getusers", headers: { "Content-Type": "multipart/form-data; boundary=---011000010111000001101001", Authorization: req.cookies.token, }, data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="searchText"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name="page"\r\n\r\n\r\n-----011000010111000001101001--\r\n', }; axios .request(options) .then(function (response) { var templateData = { API_SERVER: process.env.API_SERVER, SITE_DOMAIN: process.env.SITE_DOMAIN, IsAdmin: req.apiResponse.isadmin, User: response.data.user, Users: response.data.data, isAuth: req.isAuth, }; const source = fs.readFileSync( "static/templates/admin/users.html", "utf8" ); const template = handlebars.compile(source); const resultT = template(templateData); res.send(resultT); }) .catch(function (error) { if (error.response && error.response.status === 401) { res.redirect("/"); } else { console.error("Ошибка при отправке GET-запроса:", error); res.status(500).send("Произошла ошибка при выполнении запроса."); } }); }); app.get("/admin/user/:id", checkAuthorization, async (req, res) => { const token = req.cookies.token; const id = req.params.id; console.log(token); if (!req.isAuth) { res.redirect("/"); return; } var options = { method: "GET", url: process.env.API_SERVER + "/user?id=" + id, headers: { Authorization: req.cookies.token, }, data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="searchText"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name="page"\r\n\r\n\r\n-----011000010111000001101001--\r\n', }; axios .request(options) .then(function (response) { var templateData = { API_SERVER: process.env.API_SERVER, SITE_DOMAIN: process.env.SITE_DOMAIN, IsAdmin: req.apiResponse.isadmin, User: response.data.user, Users: response.data.data, Projects: response.data.projects, isAuth: req.isAuth, }; const source = fs.readFileSync( "static/templates/admin/usersettings.html", "utf8" ); const template = handlebars.compile(source); const resultT = template(templateData); res.send(resultT); }) .catch(function (error) { if (error.response && error.response.status === 401) { res.redirect("/"); } else { res.redirect("/admin/users"); } }); }); app.get("/project/:name", checkAuthorization, async (req, res) => { const token = req.cookies.token; const name = req.params.name; console.log(token); if (!req.isAuth) { res.redirect("/"); return; } var options = { method: "GET", url: process.env.API_SERVER + "/project?name=" + name, headers: { Authorization: req.cookies.token, }, data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="searchText"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name="page"\r\n\r\n\r\n-----011000010111000001101001--\r\n', }; axios .request(options) .then(function (response) { var templateData = { API_SERVER: process.env.API_SERVER, SITE_DOMAIN: process.env.SITE_DOMAIN, IsAdmin: req.apiResponse.isadmin, Name: name, User: response.data.user, Project: response.data.data, Projects: response.data.projects, Documents: response.data.documents, Payments: response.data.payments, isAuth: req.isAuth, Releases: response.data.releases, Repo: response.data.repo, }; const source = fs.readFileSync( "static/templates/project/project.html", "utf8" ); const template = handlebars.compile(source); const resultT = template(templateData); res.send(resultT); }) .catch(function (error) { if (error.response && error.response.status === 401) { res.redirect("/"); } else { console.error("Ошибка при отправке GET-запроса:", error); res.status(500).send("Произошла ошибка при выполнении запроса."); } }); }); app.get("/project/:name/progress", checkAuthorization, async (req, res) => { const token = req.cookies.token; const name = req.params.name; console.log(token); if (!req.isAuth) { res.redirect("/"); return; } var options = { method: "GET", url: process.env.API_SERVER + "/progress?name=" + name, headers: { Authorization: req.cookies.token, }, data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="searchText"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name="page"\r\n\r\n\r\n-----011000010111000001101001--\r\n', }; axios .request(options) .then(function (response) { var templateData = { API_SERVER: process.env.API_SERVER, SITE_DOMAIN: process.env.SITE_DOMAIN, IsAdmin: req.apiResponse.isadmin, Name: name, User: response.data.user, Project: response.data.data, Projects: response.data.projects, Modules: response.data.modules, isAuth: req.isAuth, Releases: response.data.releases, Repo: response.data.repo, }; const source = fs.readFileSync( "static/templates/project/progress.html", "utf8" ); const template = handlebars.compile(source); const resultT = template(templateData); res.send(resultT); }) .catch(function (error) { if (error.response && error.response.status === 401) { res.redirect("/"); } else { console.error("Ошибка при отправке GET-запроса:", error); res.status(500).send("Произошла ошибка при выполнении запроса."); } }); }); app.get("/project/:name/documents", checkAuthorization, async (req, res) => { const token = req.cookies.token; const name = req.params.name; console.log(token); if (!req.isAuth) { res.redirect("/"); return; } var options = { method: "GET", url: process.env.API_SERVER + "/documents?name=" + name, headers: { Authorization: req.cookies.token, }, data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="searchText"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name="page"\r\n\r\n\r\n-----011000010111000001101001--\r\n', }; axios .request(options) .then(function (response) { var templateData = { API_SERVER: process.env.API_SERVER, SITE_DOMAIN: process.env.SITE_DOMAIN, IsAdmin: req.apiResponse.isadmin, Name: name, User: response.data.user, Project: response.data.data, Projects: response.data.projects, Documents: response.data.documents, isAuth: req.isAuth, }; const source = fs.readFileSync( "static/templates/project/documents.html", "utf8" ); const template = handlebars.compile(source); const resultT = template(templateData); res.send(resultT); }) .catch(function (error) { if (error.response && error.response.status === 401) { res.redirect("/"); } else { console.error("Ошибка при отправке GET-запроса:", error); res.status(500).send("Произошла ошибка при выполнении запроса."); } }); }); app.get("/project/:name/payments", checkAuthorization, async (req, res) => { const token = req.cookies.token; const name = req.params.name; console.log(token); if (!req.isAuth) { res.redirect("/"); return; } var options = { method: "GET", url: process.env.API_SERVER + "/payments?name=" + name, headers: { Authorization: req.cookies.token, }, data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="searchText"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name="page"\r\n\r\n\r\n-----011000010111000001101001--\r\n', }; axios .request(options) .then(function (response) { var templateData = { API_SERVER: process.env.API_SERVER, SITE_DOMAIN: process.env.SITE_DOMAIN, IsAdmin: req.apiResponse.isadmin, Name: name, User: response.data.user, Project: response.data.data, Projects: response.data.projects, Paid: response.data.paid, NotPaid: response.data.notpaid, isAuth: req.isAuth, }; const source = fs.readFileSync( "static/templates/project/payments.html", "utf8" ); const template = handlebars.compile(source); const resultT = template(templateData); res.send(resultT); }) .catch(function (error) { if (error.response && error.response.status === 401) { res.redirect("/"); } else { console.error("Ошибка при отправке GET-запроса:", error); res.status(500).send("Произошла ошибка при выполнении запроса."); } }); }); app.get("/project/:name/tests", checkAuthorization, async (req, res) => { const token = req.cookies.token; const name = req.params.name; console.log(token); if (!req.isAuth) { res.redirect("/"); return; } var options = { method: "GET", url: process.env.API_SERVER + "/tests?name=" + name, headers: { Authorization: req.cookies.token, }, data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="searchText"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name="page"\r\n\r\n\r\n-----011000010111000001101001--\r\n', }; axios .request(options) .then(function (response) { var templateData = { API_SERVER: process.env.API_SERVER, SITE_DOMAIN: process.env.SITE_DOMAIN, IsAdmin: req.apiResponse.isadmin, Name: name, User: response.data.user, Project: response.data.data, Projects: response.data.projects, Tests: response.data.tests, isAuth: req.isAuth, }; const source = fs.readFileSync( "static/templates/project/tests.html", "utf8" ); const template = handlebars.compile(source); const resultT = template(templateData); res.send(resultT); }) .catch(function (error) { if (error.response && error.response.status === 401) { res.redirect("/"); } else { console.error("Ошибка при отправке GET-запроса:", error); res.status(500).send("Произошла ошибка при выполнении запроса."); } }); }); app.get("/project/:name/settings", checkAuthorization, async (req, res) => { const token = req.cookies.token; const name = req.params.name; console.log(token); if (!req.isAuth) { res.redirect("/"); return; } var options = { method: "GET", url: process.env.API_SERVER + "/tests?name=" + name, headers: { Authorization: req.cookies.token, }, data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="searchText"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name="page"\r\n\r\n\r\n-----011000010111000001101001--\r\n', }; axios .request(options) .then(function (response) { var templateData = { API_SERVER: process.env.API_SERVER, SITE_DOMAIN: process.env.SITE_DOMAIN, IsAdmin: req.apiResponse.isadmin, Name: name, User: response.data.user, Project: response.data.data, Projects: response.data.projects, Tests: response.data.tests, isAuth: req.isAuth, }; const source = fs.readFileSync( "static/templates/project/settings.html", "utf8" ); const template = handlebars.compile(source); const resultT = template(templateData); res.send(resultT); }) .catch(function (error) { if (error.response && error.response.status === 401) { res.redirect("/"); } else { console.error("Ошибка при отправке GET-запроса:", error); res.status(500).send("Произошла ошибка при выполнении запроса."); } }); }); app.get("/project/yandexauth", async (req, res) => { const name = req.params.name; var templateData = { API_SERVER: process.env.API_SERVER, SITE_DOMAIN: process.env.SITE_DOMAIN, Name: name, }; const source = fs.readFileSync( "static/templates/project/yandexauth.html", "utf8" ); const template = handlebars.compile(source); const resultT = template(templateData); res.send(resultT); }); app.get("/logout", async (req, res) => { res.cookie("token", undefined); res.redirect("/"); }); const port = 8081; app.listen(port, () => { console.log(`Server is running on port ${port}`); }); app.use((req, res, next) => { res.redirect("/"); });