607 lines
18 KiB
JavaScript
607 lines
18 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.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("/");
|
|
});
|