Files
site/index.js
2024-01-29 21:31:16 +03:00

794 lines
24 KiB
JavaScript

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/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/:name/settings/modules",
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 + "/modules?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,
Modules: response.data.data,
Project: response.data.project,
Projects: response.data.projects,
Tests: response.data.tests,
isAuth: req.isAuth,
};
const source = fs.readFileSync(
"static/templates/project/settings/modules.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/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: {
"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,
Name: name,
Project: response.data.data,
Projects: response.data.projects,
User: response.data.user,
Payments: response.data.payments,
isAuth: req.isAuth,
};
const source = fs.readFileSync(
"static/templates/project/settings/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/settings/payment/:id",
checkAuthorization,
async (req, res) => {
const token = req.cookies.token;
const name = req.params.name;
const id = req.params.id;
console.log(token);
if (!req.isAuth) {
res.redirect("/");
return;
}
var options = {
method: "GET",
url: process.env.API_SERVER + "/payment?name=" + name + "&id=" + id,
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,
Name: name,
Payment: response.data.data,
Project: response.data.project,
Projects: response.data.projects,
User: response.data.user,
isAuth: req.isAuth,
};
const source = fs.readFileSync(
"static/templates/project/settings/payment.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("/project/" + name + "/settings/payments");
console.error("Ошибка при отправке GET-запроса:", error);
}
});
}
);
app.get("/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/yandexauth.html", "utf8");
const template = handlebars.compile(source);
const resultT = template(templateData);
res.send(resultT);
});
app.get("/yandexconnect", 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/yandexconnect.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("/");
});