Complete redesign of the API, improvement of the global aspect of the tables and bug fixing.

This commit is contained in:
SavaletDev
2022-10-16 01:44:14 +02:00
parent 7cdd39a9a2
commit b985dbe315
58 changed files with 2020 additions and 2253 deletions

View File

@@ -6,12 +6,7 @@ function getRandomInt(max, min) {
return Math.floor(Math.random() * (max - min)) + min;
}
router.get('', (req, res) => {
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {

View File

@@ -1,47 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const route_name = "/products/delete-product"
const permissions_manager = require("../../utils/permissions-manager.js")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.delete('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var response = "OK"
var error = false
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "DELETEPRODUCT").then(function(result) {
if (result) {
var sql = `DELETE FROM products WHERE id='${req.body.id}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err), error = true, response = "Database error"};
});
server.logger(" [DEBUG] Product " + req.body.id + " deleted from " + IP + " !")
return res.json({"error": error, "response": response});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -1,72 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const route_name = "/products/edit-product"
const permissions_manager = require("../../utils/permissions-manager.js")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.post('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var response = "OK"
var error = false
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "EDITPRODUCT").then(function (result) {
if (result) {
var configuration = {}
if (req.body.category == "pterodactyl") {
configuration = {
'cpu': req.body.cpu,
'cpu_pinning': req.body.cpu_pinning,
'ram': req.body.ram,
'disk': req.body.disk,
'swap': req.body.swap,
'io': req.body.io,
'egg': req.body.egg,
'startup_command': req.body.startup_command,
'env': JSON.parse(req.body.env)
}
}
if (req.body.category == "proxmox") {
configuration = {
'node': req.body.node,
'template_vmid': req.body.template_vm,
'cores': req.body.cores,
'ram': req.body.ram,
'storage': req.body.storage,
'disk_size': req.body.disk_size,
'add_conf': req.body.add_conf
}
}
var sql = `UPDATE products SET name = '${req.body.name}', description = '${req.body.description}', price = '${req.body.price}', configuration = '${JSON.stringify(configuration)}' WHERE id = '${req.body.id}';`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err); return res.json({ "error": true, "msg": "Database error : " + err }) };
});
server.logger(" [DEBUG] Product " + req.body.name + " updated from " + IP + " !")
return res.json({ "error": false, "response": "OK" });
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
module.exports = router;

View File

@@ -0,0 +1,205 @@
var router = require('express').Router({ mergeParams: true });
const server = require('../../../server.js')
var jsonParser = server.parser.json()
const route_name = "/products/:product_id"
const permissions_manager = require("../../../utils/permissions-manager.js")
server.logger(" [INFO] /api" + route_name + " route loaded !")
// GET INFOS //
router.get('', function (req, res) {
ipInfo = server.ip(req);
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token == req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTPRODUCTS").then(function (result) {
if (result) {
var id = req.params.product_id
if (id == undefined) { return res.json({ 'error': true, 'msg': "Id params is required", "code": 101 }) }
if (id == "") { return res.json({ 'error': true, 'msg': "Id params is required", "code": 102 }) }
var sql = `SELECT * FROM products WHERE id = '${id}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length > 0) {
if (result[0].category == 'pterodactyl') {
var env = []
configuration = JSON.parse(result[0].configuration)
env_json = configuration.env
Object.keys(env_json).forEach((key) => {
env.push(env_json[key])
})
return res.json({
'error': false,
'data': {
'id': result[0].id,
'category': result[0].category,
'name': result[0].name,
'description': result[0].description,
'price': result[0].price,
'cpu': configuration.cpu,
'cpu_pinning': configuration.cpu_pinning,
'ram': configuration.ram,
'disk': configuration.disk,
'swap': configuration.swap,
'io': configuration.io,
'egg': configuration.egg,
'startup_command': configuration.startup_command,
'env': env
}
})
} else if (result[0].category == 'proxmox') {
configuration = JSON.parse(result[0].configuration)
return res.json({
'error': false,
'data': {
'id': result[0].id,
'category': result[0].category,
'name': result[0].name,
'description': result[0].description,
'price': result[0].price,
'node': configuration.node,
'template_vmid': configuration.template_vmid,
'cores': configuration.cores,
'ram': configuration.ram,
'storage': configuration.storage,
'disk_size': configuration.disk_size,
'add_conf': configuration.add_conf
}
})
}
} else {
return res.json({
'error': false,
'data': {
'id': 404
}
})
}
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
// EDIT PRODUCT //
router.put('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var response = "OK"
var error = false
var IP = req.socket.remoteAddress;
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
var id = req.params.product_id
if (id == undefined) { return res.json({ 'error': true, 'msg': "Id params is required", "code": 101 }) }
if (id == "") { return res.json({ 'error': true, 'msg': "Id params is required", "code": 102 }) }
permissions_manager.has_permission(req.query.uuid, "EDITPRODUCT").then(function (result) {
if (result) {
var configuration = {}
if (req.body.category == "pterodactyl") {
configuration = {
'cpu': req.body.cpu,
'cpu_pinning': req.body.cpu_pinning,
'ram': req.body.ram,
'disk': req.body.disk,
'swap': req.body.swap,
'io': req.body.io,
'egg': req.body.egg,
'startup_command': req.body.startup_command,
'env': JSON.parse(req.body.env)
}
}
if (req.body.category == "proxmox") {
configuration = {
'node': req.body.node,
'template_vmid': req.body.template_vm,
'cores': req.body.cores,
'ram': req.body.ram,
'storage': req.body.storage,
'disk_size': req.body.disk_size,
'add_conf': req.body.add_conf
}
}
var sql = `UPDATE products SET name = '${req.body.name}', description = '${req.body.description}', price = '${req.body.price}', configuration = '${JSON.stringify(configuration)}' WHERE id = '${id}';`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err); return res.json({ "error": true, "msg": "Database error : " + err }) };
});
server.logger(" [DEBUG] Product " + req.body.name + " updated from " + IP + " !")
return res.json({ "error": false, "response": "OK" });
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
// DELETE PRODUCT //
router.delete('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var response = "OK"
var error = false
var IP = req.socket.remoteAddress;
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
var id = req.params.product_id
if (id == undefined) { return res.json({ 'error': true, 'msg': "Id params is required", "code": 101 }) }
if (id == "") { return res.json({ 'error': true, 'msg': "Id params is required", "code": 102 }) }
permissions_manager.has_permission(req.query.uuid, "DELETEPRODUCT").then(function (result) {
if (result) {
var sql = `DELETE FROM products WHERE id='${id}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err), error = true, response = "Database error" };
});
server.logger(" [DEBUG] Product " + id + " deleted from " + IP + " !")
return res.json({ "error": error, "response": response });
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
module.exports = router;

View File

@@ -1,19 +1,14 @@
var router = require('express').Router();
const server = require('../../server.js')
const config = require('../../config.json');
const server = require('../../../../server.js')
const config = require('../../../../config.json');
const { response } = require('express');
const permissions_manager = require("../../utils/permissions-manager.js")
const route_name = "/products/proxmox-nodes-list"
const permissions_manager = require("../../../../utils/permissions-manager.js")
const route_name = "/products/proxmox/nodes"
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {

View File

@@ -0,0 +1,53 @@
var router = require('express').Router();
const server = require('../../../../server.js')
const config = require('../../../../config.json');
const { response } = require('express');
const permissions_manager = require("../../../../utils/permissions-manager.js")
const route_name = "/products/proxmox/qemu"
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTPRODUCTS").then(function (result) {
if (result) {
server.fetch(`${config.proxmox_url}/api2/json/nodes/${req.query.node}/qemu`, {
"method": "GET",
"headers": {
"CSRFPreventionToken": server.proxmox_CSRFPreventionToken,
"Cookie": "PVEAuthCookie=" + server.proxmox_ticket
},
"agent": server.httpsAgent
}).then(response => {
return response.json()
})
.then(data => {
return res.json({ 'error': false, 'vms': data.data })
})
.catch(err => {
server.logger(" [ERROR] Proxmox API Error " + err)
return res.json({ "error": true, "code": 1000, "msg": err })
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
module.exports = router;

View File

@@ -0,0 +1,53 @@
var router = require('express').Router();
const server = require('../../../../server.js')
const config = require('../../../../config.json');
const { response } = require('express');
const permissions_manager = require("../../../../utils/permissions-manager.js")
const route_name = "/products/proxmox/storage"
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTPRODUCTS").then(function (result) {
if (result) {
server.fetch(`${config.proxmox_url}/api2/json/nodes/${req.query.node}/storage`, {
"method": "GET",
"headers": {
"CSRFPreventionToken": server.proxmox_CSRFPreventionToken,
"Cookie": "PVEAuthCookie=" + server.proxmox_ticket
},
"agent": server.httpsAgent
}).then(response => {
return response.json()
})
.then(data => {
return res.json({ 'error': false, 'storage': data.data })
})
.catch(err => {
server.logger(" [ERROR] Proxmox API Error " + err)
return res.json({ "error": true, "code": 1000, "msg": err })
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
module.exports = router;

View File

@@ -1,101 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
const route_name = "/products/product-info"
const permissions_manager = require("../../utils/permissions-manager.js")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token == req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTPRODUCTS").then(function(result) {
if (result) {
var id = req.query.id
if (id == undefined) {return res.json({'error': true, 'msg': "Id query is required", "code": 101})}
if (id == "") {return res.json({'error': true, 'msg': "Id query is required", "code": 102})}
var sql = `SELECT * FROM products WHERE id = '${id}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length > 0) {
if (result[0].category == 'pterodactyl') {
var env = []
configuration = JSON.parse(result[0].configuration)
env_json = configuration.env
Object.keys(env_json).forEach((key)=>{
env.push(env_json[key])
})
return res.json({
'error': false,
'data': {
'id': result[0].id,
'category': result[0].category,
'name': result[0].name,
'description': result[0].description,
'price': result[0].price,
'cpu': configuration.cpu,
'cpu_pinning': configuration.cpu_pinning,
'ram': configuration.ram,
'disk': configuration.disk,
'swap': configuration.swap,
'io': configuration.io,
'egg': configuration.egg,
'startup_command': configuration.startup_command,
'env': env
}
})
} else if (result[0].category == 'proxmox') {
configuration = JSON.parse(result[0].configuration)
return res.json({
'error': false,
'data': {
'id': result[0].id,
'category': result[0].category,
'name': result[0].name,
'description': result[0].description,
'price': result[0].price,
'node': configuration.node,
'template_vmid': configuration.template_vmid,
'cores': configuration.cores,
'ram': configuration.ram,
'storage': configuration.storage,
'disk_size': configuration.disk_size,
'add_conf': configuration.add_conf
}
})
}
} else {
return res.json({
'error': false,
'data': {
'id': 404
}
})
}
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -1,34 +1,97 @@
var router = require('express').Router();
const server = require('../../server.js')
const route_name = "/products/products"
var jsonParser = server.parser.json()
const route_name = "/products"
const permissions_manager = require("../../utils/permissions-manager.js")
server.logger(" [INFO] /api" + route_name + " route loaded !")
// GET LIST //
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP)
var sql = `SELECT * FROM products`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
products = []
for(var i= 0; i < result.length; i++)
{
products.push({
"id": result[i].id,
"category": result[i].category,
"name": result[i].name,
"description": result[i].description,
"price": result[i].price,
"configuration": JSON.parse(result[i].configuration)
if (err) { server.logger(" [ERROR] Database error\n " + err) };
products = []
for (var i = 0; i < result.length; i++) {
products.push({
"id": result[i].id,
"category": result[i].category,
"name": result[i].name,
"description": result[i].description,
"price": result[i].price,
"configuration": JSON.parse(result[i].configuration)
})
}
return res.json({ 'error': false, 'data': products })
});
})
// POST NEW PRODUCT //
router.post('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] POST /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "CREATEPRODUCT").then(function (result) {
if (result) {
if (req.body.category == "pterodactyl") {
configuration = {
'cpu': req.body.cpu,
'cpu_pinning': req.body.cpu_pinning,
'ram': req.body.ram,
'disk': req.body.disk,
'swap': req.body.swap,
'io': req.body.io,
'egg': req.body.egg,
'startup_command': req.body.startup_command,
'env': JSON.parse(req.body.env)
}
var sql = `INSERT INTO products (id, category, name, description, price, configuration) VALUES('${server.crypto.randomBytes(3).toString('hex')}', 'pterodactyl', '${req.body.name}', '${req.body.description}', '${req.body.price}', '${JSON.stringify(configuration)}')`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
});
server.logger(" [DEBUG] Product " + req.body.name + " created from " + IP + " !")
return res.json({ "error": false, "response": "OK" });
} else if (req.body.category == "proxmox") {
configuration = {
'node': req.body.node,
'template_vmid': req.body.template_vm,
'cores': req.body.cores,
'ram': req.body.ram,
'storage': req.body.storage,
'disk_size': req.body.disk_size,
'add_conf': req.body.add_conf
}
var sql = `INSERT INTO products (id, category, name, description, price, configuration) VALUES('${server.crypto.randomBytes(3).toString('hex')}', 'proxmox', '${req.body.name}', '${req.body.description}', '${req.body.price}', '${JSON.stringify(configuration)}')`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
});
server.logger(" [DEBUG] Product " + req.body.name + " created from " + IP + " !")
return res.json({ "error": false, "response": "OK" });
}
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
return res.json({'error': false, 'data': products})
});
}
});
})
module.exports = router;

View File

@@ -1,53 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const permissions_manager = require("../../utils/permissions-manager.js")
const route_name = "/products/proxmox-create-product"
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.post('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "CREATEPRODUCT").then(function(result) {
if (result) {
configuration = {
'node': req.body.node,
'template_vmid': req.body.template_vm,
'cores': req.body.cores,
'ram': req.body.ram,
'storage': req.body.storage,
'disk_size': req.body.disk_size,
'add_conf': req.body.add_conf
}
var sql = `INSERT INTO products (id, category, name, description, price, configuration) VALUES('${server.crypto.randomBytes(3).toString('hex')}', 'proxmox', '${req.body.name}', '${req.body.description}', '${req.body.price}', '${JSON.stringify(configuration)}')`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
});
server.logger(" [DEBUG] Product " + req.body.name + " created from " + IP + " !")
return res.json({"error": false, "response": "OK"});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -1,58 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
const config = require('../../config.json');
const { response } = require('express');
const route_name = "/products/proxmox-qemu-list"
const permissions_manager = require("../../utils/permissions-manager.js")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTPRODUCTS").then(function(result) {
if (result) {
server.fetch(`${config.proxmox_url}/api2/json/nodes/${req.query.node}/qemu`, {
"method": "GET",
"headers": {
"CSRFPreventionToken": server.proxmox_CSRFPreventionToken,
"Cookie": "PVEAuthCookie=" + server.proxmox_ticket
},
"agent": server.httpsAgent
}).then(response => {
return response.json()
})
.then(data => {
return res.json({'error': false, 'vms': data.data})
})
.catch(err => {
server.logger(" [ERROR] Proxmox API Error " + err)
return res.json({"error": true, "code": 1000, "msg": err})
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -1,58 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
const config = require('../../config.json');
const { response } = require('express');
const route_name = "/products/proxmox-storage-list"
const permissions_manager = require("../../utils/permissions-manager.js")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTPRODUCTS").then(function(result) {
if (result) {
server.fetch(`${config.proxmox_url}/api2/json/nodes/${req.query.node}/storage`, {
"method": "GET",
"headers": {
"CSRFPreventionToken": server.proxmox_CSRFPreventionToken,
"Cookie": "PVEAuthCookie=" + server.proxmox_ticket
},
"agent": server.httpsAgent
}).then(response => {
return response.json()
})
.then(data => {
return res.json({'error': false, 'storage': data.data})
})
.catch(err => {
server.logger(" [ERROR] Proxmox API Error " + err)
return res.json({"error": true, "code": 1000, "msg": err})
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -1,57 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const route_name = "/products/ptero-create-product"
const permissions_manager = require("../../utils/permissions-manager.js")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.post('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "CREATEPRODUCT").then(function (result) {
if (result) {
configuration = {
'cpu': req.body.cpu,
'cpu_pinning': req.body.cpu_pinning,
'ram': req.body.ram,
'disk': req.body.disk,
'swap': req.body.swap,
'io': req.body.io,
'egg': req.body.egg,
'startup_command': req.body.startup_command,
'env': JSON.parse(req.body.env)
}
var sql = `INSERT INTO products (id, category, name, description, price, configuration) VALUES('${server.crypto.randomBytes(3).toString('hex')}', 'pterodactyl', '${req.body.name}', '${req.body.description}', '${req.body.price}', '${JSON.stringify(configuration)}')`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
});
server.logger(" [DEBUG] Product " + req.body.name + " created from " + IP + " !")
return res.json({ "error": false, "response": "OK" });
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
module.exports = router;

View File

@@ -1,51 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const route_name = "/roles/create-role"
const permissions_manager = require("../../utils/permissions-manager")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.post('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "CREATEROLE").then(function(result) {
if (result) {
var permissions = ''
if (req.body.permissions.length < 1) {
permissions = "NONE"
} else {
permissions = req.body.permissions
}
var sql = `INSERT INTO roles (id, name, permissions) VALUES('${server.crypto.randomBytes(3).toString('hex')}', '${req.body.name}', '${permissions}')`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
});
server.logger(" [DEBUG] Role " + req.body.name + " created from " + IP + " !")
return res.json({"error": false, "response": "OK"});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -1,47 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const route_name = "/roles/delete-role"
const permissions_manager = require("../../utils/permissions-manager")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.delete('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var response = "OK"
var error = false
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "DELETEROLE").then(function(result) {
if (result) {
var sql = `DELETE FROM roles WHERE id='${req.body.id}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err), error = true, response = "Database error"};
});
server.logger(" [DEBUG] Role " + req.body.id + " deleted from " + IP + " !")
return res.json({"error": error, "response": response});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -0,0 +1,145 @@
var router = require('express').Router({ mergeParams: true });
const server = require('../../../server.js')
var jsonParser = server.parser.json()
const route_name = "/roles/:role_id"
const permissions_manager = require("../../../utils/permissions-manager")
server.logger(" [INFO] /api" + route_name + " route loaded !")
// GET INFOS //
router.get('', function (req, res) {
ipInfo = server.ip(req);
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTROLES").then(function (result) {
if (result) {
var id = req.params.role_id
if (id == undefined) { return res.json({ 'error': true, 'msg': "Role id params is required", "code": 101 }) }
if (id == "") { return res.json({ 'error': true, 'msg': "Role id params is required", "code": 102 }) }
var sql = `SELECT * FROM roles WHERE id = '${id}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length > 0) {
return res.json({
'error': false, 'data': {
'id': result[0].id,
'name': result[0].name,
'permissions': result[0].permissions
}
})
} else {
return res.json({
'error': false, 'data': {
'id': 404
}
})
}
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
// EDIT ROLE //
router.put('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var IP = req.socket.remoteAddress;
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
var id = req.params.role_id
if (id == undefined) { return res.json({ 'error': true, 'msg': "Role id params is required", "code": 101 }) }
if (id == "") { return res.json({ 'error': true, 'msg': "Role id params is required", "code": 102 }) }
permissions_manager.has_permission(req.query.uuid, "EDITROLE").then(function (result) {
if (result) {
var permissions = ''
if (req.body.permissions.length < 1) {
permissions = "NONE"
} else {
permissions = req.body.permissions
}
var sql = `UPDATE roles SET name = '${req.body.name}', permissions = '${permissions}' WHERE id = '${id}';`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err); return res.json({ "error": true, "msg": "Database error : " + err }) };
});
server.logger(" [DEBUG] Role " + req.body.name + " updated from " + IP + " with uuid " + req.query.uuid + " !")
return res.json({ "error": false, "response": "OK" });
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
// DELETE ROLE //
router.delete('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var response = "OK"
var error = false
var IP = req.socket.remoteAddress;
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
var id = req.params.role_id
if (id == undefined) { return res.json({ 'error': true, 'msg': "Role id params is required", "code": 101 }) }
if (id == "") { return res.json({ 'error': true, 'msg': "Role id params is required", "code": 102 }) }
permissions_manager.has_permission(req.query.uuid, "DELETEROLE").then(function (result) {
if (result) {
var sql = `DELETE FROM roles WHERE id='${id}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err), error = true, response = "Database error" };
});
server.logger(" [DEBUG] Role " + id + " deleted from " + IP + " !")
return res.json({ "error": error, "response": response });
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
module.exports = router;

View File

@@ -1,52 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const route_name = "/roles/edit-role"
const permissions_manager = require("../../utils/permissions-manager")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.post('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "EDITROLE").then(function(result) {
if (result) {
var permissions = ''
if (req.body.permissions.length < 1) {
permissions = "NONE"
} else {
permissions = req.body.permissions
}
var sql = `UPDATE roles SET name = '${req.body.name}', permissions = '${permissions}' WHERE id = '${req.body.id}';`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err); return res.json({"error": true, "msg": "Database error : " + err})};
});
server.logger(" [DEBUG] Role " + req.body.name + " updated from " + IP + " with uuid " + req.query.uuid + " !")
return res.json({"error": false, "response": "OK"});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -1,61 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
const route_name = "/roles/role-info"
const permissions_manager = require("../../utils/permissions-manager")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTROLES").then(function(result) {
if (result) {
var id = req.query.id
if (id == undefined) {return res.json({'error': true, 'msg': "Role id query is required", "code": 101})}
if (id == "") {return res.json({'error': true, 'msg': "Role id query is required", "code": 102})}
var sql = `SELECT * FROM roles WHERE id = '${id}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length > 0) {
return res.json({
'error': false, 'data': {
'id': result[0].id,
'name': result[0].name,
'permissions': result[0].permissions
}
})
} else {
return res.json({
'error': false, 'data': {
'id': 404
}
})
}
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -1,52 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
const route_name = "/roles/roles-list"
const permissions_manager = require("../../utils/permissions-manager")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTROLES").then(function(result) {
if (result) {
var sql = `SELECT * FROM roles`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
roles = []
for(var i= 0; i < result.length; i++)
{
roles.push({
"id": result[i].id,
"name": result[i].name
})
}
return res.json({'error': false, 'roles': roles})
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

93
api/routes/roles/roles.js Normal file
View File

@@ -0,0 +1,93 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const route_name = "/roles"
const permissions_manager = require("../../utils/permissions-manager")
server.logger(" [INFO] /api" + route_name + " route loaded !")
// GET LIST //
router.get('', function (req, res) {
ipInfo = server.ip(req);
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTROLES").then(function (result) {
if (result) {
var sql = `SELECT * FROM roles`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
roles = []
for (var i = 0; i < result.length; i++) {
roles.push({
"id": result[i].id,
"name": result[i].name
})
}
return res.json({ 'error': false, 'roles': roles })
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
// POST ROLE //
router.post('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var IP = req.socket.remoteAddress;
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "CREATEROLE").then(function (result) {
if (result) {
var permissions = ''
if (req.body.permissions.length < 1) {
permissions = "NONE"
} else {
permissions = req.body.permissions
}
var sql = `INSERT INTO roles (id, name, permissions) VALUES('${server.crypto.randomBytes(3).toString('hex')}', '${req.body.name}', '${permissions}')`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
});
server.logger(" [DEBUG] Role " + req.body.name + " created from " + IP + " !")
return res.json({ "error": false, "response": "OK" });
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
module.exports = router;

View File

@@ -1,13 +1,19 @@
var router = require('express').Router({ mergeParams: true });
const server = require('../../../../server')
const route_name = "/services/file"
const textParser = server.parser.text()
const permissions_manager = require("../../../../utils/permissions-manager")
const config = require('../../../../config.json')
server.logger(" [INFO] /api" + route_name + " route loaded !")
// GET CONTENT //
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
@@ -87,12 +93,10 @@ router.get('', function (req, res) {
router.put('', textParser, function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
@@ -173,3 +177,5 @@ router.put('', textParser, function (req, res) {
}
});
})
module.exports = router;

View File

@@ -8,12 +8,10 @@ server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {

View File

@@ -8,12 +8,10 @@ server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
@@ -176,12 +174,10 @@ router.get('', function (req, res) {
router.put('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var IP = req.socket.remoteAddress;
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
@@ -229,12 +225,10 @@ router.delete('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var response = "OK"
var error = false
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var IP = req.socket.remoteAddress;
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };

View File

@@ -8,12 +8,10 @@ server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
@@ -112,12 +110,10 @@ router.get('', function (req, res) {
router.post('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var IP = req.socket.remoteAddress;
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };

View File

@@ -1,18 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const route_name = "/users/create-user"
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.post('', jsonParser, function (req, res) {
server.bcrypt.hash(req.body.password, 10, function(err, hash) {
var sql = `INSERT INTO users (uuid, username, role, mail, token, password, first_name, last_name, tel, address_1, address_2, city, zip, country, state, balance, tickets, services, suspend_services, alerts) VALUES('${server.uuid.v4()}', '${req.body.username}', '${req.body.role}', '${req.body.mail.toLowerCase()}', '${server.crypto.randomBytes(20).toString('hex')}', '${hash}', '${req.body.first_name}', '${req.body.last_name}', '${req.body.tel}', '${req.body.address_1}', '${req.body.address_2}', '${req.body.city}', '${req.body.zip}', '${req.body.country}', '${req.body.state}', 0, 0, 0, 0, 0)`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err); return res.json({"error": true, "msg": "Database error " + err})};
});
});
server.logger(" [DEBUG] User " + req.body.username + " created !")
return res.json({"error": false, "response": "OK"})
})
module.exports = router;

View File

@@ -1,40 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const permissions_manager = require("../../utils/permissions-manager")
server.logger(" [INFO] /api/users/delete-user route loaded !")
router.delete('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var response = "OK"
var error = false
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
returnres.json({'error': true, 'code': 404})
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "DELETEUSER").then(function(result) {
if (result) {
var sql = `DELETE FROM users WHERE uuid='${req.body.user_uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err), error = true, response = "Database error"};
});
server.logger(" [DEBUG] User " + req.body.user_uuid + " deleted by " + req.query.uuid + " !")
return res.json({"error": error, "response": response});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -1,58 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const route_name = "/users/edit-user"
const permissions_manager = require("../../utils/permissions-manager")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.post('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var response = "OK"
var error = false
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "EDITUSER").then(function(result) {
if (result) {
if (req.body.password != "Q@4%738r$7") {
server.bcrypt.hash(req.body.password, 10, function(err, hash) {
var sql = `UPDATE users SET username = '${req.body.username}', token = '${server.crypto.randomBytes(20).toString('hex')}', password = '${hash}', role = '${req.body.role}', mail = '${req.body.mail}', first_name = '${req.body.first_name}', last_name = '${req.body.last_name}', tel = '${req.body.tel}', address_1 = '${req.body.address_1}', address_2 = '${req.body.address_2}', city = '${req.body.city}', zip = '${req.body.zip}', country = '${req.body.country}', state = '${req.body.state}' WHERE uuid = '${req.body.uuid}';`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err); return res.json({"error": true, "msg": "Database error : " + err})};
});
server.logger(" [DEBUG] User " + req.body.username + " updated !")
return res.json({"error": false, "response": "OK"});
})
} else {
var sql = `UPDATE users SET username = '${req.body.username}', role = '${req.body.role}', mail = '${req.body.mail.toLowerCase()}', first_name = '${req.body.first_name}', last_name = '${req.body.last_name}', tel = '${req.body.tel}', address_1 = '${req.body.address_1}', address_2 = '${req.body.address_2}', city = '${req.body.city}', zip = '${req.body.zip}', country = '${req.body.country}', state = '${req.body.state}' WHERE uuid = '${req.body.uuid}';`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err); return res.json({"error": true, "msg": "Database error : " + err})};
});
server.logger(" [DEBUG] User " + req.body.username + " updated !")
return res.json({"error": false, "response": "OK"});
}
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -0,0 +1,173 @@
var router = require('express').Router({ mergeParams: true });
const server = require('../../../server.js')
var jsonParser = server.parser.json()
const route_name = "/users/:user_uuid"
const permissions_manager = require("../../../utils/permissions-manager")
server.logger(" [INFO] /api" + route_name + " route loaded !")
// GET INFOS //
router.get('', function (req, res) {
ipInfo = server.ip(req);
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token == req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTUSERS").then(function (result) {
if (result) {
var id = req.params.user_uuid
if (id == undefined) { return res.json({ 'error': true, 'msg': "User id params is required", "code": 101 }) }
if (id == "") { return res.json({ 'error': true, 'msg': "User id params is required", "code": 102 }) }
var sql = `SELECT * FROM users WHERE uuid = '${id}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length > 0) {
var sql = `SELECT * FROM roles WHERE id = '${result[0].role}'`;
server.con.query(sql, function (err, result1) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
return res.json({
'error': false,
'data': {
'uuid': result[0].uuid,
'username': result[0].username,
'mail': result[0].mail,
'role': result[0].role,
'role_name': result1[0].name,
'permissions': result1[0].permissions,
'first_name': result[0].first_name,
'last_name': result[0].last_name,
'tel': result[0].tel,
'address_1': result[0].address_1,
'address_2': result[0].address_2,
'city': result[0].city,
'zip': result[0].zip,
'country': result[0].country,
'state': result[0].state
}
})
})
} else {
return res.json({
'error': false,
'data': {
'uuid': 404
}
})
}
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
// EDIT //
router.put('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var response = "OK"
var error = false
var IP = req.socket.remoteAddress;
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "EDITUSER").then(function (result) {
if (result) {
var id = req.params.user_uuid
if (id == undefined) { return res.json({ 'error': true, 'msg': "User id params is required", "code": 101 }) }
if (id == "") { return res.json({ 'error': true, 'msg': "User id params is required", "code": 102 }) }
if (req.body.password != "Q@4%738r$7") {
server.bcrypt.hash(req.body.password, 10, function (err, hash) {
var sql = `UPDATE users SET username = '${req.body.username}', token = '${server.crypto.randomBytes(20).toString('hex')}', password = '${hash}', role = '${req.body.role}', mail = '${req.body.mail}', first_name = '${req.body.first_name}', last_name = '${req.body.last_name}', tel = '${req.body.tel}', address_1 = '${req.body.address_1}', address_2 = '${req.body.address_2}', city = '${req.body.city}', zip = '${req.body.zip}', country = '${req.body.country}', state = '${req.body.state}' WHERE uuid = '${id}';`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err); return res.json({ "error": true, "msg": "Database error : " + err }) };
});
server.logger(" [DEBUG] User " + req.body.username + " updated !")
return res.json({ "error": false, "response": "OK" });
})
} else {
var sql = `UPDATE users SET username = '${req.body.username}', role = '${req.body.role}', mail = '${req.body.mail.toLowerCase()}', first_name = '${req.body.first_name}', last_name = '${req.body.last_name}', tel = '${req.body.tel}', address_1 = '${req.body.address_1}', address_2 = '${req.body.address_2}', city = '${req.body.city}', zip = '${req.body.zip}', country = '${req.body.country}', state = '${req.body.state}' WHERE uuid = '${id}';`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err); return res.json({ "error": true, "msg": "Database error : " + err }) };
});
server.logger(" [DEBUG] User " + req.body.username + " updated !")
return res.json({ "error": false, "response": "OK" });
}
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
// DELETE //
router.delete('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var response = "OK"
var error = false
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
var IP = req.socket.remoteAddress;
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
returnres.json({ 'error': true, 'code': 404 })
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "DELETEUSER").then(function (result) {
var id = req.params.user_uuid
if (id == undefined) { return res.json({ 'error': true, 'msg': "User id params is required", "code": 101 }) }
if (id == "") { return res.json({ 'error': true, 'msg': "User id params is required", "code": 102 }) }
if (result) {
var sql = `DELETE FROM users WHERE uuid='${id}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err), error = true, response = "Database error" };
});
server.logger(" [DEBUG] User " + id + " deleted by " + req.query.uuid + " from " + IP + " !")
return res.json({ "error": error, "response": response });
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 403 })
}
}
});
})
module.exports = router;

View File

@@ -0,0 +1,38 @@
var router = require('express').Router({ mergeParams: true });
const server = require('../../../server.js')
var jsonParser = server.parser.json()
const route_name = "/users/login/:user_mail"
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.post('', jsonParser, function (req, res) {
ipInfo = server.ip(req);
var IP = req.socket.remoteAddress;
var mail = req.params.user_mail
if (mail == undefined) { return res.json({ 'error': true, 'msg': "User mail params is required", "code": 101 }) }
if (mail == "") { return res.json({ 'error': true, 'msg': "User mail params is required", "code": 102 }) }
var sql = `SELECT password FROM users WHERE mail = '${mail}'`;
server.con.query(sql, function (err, result) {
if (err) throw err;
if (result.length == 0) {
return res.json({ 'error': true, 'code': 404 })
} else {
server.bcrypt.compare(req.body.password, result[0].password, function (err, result) {
if (result === true) {
var sql = `SELECT * FROM users WHERE mail = '${mail}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
res.json({ 'error': false, 'uuid': result[0].uuid, 'token': result[0].token })
return server.logger(' [DEBUG] User ' + mail + ' successful login from ' + IP)
});
} else {
res.json({ 'error': true, 'code': 403 })
return server.logger(' [DEBUG] User ' + mail + ' unsuccessful login from ' + IP + '!')
}
});
}
});
})
module.exports = router;

View File

@@ -1,29 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const route_name = "/users/login-user"
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.post('', jsonParser, function (req, res) {
var sql = `SELECT password FROM users WHERE mail = '${req.body.mail}'`;
server.con.query(sql, function (err, result) {
if (err) throw err;
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
server.bcrypt.compare(req.body.password, result[0].password, function(err, result) {
if (result === true) {
var sql = `SELECT * FROM users WHERE mail = '${req.body.mail}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
return res.json({'error': false, 'uuid': result[0].uuid, 'token': result[0].token})
});
} else {
return res.json({'error': true, 'code': 403})
}
});
}
});
})
module.exports = router;

View File

@@ -1,41 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
const route_name = "/users/mail-exist"
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token == req.query.token) {
var mail = req.query.mail
if (mail == undefined) {return res.json({'error': true, 'msg': "Mail query is required", "code": 101})}
if (mail == "") {return res.json({'error': true, 'msg': "Mail query is required", "code": 102})}
var sql = `SELECT mail FROM users WHERE mail = '${mail}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length > 0) {
return res.json({'error': false, 'exist': true, "code": 100})
} else {
return res.json({'error': false, 'exist': false, "code": 100})
}
});
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -1,80 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
const route_name = "/users/user-info"
const permissions_manager = require("../../utils/permissions-manager")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token == req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTUSERS").then(function(result) {
if (result) {
var id = req.query.id
if (id == undefined) {return res.json({'error': true, 'msg': "User id query is required", "code": 101})}
if (id == "") {return res.json({'error': true, 'msg': "User id query is required", "code": 102})}
var sql = `SELECT * FROM users WHERE uuid = '${id}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length > 0) {
var sql = `SELECT * FROM roles WHERE id = '${result[0].role}'`;
server.con.query(sql, function (err, result1) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
return res.json({
'error': false,
'data': {
'uuid': result[0].uuid,
'username': result[0].username,
'mail': result[0].mail,
'role': result[0].role,
'role_name': result1[0].name,
'permissions': result1[0].permissions,
'first_name': result[0].first_name,
'last_name': result[0].last_name,
'tel': result[0].tel,
'address_1': result[0].address_1,
'address_2': result[0].address_2,
'city': result[0].city,
'zip': result[0].zip,
'country': result[0].country,
'state': result[0].state
}
})
})
} else {
return res.json({
'error': false,
'data': {
'uuid': 404
}
})
}
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -1,35 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
const route_name = "/users/usernale-exist"
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
server.logger(' [DEBUG] GET from : ' + ipInfo.clientIp.split("::ffff:")[1] + `, ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 404})
} else {
if (result[0].token == req.query.token) {
var username = req.query.username
if (username == undefined) {return res.json({'error': true, 'msg': "Username query is required", "code": 101})}
if (username == "") {return res.json({'error': true, 'msg': "Username query is required", "code": 102})}
var sql = `SELECT username FROM users WHERE username = '${username}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length > 0) {
return res.json({'error': false, 'exist': true, "code": 100})
} else {
return res.json({'error': false, 'exist': false, "code": 100})
}
});
} else {
return res.json({'error': true, 'code': 403})
}
}
});
})
module.exports = router;

View File

@@ -1,59 +0,0 @@
var router = require('express').Router();
const server = require('../../server.js')
const route_name = "/users/users-list"
const permissions_manager = require("../../utils/permissions-manager")
server.logger(" [INFO] /api" + route_name + " route loaded !")
router.get('', function (req, res) {
ipInfo = server.ip(req);
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
if (result.length == 0) {
return res.json({'error': true, 'code': 401})
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTUSERS").then(function(result) {
if (result) {
var sql = `SELECT * FROM users`;
server.con.query(sql, function (err, result) {
if (err) {server.logger(" [ERROR] Database error\n " + err)};
users = []
for(var i= 0; i < result.length; i++)
{
users.push({
"uuid": result[i].uuid,
"username": result[i].username,
"mail": result[i].mail,
"role": result[i].role,
"balance": result[i].balance,
"tickets": result[i].tickets,
"services": result[i].services,
"suspended_services": result[i].suspended_services,
"alerts": result[i].alerts
})
}
return res.json({'error': false, 'users': users})
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({'error': true, 'code': 401})
}
}
});
})
module.exports = router;

90
api/routes/users/users.js Normal file
View File

@@ -0,0 +1,90 @@
var router = require('express').Router();
const server = require('../../server.js')
var jsonParser = server.parser.json()
const route_name = "/users"
const permissions_manager = require("../../utils/permissions-manager")
server.logger(" [INFO] /api" + route_name + " route loaded !")
// USERS LIST //
router.get('', function (req, res) {
ipInfo = server.ip(req);
var IP = req.socket.remoteAddress;
server.logger(' [DEBUG] GET /api' + route_name + ' from ' + IP + ` with uuid ${req.query.uuid}`)
var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length == 0) {
return res.json({ 'error': true, 'code': 401 })
} else {
if (result[0].token === req.query.token) {
permissions_manager.has_permission(req.query.uuid, "LISTUSERS").then(function (result) {
if (result) {
var sql = `SELECT * FROM users`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
users = []
for (var i = 0; i < result.length; i++) {
users.push({
"uuid": result[i].uuid,
"username": result[i].username,
"mail": result[i].mail,
"role": result[i].role,
"balance": result[i].balance,
"tickets": result[i].tickets,
"services": result[i].services,
"suspended_services": result[i].suspended_services,
"alerts": result[i].alerts
})
}
return res.json({ 'error': false, 'users': users })
});
} else {
return res.json({
"error": true,
"code": 403
})
}
})
} else {
return res.json({ 'error': true, 'code': 401 })
}
}
});
})
// CREATE //
router.post('', jsonParser, function (req, res) {
var IP = req.socket.remoteAddress;
var sql = `SELECT mail FROM users WHERE mail = '${req.body.mail.toLowerCase()}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length > 0) {
return res.json({ "error": true, "msg": "Mail already used" })
} else {
var sql = `SELECT username FROM users WHERE username = '${req.body.username}'`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err) };
if (result.length > 0) {
return res.json({ "error": true, "msg": "Username already exist" })
} else {
server.bcrypt.hash(req.body.password, 10, function (err, hash) {
var sql = `INSERT INTO users (uuid, username, role, mail, token, password, first_name, last_name, tel, address_1, address_2, city, zip, country, state, balance, tickets, services, suspend_services, alerts) VALUES('${server.uuid.v4()}', '${req.body.username}', '${req.body.role}', '${req.body.mail.toLowerCase()}', '${server.crypto.randomBytes(20).toString('hex')}', '${hash}', '${req.body.first_name}', '${req.body.last_name}', '${req.body.tel}', '${req.body.address_1}', '${req.body.address_2}', '${req.body.city}', '${req.body.zip}', '${req.body.country}', '${req.body.state}', 0, 0, 0, 0, 0)`;
server.con.query(sql, function (err, result) {
if (err) { server.logger(" [ERROR] Database error\n " + err); return res.json({ "error": true, "msg": "Database error " + err }) };
});
});
server.logger(" [DEBUG] User " + req.body.username + " created from " + IP + " !")
return res.json({ "error": false, "response": "User successfully created !" })
}
});
}
});
})
module.exports = router;

View File

@@ -13,6 +13,10 @@ const fetch = require('node-fetch');
const httpsAgent = new https.Agent({
rejectUnauthorized: false,
});
var server_opt = {
cert: fs.readFileSync(config.api_ssl_cert_path),
key: fs.readFileSync(config.api_ssl_privkey_path)
}
let start_date = new Date();;
let date = ("0" + start_date.getDate()).slice(-2);
@@ -42,7 +46,6 @@ function logger(msg) {
logger(" [INFO] The API is starting...")
const PORT = 400
var mysql = require('mysql');
var connection = mysql.createConnection({
host: config.mysql_host,
@@ -125,48 +128,35 @@ connection.connect(function (err) {
app.use('/api/', require('./routes/index'));
// products //
app.use('/api/products/ptero-create-product', require('./routes/products/ptero-create-product'));
app.use('/api/products/proxmox-create-product', require('./routes/products/proxmox-create-product'));
app.use('/api/products/proxmox-qemu-list', require('./routes/products/proxmox-qemu-list'));
app.use('/api/products/proxmox-nodes-list', require('./routes/products/proxmox-nodes-list'));
app.use('/api/products/proxmox-storage-list', require('./routes/products/proxmox-storage-list'));
app.use('/api/products/delete-product', require('./routes/products/delete-product'));
app.use('/api/products/product-info', require('./routes/products/product-info'));
app.use('/api/products/products', require('./routes/products/products'));
app.use('/api/products/edit-product', require('./routes/products/edit-product'));
app.use('/api/products', require('./routes/products/products'));
app.use('/api/products/:product_id', require('./routes/products/infos/product-info'));
app.use('/api/products/proxmox/qemu', require('./routes/products/infos/proxmox/qemu'));
app.use('/api/products/proxmox/nodes', require('./routes/products/infos/proxmox/nodes'));
app.use('/api/products/proxmox/storage', require('./routes/products/infos/proxmox/storage'));
// users //
app.use('/api/users/create-user', require('./routes/users/create-user'));
app.use('/api/users/login-user', require('./routes/users/login-user'));
app.use('/api/users/users-list', require('./routes/users/users-list'));
app.use('/api/users/user-info', require('./routes/users/user-info'));
app.use('/api/users/username-exist', require('./routes/users/username-exist'));
app.use('/api/users/mail-exist', require('./routes/users/mail-exist'));
app.use('/api/users/delete-user', require('./routes/users/delete-user'));
app.use('/api/users/edit-user', require('./routes/users/edit-user'));
app.use('/api/users', require('./routes/users/users'));
app.use('/api/users/:user_uuid', require('./routes/users/infos/user-info'));
app.use('/api/users/:user_mail/login', require('./routes/users/infos/user-login'));
// roles //
app.use('/api/roles/create-role', require('./routes/roles/create-role'));
app.use('/api/roles/delete-role', require('./routes/roles/delete-role'));
app.use('/api/roles/roles-list', require('./routes/roles/roles-list'));
app.use('/api/roles/role-info', require('./routes/roles/role-info'));
app.use('/api/roles/role-edit', require('./routes/roles/role-edit'));
app.use('/api/roles', require('./routes/roles/roles'));
app.use('/api/roles/:role_id', require('./routes/roles/infos/role-info'));
// services //
app.use('/api/services', require('./routes/services/services'));
app.use('/api/services/:service_name', require('./routes/services/infos/service-info'));
app.use('/api/services/:service_name/files', require('./routes/services/infos/files/service-files'));
app.use('/api/services/:service_name/file', require('./routes/services/infos/files/service-file'));
// utils //
app.use('/api/utils/send-mail', require('./routes/utils/send-mail'));
app.listen(PORT, () => {
logger(` [INFO] MercuryCloud API listening on ${config.api_url} !`)
}
);
https.createServer(server_opt, app).listen(config.api_port, config.api_bind_address, function () {
logger(` [INFO] MercuryCloud API listening on ${config.api_url + ":" + config.api_port} !`)
});
}).catch((error) => {
logger(" [ERROR] Proxmox API error : " + error);
process.exit(1);

View File

@@ -23,7 +23,7 @@
return response.json()
}
fetch(`https://api.mercurycloud.fr/api/?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
fetch(`https://dash.mercurycloud.fr:8000/api/?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})

View File

@@ -8,31 +8,31 @@
}
const url = new URL(window.location.href);
if (url.searchParams.get('id')) {
fetch(`https://api.mercurycloud.fr/api/products/product-info?uuid=${getCookie("uuid")}&token=${getCookie("token")}&id=${url.searchParams.get('id')}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
console.log(json)
if (json.error === false) {
if (json.data.id == 404) {
window.location.replace("/dashboard/errors/error404.html");
fetch(`https://dash.mercurycloud.fr:8000/api/products/${url.searchParams.get('id')}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
console.log(json)
if (json.error === false) {
if (json.data.id == 404) {
window.location.replace("/dashboard/errors/error404.html");
}
} else {
window.location.replace("/dashboard/errors/error500.html");
}
} else {
window.location.replace("/dashboard/errors/error500.html");
}
})
})
} else {
window.location.replace("/dashboard/errors/error404.html");
}
async function postData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json()
}
@@ -44,16 +44,16 @@
/*---------------------------------------------------------------------
Fieldset
-----------------------------------------------------------------------*/
let currentTab =0;
const ActiveTab=(n)=>{
if(n==0){
let currentTab = 0;
const ActiveTab = (n) => {
if (n == 0) {
document.getElementById("account").classList.add("active");
document.getElementById("account").classList.remove("done");
document.getElementById("personal").classList.remove("done");
document.getElementById("personal").classList.remove("active");
}
if(n==1){
if (n == 1) {
form1 = {
"cycle": document.getElementById("cycle-fac").value,
"srv_name": document.getElementById("srv-name").value,
@@ -62,142 +62,142 @@
"db_sup": document.getElementById("db-sup").value,
"bkp_sup": document.getElementById("bkp-sup").value
}
fetch(`https://api.mercurycloud.fr/api/users/user-info?uuid=${getCookie('uuid')}&token=${getCookie('token')}&id=${getCookie('uuid')}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
console.log(json)
if (json.error === false) {
document.getElementById("first-name").value = json.data.first_name
document.getElementById("last-name").value = json.data.last_name
document.getElementById("mail").value = json.data.mail
document.getElementById("tel").value = json.data.tel
document.getElementById("address-1").value = json.data.address_1
document.getElementById("address-2").value = json.data.address_2
document.getElementById("city").value = json.data.city
document.getElementById("zip").value = json.data.zip
document.getElementById("country").value = json.data.country
document.getElementById("state").value = json.data.state
}
document.getElementById("account").classList.add("done");
document.getElementById("personal").classList.add("active");
document.getElementById("personal").classList.remove("done");
document.getElementById("payment").classList.remove("active");
document.getElementById("payment").classList.remove("done");
document.getElementById("confirm").classList.remove("done");
document.getElementById("confirm").classList.remove("active");
if(document.getElementById("first-name").value.length > 2) {
document.getElementById("first-name").classList.remove('is-invalid')
document.getElementById("first-name").classList.add('is-valid')
} else {
document.getElementById("first-name").classList.remove('is-valid')
document.getElementById("first-name").classList.add('is-invalid')
document.getElementById("first-name").value = ""
}
if(document.getElementById("last-name").value.length > 2) {
document.getElementById("last-name").classList.remove('is-invalid')
document.getElementById("last-name").classList.add('is-valid')
} else {
document.getElementById("last-name").classList.remove('is-valid')
document.getElementById("last-name").classList.add('is-invalid')
document.getElementById("last-name").value = ""
}
if(document.getElementById("mail").value.length > 2) {
document.getElementById("mail").classList.remove('is-invalid')
document.getElementById("mail").classList.add('is-valid')
} else {
document.getElementById("mail").classList.remove('is-valid')
document.getElementById("mail").classList.add('is-invalid')
document.getElementById("mail").value = ""
}
if(document.getElementById("tel").value.length == 12 && document.getElementById("tel").value.match(/[0-9]/gi) != null && document.getElementById("tel").value.includes("+", 0) == true) {
document.getElementById("tel").classList.remove('is-invalid')
document.getElementById("tel").classList.add('is-valid')
} else {
document.getElementById("tel").classList.remove('is-valid')
document.getElementById("tel").classList.add('is-invalid')
document.getElementById("tel").value = ""
}
if(document.getElementById("address-1").value.length > 2) {
document.getElementById("address-1").classList.remove('is-invalid')
document.getElementById("address-1").classList.add('is-valid')
} else {
document.getElementById("address-1").classList.remove('is-valid')
document.getElementById("address-1").classList.add('is-invalid')
document.getElementById("address-1").value = ""
}
if(document.getElementById("city").value.length > 2) {
document.getElementById("city").classList.remove('is-invalid')
document.getElementById("city").classList.add('is-valid')
} else {
document.getElementById("city").classList.remove('is-valid')
document.getElementById("city").classList.add('is-invalid')
document.getElementById("city").value = ""
}
if(document.getElementById("zip").value.length == 5 && /^\d+$/.test(document.getElementById("zip").value) == true) {
document.getElementById("zip").classList.remove('is-invalid')
document.getElementById("zip").classList.add('is-valid')
} else {
document.getElementById("zip").classList.remove('is-valid')
document.getElementById("zip").classList.add('is-invalid')
document.getElementById("zip").value = ""
}
if(document.getElementById("country").value > 0) {
document.getElementById("country").classList.remove('is-invalid')
document.getElementById("country").classList.add('is-valid')
} else {
document.getElementById("country").classList.remove('is-valid')
document.getElementById("country").classList.add('is-invalid')
document.getElementById("country").value = ""
}
if(document.getElementById("state").value.length > 2) {
document.getElementById("state").classList.remove('is-invalid')
document.getElementById("state").classList.add('is-valid')
} else {
document.getElementById("state").classList.remove('is-valid')
document.getElementById("state").classList.add('is-invalid')
document.getElementById("state").value = ""
}
})
fetch(`https://dash.mercurycloud.fr:8000/api/users/${getCookie('uuid')}?uuid=${getCookie('uuid')}&token=${getCookie('token')}&id=${getCookie('uuid')}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
console.log(json)
if (json.error === false) {
document.getElementById("first-name").value = json.data.first_name
document.getElementById("last-name").value = json.data.last_name
document.getElementById("mail").value = json.data.mail
document.getElementById("tel").value = json.data.tel
document.getElementById("address-1").value = json.data.address_1
document.getElementById("address-2").value = json.data.address_2
document.getElementById("city").value = json.data.city
document.getElementById("zip").value = json.data.zip
document.getElementById("country").value = json.data.country
document.getElementById("state").value = json.data.state
}
document.getElementById("account").classList.add("done");
document.getElementById("personal").classList.add("active");
document.getElementById("personal").classList.remove("done");
document.getElementById("payment").classList.remove("active");
document.getElementById("payment").classList.remove("done");
document.getElementById("confirm").classList.remove("done");
document.getElementById("confirm").classList.remove("active");
if (document.getElementById("first-name").value.length > 2) {
document.getElementById("first-name").classList.remove('is-invalid')
document.getElementById("first-name").classList.add('is-valid')
} else {
document.getElementById("first-name").classList.remove('is-valid')
document.getElementById("first-name").classList.add('is-invalid')
document.getElementById("first-name").value = ""
}
if (document.getElementById("last-name").value.length > 2) {
document.getElementById("last-name").classList.remove('is-invalid')
document.getElementById("last-name").classList.add('is-valid')
} else {
document.getElementById("last-name").classList.remove('is-valid')
document.getElementById("last-name").classList.add('is-invalid')
document.getElementById("last-name").value = ""
}
if (document.getElementById("mail").value.length > 2) {
document.getElementById("mail").classList.remove('is-invalid')
document.getElementById("mail").classList.add('is-valid')
} else {
document.getElementById("mail").classList.remove('is-valid')
document.getElementById("mail").classList.add('is-invalid')
document.getElementById("mail").value = ""
}
if (document.getElementById("tel").value.length == 12 && document.getElementById("tel").value.match(/[0-9]/gi) != null && document.getElementById("tel").value.includes("+", 0) == true) {
document.getElementById("tel").classList.remove('is-invalid')
document.getElementById("tel").classList.add('is-valid')
} else {
document.getElementById("tel").classList.remove('is-valid')
document.getElementById("tel").classList.add('is-invalid')
document.getElementById("tel").value = ""
}
if (document.getElementById("address-1").value.length > 2) {
document.getElementById("address-1").classList.remove('is-invalid')
document.getElementById("address-1").classList.add('is-valid')
} else {
document.getElementById("address-1").classList.remove('is-valid')
document.getElementById("address-1").classList.add('is-invalid')
document.getElementById("address-1").value = ""
}
if (document.getElementById("city").value.length > 2) {
document.getElementById("city").classList.remove('is-invalid')
document.getElementById("city").classList.add('is-valid')
} else {
document.getElementById("city").classList.remove('is-valid')
document.getElementById("city").classList.add('is-invalid')
document.getElementById("city").value = ""
}
if (document.getElementById("zip").value.length == 5 && /^\d+$/.test(document.getElementById("zip").value) == true) {
document.getElementById("zip").classList.remove('is-invalid')
document.getElementById("zip").classList.add('is-valid')
} else {
document.getElementById("zip").classList.remove('is-valid')
document.getElementById("zip").classList.add('is-invalid')
document.getElementById("zip").value = ""
}
if (document.getElementById("country").value > 0) {
document.getElementById("country").classList.remove('is-invalid')
document.getElementById("country").classList.add('is-valid')
} else {
document.getElementById("country").classList.remove('is-valid')
document.getElementById("country").classList.add('is-invalid')
document.getElementById("country").value = ""
}
if (document.getElementById("state").value.length > 2) {
document.getElementById("state").classList.remove('is-invalid')
document.getElementById("state").classList.add('is-valid')
} else {
document.getElementById("state").classList.remove('is-valid')
document.getElementById("state").classList.add('is-invalid')
document.getElementById("state").value = ""
}
})
}
if(n==2){
if (n == 2) {
form2 = {
"first_name": document.getElementById("first-name").value,
"last_name": document.getElementById("last-name").value,
@@ -218,209 +218,207 @@
document.getElementById("confirm").classList.remove("active");
}
if(n==3){
if (n == 3) {
document.getElementById("account").classList.add("done");
document.getElementById("personal").classList.add("done");
document.getElementById("payment").classList.add("done");
document.getElementById("confirm").classList.add("active");
document.getElementById("confirm").classList.remove("done");
}
}
const showTab=(n)=>{
}
const showTab = (n) => {
var x = document.getElementsByTagName("fieldset");
x[n].style.display = "block";
console.log(n);
ActiveTab(n);
}
const nextBtnFunction= (n) => {
const nextBtnFunction = (n) => {
var x = document.getElementsByTagName("fieldset");
x[currentTab].style.display = "none";
currentTab = currentTab + n;
showTab(currentTab);
}
const nextbtn= document.querySelectorAll('.next')
const nextbtn = document.querySelectorAll('.next')
Array.from(nextbtn, (nbtn) => {
nbtn.addEventListener('click',function()
{
console.log("tab " + currentTab)
if (currentTab == 0) {
var ok = 0
var no = 0
if(document.getElementById('cycle-fac').value > 0) {
document.getElementById('cycle-fac').classList.remove('is-invalid')
document.getElementById('cycle-fac').classList.add('is-valid')
ok++
} else {
document.getElementById('cycle-fac').classList.remove('is-valid')
document.getElementById('cycle-fac').classList.add('is-invalid')
document.getElementById('cycle-fac').value = "0"
no++
}
if(document.getElementById('srv-name').value.length > 2) {
document.getElementById('srv-name').classList.remove('is-invalid')
document.getElementById('srv-name').classList.add('is-valid')
ok++
} else {
document.getElementById('srv-name').classList.remove('is-valid')
document.getElementById('srv-name').classList.add('is-invalid')
document.getElementById('srv-name').value = ""
no++
}
if(ok ==2 && no == 0) {
nextBtnFunction(1);
}
}
if (currentTab == 1) {
var ok = 0
var no = 0
if(document.getElementById("first-name").value.length > 2) {
document.getElementById("first-name").classList.remove('is-invalid')
document.getElementById("first-name").classList.add('is-valid')
ok++
} else {
document.getElementById("first-name").classList.remove('is-valid')
document.getElementById("first-name").classList.add('is-invalid')
document.getElementById("first-name").value = ""
no++
}
if(document.getElementById("last-name").value.length > 2) {
document.getElementById("last-name").classList.remove('is-invalid')
document.getElementById("last-name").classList.add('is-valid')
ok++
} else {
document.getElementById("last-name").classList.remove('is-valid')
document.getElementById("last-name").classList.add('is-invalid')
document.getElementById("last-name").value = ""
no++
}
if(document.getElementById("mail").value.length > 2) {
document.getElementById("mail").classList.remove('is-invalid')
document.getElementById("mail").classList.add('is-valid')
ok++
} else {
document.getElementById("mail").classList.remove('is-valid')
document.getElementById("mail").classList.add('is-invalid')
document.getElementById("mail").value = ""
no++
}
if(document.getElementById("tel").value.length == 12 && document.getElementById("tel").value.match(/[0-9]/gi) != null && document.getElementById("tel").value.includes("+", 0) == true) {
document.getElementById("tel").classList.remove('is-invalid')
document.getElementById("tel").classList.add('is-valid')
ok++
} else {
document.getElementById("tel").classList.remove('is-valid')
document.getElementById("tel").classList.add('is-invalid')
document.getElementById("tel").value = ""
no++
}
if(document.getElementById("address-1").value.length > 2) {
document.getElementById("address-1").classList.remove('is-invalid')
document.getElementById("address-1").classList.add('is-valid')
ok++
} else {
document.getElementById("address-1").classList.remove('is-valid')
document.getElementById("address-1").classList.add('is-invalid')
document.getElementById("address-1").value = ""
no++
}
if(document.getElementById("city").value.length > 2) {
document.getElementById("city").classList.remove('is-invalid')
document.getElementById("city").classList.add('is-valid')
ok++
} else {
document.getElementById("city").classList.remove('is-valid')
document.getElementById("city").classList.add('is-invalid')
document.getElementById("city").value = ""
no++
}
if(document.getElementById("zip").value.length == 5 && /^\d+$/.test(document.getElementById("zip").value) == true) {
document.getElementById("zip").classList.remove('is-invalid')
document.getElementById("zip").classList.add('is-valid')
ok++
} else {
document.getElementById("zip").classList.remove('is-valid')
document.getElementById("zip").classList.add('is-invalid')
document.getElementById("zip").value = ""
no++
}
if(document.getElementById("country").value > 0) {
document.getElementById("country").classList.remove('is-invalid')
document.getElementById("country").classList.add('is-valid')
ok++
} else {
document.getElementById("country").classList.remove('is-valid')
document.getElementById("country").classList.add('is-invalid')
document.getElementById("country").value = ""
no++
}
if(document.getElementById("state").value.length > 2) {
document.getElementById("state").classList.remove('is-invalid')
document.getElementById("state").classList.add('is-valid')
ok++
} else {
document.getElementById("state").classList.remove('is-valid')
document.getElementById("state").classList.add('is-invalid')
document.getElementById("state").value = ""
no++
}
if(ok > 2 && no == 0) {
nextBtnFunction(1);
}
}
if (currentTab == 2) {
form = {"product_id": url.searchParams.get('id'), "srv_info": form1, "user_info": form2}
console.log(form)
postData(`https://api.mercurycloud.fr/api/services/order-form?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, form).then(data => {
console.log(data)
if (data.error == false) {
nextBtnFunction(1);
nbtn.addEventListener('click', function () {
console.log("tab " + currentTab)
if (currentTab == 0) {
var ok = 0
var no = 0
if (document.getElementById('cycle-fac').value > 0) {
document.getElementById('cycle-fac').classList.remove('is-invalid')
document.getElementById('cycle-fac').classList.add('is-valid')
ok++
} else {
if (data.code == 403) {
console.log('[ERROR] ' + data);
window.location.replace("/dashboard/auth/sign-in.html");
document.getElementById('cycle-fac').classList.remove('is-valid')
document.getElementById('cycle-fac').classList.add('is-invalid')
document.getElementById('cycle-fac').value = "0"
no++
}
if (document.getElementById('srv-name').value.length > 2) {
document.getElementById('srv-name').classList.remove('is-invalid')
document.getElementById('srv-name').classList.add('is-valid')
ok++
} else {
document.getElementById('srv-name').classList.remove('is-valid')
document.getElementById('srv-name').classList.add('is-invalid')
document.getElementById('srv-name').value = ""
no++
}
if (ok == 2 && no == 0) {
nextBtnFunction(1);
}
}
if (currentTab == 1) {
var ok = 0
var no = 0
if (document.getElementById("first-name").value.length > 2) {
document.getElementById("first-name").classList.remove('is-invalid')
document.getElementById("first-name").classList.add('is-valid')
ok++
} else {
document.getElementById("first-name").classList.remove('is-valid')
document.getElementById("first-name").classList.add('is-invalid')
document.getElementById("first-name").value = ""
no++
}
if (document.getElementById("last-name").value.length > 2) {
document.getElementById("last-name").classList.remove('is-invalid')
document.getElementById("last-name").classList.add('is-valid')
ok++
} else {
document.getElementById("last-name").classList.remove('is-valid')
document.getElementById("last-name").classList.add('is-invalid')
document.getElementById("last-name").value = ""
no++
}
if (document.getElementById("mail").value.length > 2) {
document.getElementById("mail").classList.remove('is-invalid')
document.getElementById("mail").classList.add('is-valid')
ok++
} else {
document.getElementById("mail").classList.remove('is-valid')
document.getElementById("mail").classList.add('is-invalid')
document.getElementById("mail").value = ""
no++
}
if (document.getElementById("tel").value.length == 12 && document.getElementById("tel").value.match(/[0-9]/gi) != null && document.getElementById("tel").value.includes("+", 0) == true) {
document.getElementById("tel").classList.remove('is-invalid')
document.getElementById("tel").classList.add('is-valid')
ok++
} else {
document.getElementById("tel").classList.remove('is-valid')
document.getElementById("tel").classList.add('is-invalid')
document.getElementById("tel").value = ""
no++
}
if (document.getElementById("address-1").value.length > 2) {
document.getElementById("address-1").classList.remove('is-invalid')
document.getElementById("address-1").classList.add('is-valid')
ok++
} else {
document.getElementById("address-1").classList.remove('is-valid')
document.getElementById("address-1").classList.add('is-invalid')
document.getElementById("address-1").value = ""
no++
}
if (document.getElementById("city").value.length > 2) {
document.getElementById("city").classList.remove('is-invalid')
document.getElementById("city").classList.add('is-valid')
ok++
} else {
document.getElementById("city").classList.remove('is-valid')
document.getElementById("city").classList.add('is-invalid')
document.getElementById("city").value = ""
no++
}
if (document.getElementById("zip").value.length == 5 && /^\d+$/.test(document.getElementById("zip").value) == true) {
document.getElementById("zip").classList.remove('is-invalid')
document.getElementById("zip").classList.add('is-valid')
ok++
} else {
document.getElementById("zip").classList.remove('is-valid')
document.getElementById("zip").classList.add('is-invalid')
document.getElementById("zip").value = ""
no++
}
if (document.getElementById("country").value > 0) {
document.getElementById("country").classList.remove('is-invalid')
document.getElementById("country").classList.add('is-valid')
ok++
} else {
document.getElementById("country").classList.remove('is-valid')
document.getElementById("country").classList.add('is-invalid')
document.getElementById("country").value = ""
no++
}
if (document.getElementById("state").value.length > 2) {
document.getElementById("state").classList.remove('is-invalid')
document.getElementById("state").classList.add('is-valid')
ok++
} else {
document.getElementById("state").classList.remove('is-valid')
document.getElementById("state").classList.add('is-invalid')
document.getElementById("state").value = ""
no++
}
if (ok > 2 && no == 0) {
nextBtnFunction(1);
}
}
if (currentTab == 2) {
form = { "product_id": url.searchParams.get('id'), "srv_info": form1, "user_info": form2 }
console.log(form)
postData(`https://dash.mercurycloud.fr:8000/api/services?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, form).then(data => {
console.log(data)
if (data.error == false) {
nextBtnFunction(1);
} else {
if (data.code == 404) {
if (data.code == 403) {
console.log('[ERROR] ' + data);
window.location.replace("/dashboard/auth/sign-in.html");
} else {
window.location.replace("/dashboard/errors/error500.html");
if (data.code == 404) {
console.log('[ERROR] ' + data);
window.location.replace("/dashboard/auth/sign-in.html");
} else {
window.location.replace("/dashboard/errors/error500.html");
}
}
}
}
})
}
})
});
})
}
})
});
const prebtn = document.querySelectorAll('.previous')
const prebtn = document.querySelectorAll('.previous')
Array.from(prebtn, (pbtn) => {
pbtn.addEventListener('click',function()
{
nextBtnFunction(-1);
})
});
pbtn.addEventListener('click', function () {
nextBtnFunction(-1);
})
});
})()

View File

@@ -1,13 +1,13 @@
fetch('https://api.mercurycloud.fr/api/products/products')
.then(function (response) {
return response.json();
})
.then(function (json) {
let products = ``
for(var i = 0; i < json.data.length; i++) {
if (window.location.href.includes("vps-pricings.html")) {
if (json.data[i].category == "proxmox") {
products = products + `
fetch('https://dash.mercurycloud.fr:8000/api/products')
.then(function (response) {
return response.json();
})
.then(function (json) {
let products = ``
for (var i = 0; i < json.data.length; i++) {
if (window.location.href.includes("vps-pricings.html")) {
if (json.data[i].category == "proxmox") {
products = products + `
<div class="col iq-star-inserted-3">
<div class="card my-5">
<div class="card-body">
@@ -25,11 +25,11 @@ fetch('https://api.mercurycloud.fr/api/products/products')
</div>
</div>
`
}
}
if (window.location.href.includes("game-pricings.html")) {
if (json.data[i].category == "pterodactyl") {
products = products + `
}
}
if (window.location.href.includes("game-pricings.html")) {
if (json.data[i].category == "pterodactyl") {
products = products + `
<div class="col iq-star-inserted-3">
<div class="card my-5">
<div class="card-body">
@@ -47,8 +47,8 @@ fetch('https://api.mercurycloud.fr/api/products/products')
</div>
</div>
`
}
}
}
}
}
document.getElementById('pricings').innerHTML = products
})
document.getElementById('pricings').innerHTML = products
})

View File

@@ -1,68 +1,68 @@
async function postData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json()
}
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
}
fetch(`https://api.mercurycloud.fr/api/products/proxmox-nodes-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
let nodes_html = ``
for(var i = 0; i < json.nodes.length; i++) {
nodes_html = nodes_html + `
fetch(`https://dash.mercurycloud.fr:8000/api/products/proxmox/nodes?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
let nodes_html = ``
for (var i = 0; i < json.nodes.length; i++) {
nodes_html = nodes_html + `
<option value="${json.nodes[i].node}">${json.nodes[i].node}</option>
`
}
document.getElementById('nodes').innerHTML = '<option value="0">Veuillez choisir un noeud</option>' + nodes_html
})
}
document.getElementById('nodes').innerHTML = '<option value="0">Veuillez choisir un noeud</option>' + nodes_html
})
function update_node() {
fetch(`https://api.mercurycloud.fr/api/products/proxmox-qemu-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}&node=${document.getElementById('nodes').value}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
let template_vm_html = ``
for(var i = 0; i < json.vms.length; i++) {
template_vm_html = template_vm_html + `
fetch(`https://dash.mercurycloud.fr:8000/api/products/proxmox/qemu?uuid=${getCookie("uuid")}&token=${getCookie("token")}&node=${document.getElementById('nodes').value}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
let template_vm_html = ``
for (var i = 0; i < json.vms.length; i++) {
template_vm_html = template_vm_html + `
<option value="${json.vms[i].vmid}">${json.vms[i].name}</option>
`
}
document.getElementById('template_vm').innerHTML = template_vm_html
})
}
document.getElementById('template_vm').innerHTML = template_vm_html
})
fetch(`https://api.mercurycloud.fr/api/products/proxmox-storage-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}&node=${document.getElementById('nodes').value}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
let storage_html = ``
for(var i = 0; i < json.storage.length; i++) {
storage_html = storage_html + `
fetch(`https://dash.mercurycloud.fr:8000/api/products/proxmox/storage?uuid=${getCookie("uuid")}&token=${getCookie("token")}&node=${document.getElementById('nodes').value}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
let storage_html = ``
for (var i = 0; i < json.storage.length; i++) {
storage_html = storage_html + `
<option value="${json.storage[i].storage}">${json.storage[i].storage}</option>
`
}
document.getElementById('storage').innerHTML = storage_html
})
}
document.getElementById('storage').innerHTML = storage_html
})
}
function create_product() {
var ok = 0
var no = 0
if(document.getElementById('name').value.length > 0) {
if (document.getElementById('name').value.length > 0) {
document.getElementById('name').classList.remove('is-invalid')
document.getElementById('name').classList.add('is-valid')
ok++
@@ -73,7 +73,7 @@ function create_product() {
no++
}
if(document.getElementById('description').value.length > 0) {
if (document.getElementById('description').value.length > 0) {
document.getElementById('description').classList.remove('is-invalid')
document.getElementById('description').classList.add('is-valid')
ok++
@@ -84,7 +84,7 @@ function create_product() {
no++
}
if(document.getElementById('price').value.length > 0) {
if (document.getElementById('price').value.length > 0) {
document.getElementById('price').classList.remove('is-invalid')
document.getElementById('price').classList.add('is-valid')
ok++
@@ -95,7 +95,7 @@ function create_product() {
no++
}
if(document.getElementById('nodes').value != 0) {
if (document.getElementById('nodes').value != 0) {
document.getElementById('nodes').classList.remove('is-invalid')
document.getElementById('nodes').classList.add('is-valid')
ok++
@@ -105,7 +105,7 @@ function create_product() {
no++
}
if(document.getElementById('template_vm').value != 0) {
if (document.getElementById('template_vm').value != 0) {
document.getElementById('template_vm').classList.remove('is-invalid')
document.getElementById('template_vm').classList.add('is-valid')
ok++
@@ -115,7 +115,7 @@ function create_product() {
no++
}
if(document.getElementById('cores').value.length > 0) {
if (document.getElementById('cores').value.length > 0) {
document.getElementById('cores').classList.remove('is-invalid')
document.getElementById('cores').classList.add('is-valid')
ok++
@@ -126,7 +126,7 @@ function create_product() {
no++
}
if(document.getElementById('ram').value.length > 0) {
if (document.getElementById('ram').value.length > 0) {
document.getElementById('ram').classList.remove('is-invalid')
document.getElementById('ram').classList.add('is-valid')
ok++
@@ -137,7 +137,7 @@ function create_product() {
no++
}
if(document.getElementById('storage').value != 0) {
if (document.getElementById('storage').value != 0) {
document.getElementById('storage').classList.remove('is-invalid')
document.getElementById('storage').classList.add('is-valid')
ok++
@@ -147,7 +147,7 @@ function create_product() {
no++
}
if(document.getElementById('disk_size').value.length > 0) {
if (document.getElementById('disk_size').value.length > 0) {
document.getElementById('disk_size').classList.remove('is-invalid')
document.getElementById('disk_size').classList.add('is-valid')
ok++
@@ -160,11 +160,12 @@ function create_product() {
if(ok == 9 && no == 0) {
if (ok == 9 && no == 0) {
body = {
"name": document.getElementById("name").value,
"description": document.getElementById("description").value,
"price": document.getElementById("price").value,
"category": "proxmox",
"node": document.getElementById("nodes").value,
"template_vm": document.getElementById("template_vm").value,
"cores": document.getElementById("cores").value,
@@ -173,7 +174,7 @@ function create_product() {
"disk_size": document.getElementById("disk_size").value,
"add_conf": document.getElementById("add_conf").value
}
postData(`https://api.mercurycloud.fr/api/products/proxmox-create-product?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
postData(`https://dash.mercurycloud.fr:8000/api/products?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
console.log(data)
if (data.error == false) {
window.location.replace("/dashboard/products/proxmox-products-list.html")
@@ -185,6 +186,6 @@ function create_product() {
location.href = "../errors/error500.html"
}
}
})
})
}
}

View File

@@ -1,10 +1,10 @@
async function postData(url = '', data = {}) {
async function putData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json()
}
@@ -17,115 +17,114 @@ function getCookie(name) {
var id_string = ""
var category_string = ""
fetch(`https://api.mercurycloud.fr/api/products/proxmox-nodes-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
let nodes_html = ``
for(var i = 0; i < json.nodes.length; i++) {
nodes_html = nodes_html + `
fetch(`https://dash.mercurycloud.fr:8000/api/products/proxmox/nodes?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
let nodes_html = ``
for (var i = 0; i < json.nodes.length; i++) {
nodes_html = nodes_html + `
<option value="${json.nodes[i].node}">${json.nodes[i].node}</option>
`
}
document.getElementById('nodes').innerHTML = '<option value="0">Veuillez choisir un noeud</option>' + nodes_html
const url = new URL(window.location.href);
if (url.searchParams.get('id')) {
fetch(`https://api.mercurycloud.fr/api/products/product-info?uuid=${getCookie("uuid")}&token=${getCookie("token")}&id=${url.searchParams.get('id')}`)
}
document.getElementById('nodes').innerHTML = '<option value="0">Veuillez choisir un noeud</option>' + nodes_html
const url = new URL(window.location.href);
if (url.searchParams.get('id')) {
fetch(`https://dash.mercurycloud.fr:8000/api/products/${url.searchParams.get('id')}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
if (json.error === false) {
if (json.data.id == 404) {
window.location.replace("/dashboard/errors/error404.html");
} else {
document.getElementById("title").innerHTML = `Mercury Cloud | Edition du produit Pterodactyl ${json.data.name}`
document.getElementById("product-title").innerHTML = `Edition du produit ${json.data.name}`
document.getElementById('name').value = json.data.name
document.getElementById('description').value = json.data.description
document.getElementById('price').value = json.data.price
document.getElementById('nodes').value = json.data.node
fetch(`https://dash.mercurycloud.fr:8000/api/products/proxmox/qemu?uuid=${getCookie("uuid")}&token=${getCookie("token")}&node=${document.getElementById('nodes').value}`)
.then(function (response) {
return response.json();
})
.then(function (json1) {
let template_vm_html = ``
for (var i = 0; i < json1.vms.length; i++) {
template_vm_html = template_vm_html + `
<option value="${json1.vms[i].vmid}">${json1.vms[i].name}</option>
`
}
document.getElementById('template_vm').innerHTML = template_vm_html
document.getElementById('template_vm').value = json.data.template_vmid
})
fetch(`https://dash.mercurycloud.fr:8000/api/products/proxmox/storage?uuid=${getCookie("uuid")}&token=${getCookie("token")}&node=${document.getElementById('nodes').value}`)
.then(function (response) {
return response.json();
})
.then(function (json2) {
let storage_html = ``
for (var i = 0; i < json2.storage.length; i++) {
storage_html = storage_html + `
<option value="${json2.storage[i].storage}">${json2.storage[i].storage}</option>
`
}
document.getElementById('storage').innerHTML = storage_html
document.getElementById('storage').value = json.data.storage
})
document.getElementById('cores').value = json.data.cores
document.getElementById('ram').value = json.data.ram
document.getElementById('disk_size').value = json.data.disk_size
document.getElementById('add_conf').value = json.data.add_conf
id_string = json.data.id
category_string = json.data.category
}
} else {
// window.location.replace("/dashboard/errors/error500.html");
}
})
} else {
window.location.replace("/dashboard/errors/error404.html");
}
})
function update_node() {
fetch(`https://dash.mercurycloud.fr:8000/api/products/proxmox/qemu?uuid=${getCookie("uuid")}&token=${getCookie("token")}&node=${document.getElementById('nodes').value}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
console.log(json)
if (json.error === false) {
if (json.data.id == 404) {
window.location.replace("/dashboard/errors/error404.html");
} else {
document.getElementById("title").innerHTML = `Mercury Cloud | Edition du produit Pterodactyl ${json.data.name}`
document.getElementById("product-title").innerHTML = `Edition du produit ${json.data.name}`
document.getElementById('name').value = json.data.name
document.getElementById('description').value = json.data.description
document.getElementById('price').value = json.data.price
document.getElementById('nodes').value = json.data.node
fetch(`https://api.mercurycloud.fr/api/products/proxmox-qemu-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}&node=${document.getElementById('nodes').value}`)
.then(function (response) {
return response.json();
})
.then(function (json1) {
let template_vm_html = ``
for(var i = 0; i < json1.vms.length; i++) {
template_vm_html = template_vm_html + `
<option value="${json1.vms[i].vmid}">${json1.vms[i].name}</option>
`
}
document.getElementById('template_vm').innerHTML = template_vm_html
document.getElementById('template_vm').value = json.data.template_vmid
})
fetch(`https://api.mercurycloud.fr/api/products/proxmox-storage-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}&node=${document.getElementById('nodes').value}`)
.then(function (response) {
return response.json();
})
.then(function (json2) {
let storage_html = ``
for(var i = 0; i < json2.storage.length; i++) {
storage_html = storage_html + `
<option value="${json2.storage[i].storage}">${json2.storage[i].storage}</option>
`
}
document.getElementById('storage').innerHTML = storage_html
document.getElementById('storage').value = json.data.storage
})
document.getElementById('cores').value = json.data.cores
document.getElementById('ram').value = json.data.ram
document.getElementById('disk_size').value = json.data.disk_size
document.getElementById('add_conf').value = json.data.add_conf
id_string = json.data.id
category_string = json.data.category
}
} else {
// window.location.replace("/dashboard/errors/error500.html");
}
})
} else {
window.location.replace("/dashboard/errors/error404.html");
}
})
function update_node() {
fetch(`https://api.mercurycloud.fr/api/products/proxmox-qemu-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}&node=${document.getElementById('nodes').value}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
let template_vm_html = ``
for(var i = 0; i < json.vms.length; i++) {
template_vm_html = template_vm_html + `
let template_vm_html = ``
for (var i = 0; i < json.vms.length; i++) {
template_vm_html = template_vm_html + `
<option value="${json.vms[i].vmid}">${json.vms[i].name}</option>
`
}
document.getElementById('template_vm').innerHTML = template_vm_html
})
}
document.getElementById('template_vm').innerHTML = template_vm_html
})
fetch(`https://api.mercurycloud.fr/api/products/proxmox-storage-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}&node=${document.getElementById('nodes').value}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
let storage_html = ``
for(var i = 0; i < json.storage.length; i++) {
storage_html = storage_html + `
fetch(`https://dash.mercurycloud.fr:8000/api/products/proxmox/storage?uuid=${getCookie("uuid")}&token=${getCookie("token")}&node=${document.getElementById('nodes').value}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
let storage_html = ``
for (var i = 0; i < json.storage.length; i++) {
storage_html = storage_html + `
<option value="${json.storage[i].storage}">${json.storage[i].storage}</option>
`
}
document.getElementById('storage').innerHTML = storage_html
})
}
document.getElementById('storage').innerHTML = storage_html
})
}
function save_product() {
var ok = 0
var no = 0
if(document.getElementById('name').value.length > 0) {
if (document.getElementById('name').value.length > 0) {
document.getElementById('name').classList.remove('is-invalid')
document.getElementById('name').classList.add('is-valid')
ok++
@@ -136,7 +135,7 @@ function save_product() {
no++
}
if(document.getElementById('description').value.length > 0) {
if (document.getElementById('description').value.length > 0) {
document.getElementById('description').classList.remove('is-invalid')
document.getElementById('description').classList.add('is-valid')
ok++
@@ -147,7 +146,7 @@ function save_product() {
no++
}
if(document.getElementById('price').value.length > 0) {
if (document.getElementById('price').value.length > 0) {
document.getElementById('price').classList.remove('is-invalid')
document.getElementById('price').classList.add('is-valid')
ok++
@@ -158,7 +157,7 @@ function save_product() {
no++
}
if(document.getElementById('nodes').value != 0) {
if (document.getElementById('nodes').value != 0) {
document.getElementById('nodes').classList.remove('is-invalid')
document.getElementById('nodes').classList.add('is-valid')
ok++
@@ -168,7 +167,7 @@ function save_product() {
no++
}
if(document.getElementById('template_vm').value != 0) {
if (document.getElementById('template_vm').value != 0) {
document.getElementById('template_vm').classList.remove('is-invalid')
document.getElementById('template_vm').classList.add('is-valid')
ok++
@@ -178,7 +177,7 @@ function save_product() {
no++
}
if(document.getElementById('cores').value.length > 0) {
if (document.getElementById('cores').value.length > 0) {
document.getElementById('cores').classList.remove('is-invalid')
document.getElementById('cores').classList.add('is-valid')
ok++
@@ -189,7 +188,7 @@ function save_product() {
no++
}
if(document.getElementById('ram').value.length > 0) {
if (document.getElementById('ram').value.length > 0) {
document.getElementById('ram').classList.remove('is-invalid')
document.getElementById('ram').classList.add('is-valid')
ok++
@@ -200,7 +199,7 @@ function save_product() {
no++
}
if(document.getElementById('storage').value != 0) {
if (document.getElementById('storage').value != 0) {
document.getElementById('storage').classList.remove('is-invalid')
document.getElementById('storage').classList.add('is-valid')
ok++
@@ -210,7 +209,7 @@ function save_product() {
no++
}
if(document.getElementById('disk_size').value.length > 0) {
if (document.getElementById('disk_size').value.length > 0) {
document.getElementById('disk_size').classList.remove('is-invalid')
document.getElementById('disk_size').classList.add('is-valid')
ok++
@@ -223,9 +222,8 @@ function save_product() {
if(ok == 9 && no == 0) {
if (ok == 9 && no == 0) {
body = {
"id": id_string,
"category": category_string,
"name": document.getElementById("name").value,
"description": document.getElementById("description").value,
@@ -238,7 +236,7 @@ function save_product() {
"disk_size": document.getElementById("disk_size").value,
"add_conf": document.getElementById("add_conf").value
}
postData(`https://api.mercurycloud.fr/api/products/edit-product?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
putData(`https://dash.mercurycloud.fr:8000/api/products/${id_string}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
console.log(data)
if (data.error == false) {
window.location.reload()
@@ -250,6 +248,6 @@ function save_product() {
location.href = "../errors/error500.html"
}
}
})
})
}
}

View File

@@ -15,7 +15,7 @@ async function deleteData(url = '', data = {}) {
return response.json()
}
fetch(`https://api.mercurycloud.fr/api/products/products?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
fetch(`https://dash.mercurycloud.fr:8000/api/products?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
@@ -70,7 +70,7 @@ fetch(`https://api.mercurycloud.fr/api/products/products?uuid=${getCookie("uuid"
})
function delete_product(id) {
deleteData(`https://api.mercurycloud.fr/api/products/delete-product?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, { "id": id }).then(data => {
deleteData(`https://dash.mercurycloud.fr:8000/api/products/${id}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, {}).then(data => {
console.log(data)
if (data.error == false) {
window.location.reload()

View File

@@ -1,18 +1,18 @@
async function postData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json()
}
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
}
function update_eggs() {
@@ -153,7 +153,7 @@ function update_eggs() {
function create_product() {
var ok = 0
var no = 0
if(document.getElementById('name').value.length > 0) {
if (document.getElementById('name').value.length > 0) {
document.getElementById('name').classList.remove('is-invalid')
document.getElementById('name').classList.add('is-valid')
ok++
@@ -164,7 +164,7 @@ function create_product() {
no++
}
if(document.getElementById('description').value.length > 0) {
if (document.getElementById('description').value.length > 0) {
document.getElementById('description').classList.remove('is-invalid')
document.getElementById('description').classList.add('is-valid')
ok++
@@ -175,7 +175,7 @@ function create_product() {
no++
}
if(document.getElementById('price').value.length > 0) {
if (document.getElementById('price').value.length > 0) {
document.getElementById('price').classList.remove('is-invalid')
document.getElementById('price').classList.add('is-valid')
ok++
@@ -186,7 +186,7 @@ function create_product() {
no++
}
if(document.getElementById('cpu').value.length > 0) {
if (document.getElementById('cpu').value.length > 0) {
document.getElementById('cpu').classList.remove('is-invalid')
document.getElementById('cpu').classList.add('is-valid')
ok++
@@ -197,7 +197,7 @@ function create_product() {
no++
}
if(document.getElementById('ram').value.length > 0) {
if (document.getElementById('ram').value.length > 0) {
document.getElementById('ram').classList.remove('is-invalid')
document.getElementById('ram').classList.add('is-valid')
ok++
@@ -208,7 +208,7 @@ function create_product() {
no++
}
if(document.getElementById('disk').value.length > 0) {
if (document.getElementById('disk').value.length > 0) {
document.getElementById('disk').classList.remove('is-invalid')
document.getElementById('disk').classList.add('is-valid')
ok++
@@ -219,7 +219,7 @@ function create_product() {
no++
}
if(document.getElementById('swap').value.length > 0) {
if (document.getElementById('swap').value.length > 0) {
document.getElementById('swap').classList.remove('is-invalid')
document.getElementById('swap').classList.add('is-valid')
ok++
@@ -230,7 +230,7 @@ function create_product() {
no++
}
if(document.getElementById('io').value.length > 0) {
if (document.getElementById('io').value.length > 0) {
document.getElementById('io').classList.remove('is-invalid')
document.getElementById('io').classList.add('is-valid')
ok++
@@ -241,7 +241,7 @@ function create_product() {
no++
}
if(document.getElementById('startup_command').value.length > 0) {
if (document.getElementById('startup_command').value.length > 0) {
document.getElementById('startup_command').classList.remove('is-invalid')
document.getElementById('startup_command').classList.add('is-valid')
ok++
@@ -253,32 +253,33 @@ function create_product() {
}
if(ok == 9 && no == 0) {
if (ok == 9 && no == 0) {
var env_vars_count = 2
var env_vars = []
var env_vars_title = []
var env_vars_json = `{`
if (document.getElementById("egg").value == 1) {env_vars_count = 2, env_vars_title = ['BUNGEE_VERSION', 'SERVER_JARFILE']}
if (document.getElementById("egg").value == 2) {env_vars_count = 2, env_vars_title = ['SERVER_JARFILE', 'VANILLA_VERSION']}
if (document.getElementById("egg").value == 3) {env_vars_count = 4, env_vars_title = ['MINECRAFT_VERSION', 'SERVER_JARFILE', 'DL_PATH', 'BUILD_NUMBER']}
if (document.getElementById("egg").value == 4) {env_vars_count = 4, env_vars_title = ['SERVER_JARFILE', 'MC_VERSION', 'BUILD_TYPE', 'FORGE_VERSION ']}
if (document.getElementById("egg").value == 5) {env_vars_count = 2, env_vars_title = ['SPONGE_VERSION', 'SERVER_JARFILE']}
if (document.getElementById("egg").value == 6) {env_vars_count = 3, env_vars_title = ['SERVER_JARFILE', 'MC_VERSION', 'FABRIC_VERSION']}
if (document.getElementById("egg").value == 7) {env_vars_count = 6, env_vars_title = ['BEDROCK_VERSION', 'LD_LIBRARY_PATH', 'SERVERNAME', 'GAMEMODE', 'DIFFICULTY', 'CHEATS']}
if (document.getElementById("egg").value == 8) {env_vars_count = 2, env_vars_title = ['GITHUB_PACKAGE', 'MATCH']}
for(var i= 1; i < env_vars_count + 1; i++) {
if (document.getElementById("egg").value == 1) { env_vars_count = 2, env_vars_title = ['BUNGEE_VERSION', 'SERVER_JARFILE'] }
if (document.getElementById("egg").value == 2) { env_vars_count = 2, env_vars_title = ['SERVER_JARFILE', 'VANILLA_VERSION'] }
if (document.getElementById("egg").value == 3) { env_vars_count = 4, env_vars_title = ['MINECRAFT_VERSION', 'SERVER_JARFILE', 'DL_PATH', 'BUILD_NUMBER'] }
if (document.getElementById("egg").value == 4) { env_vars_count = 4, env_vars_title = ['SERVER_JARFILE', 'MC_VERSION', 'BUILD_TYPE', 'FORGE_VERSION '] }
if (document.getElementById("egg").value == 5) { env_vars_count = 2, env_vars_title = ['SPONGE_VERSION', 'SERVER_JARFILE'] }
if (document.getElementById("egg").value == 6) { env_vars_count = 3, env_vars_title = ['SERVER_JARFILE', 'MC_VERSION', 'FABRIC_VERSION'] }
if (document.getElementById("egg").value == 7) { env_vars_count = 6, env_vars_title = ['BEDROCK_VERSION', 'LD_LIBRARY_PATH', 'SERVERNAME', 'GAMEMODE', 'DIFFICULTY', 'CHEATS'] }
if (document.getElementById("egg").value == 8) { env_vars_count = 2, env_vars_title = ['GITHUB_PACKAGE', 'MATCH'] }
for (var i = 1; i < env_vars_count + 1; i++) {
env_vars.push(document.getElementById("env_" + i).value)
}
for(var i= 0; i < env_vars.length; i++) {
env_vars_json = env_vars_json + `"${env_vars_title[i]}": "${env_vars[i]}"`
if (i < env_vars.length - 1) {env_vars_json = env_vars_json + ","}
if (i == env_vars.length - 1) {env_vars_json = env_vars_json + "}"}
for (var i = 0; i < env_vars.length; i++) {
env_vars_json = env_vars_json + `"${env_vars_title[i]}": "${env_vars[i]}"`
if (i < env_vars.length - 1) { env_vars_json = env_vars_json + "," }
if (i == env_vars.length - 1) { env_vars_json = env_vars_json + "}" }
}
body = {
"name": document.getElementById("name").value,
"description": document.getElementById("description").value,
"price": document.getElementById("price").value,
"category": "pterodactyl",
"cpu": document.getElementById("cpu").value,
"cpu_pinning": document.getElementById("cpu_pinning").value,
"ram": document.getElementById("ram").value,
@@ -289,7 +290,7 @@ function create_product() {
"startup_command": document.getElementById("startup_command").value,
"env": env_vars_json
}
postData(`https://api.mercurycloud.fr/api/products/ptero-create-product?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
postData(`https://dash.mercurycloud.fr:8000/api/products?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
console.log(data)
if (data.error == false) {
window.location.replace("/dashboard/products/ptero-products-list.html")
@@ -301,6 +302,6 @@ function create_product() {
location.href = "../errors/error500.html"
}
}
})
})
}
}

View File

@@ -1,10 +1,10 @@
async function postData(url = '', data = {}) {
async function putData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json()
}
@@ -13,46 +13,45 @@ function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
}
}
var id_string = ""
var category_string = ""
const url = new URL(window.location.href);
if (url.searchParams.get('id')) {
fetch(`https://api.mercurycloud.fr/api/products/product-info?uuid=${getCookie("uuid")}&token=${getCookie("token")}&id=${url.searchParams.get('id')}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
console.log(json)
if (json.error === false) {
if (json.data.id == 404) {
window.location.replace("/dashboard/errors/error404.html");
} else {
document.getElementById("title").innerHTML = `Mercury Cloud | Edition du produit Pterodactyl ${json.data.name}`
document.getElementById("product-title").innerHTML = `Edition du produit ${json.data.name}`
document.getElementById('name').value = json.data.name
document.getElementById('description').value = json.data.description
document.getElementById('price').value = json.data.price
document.getElementById('cpu').value = json.data.cpu
document.getElementById('cpu_pinning').value = json.data.cpu_pinning
document.getElementById('ram').value = json.data.ram
document.getElementById('disk').value = json.data.disk
document.getElementById('swap').value = json.data.swap
document.getElementById('io').value = json.data.io
document.getElementById('startup_command').value = json.data.startup_command
document.getElementById('egg').value = json.data.egg
update_eggs()
for (let i=0; i < json.data.env.length; i++) {
document.getElementById('env_' + (i + 1)).value = json.data.env[i]
fetch(`https://dash.mercurycloud.fr:8000/api/products/${url.searchParams.get('id')}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
if (json.error === false) {
if (json.data.id == 404) {
window.location.replace("/dashboard/errors/error404.html");
} else {
document.getElementById("title").innerHTML = `Mercury Cloud | Edition du produit Pterodactyl ${json.data.name}`
document.getElementById("product-title").innerHTML = `Edition du produit ${json.data.name}`
document.getElementById('name').value = json.data.name
document.getElementById('description').value = json.data.description
document.getElementById('price').value = json.data.price
document.getElementById('cpu').value = json.data.cpu
document.getElementById('cpu_pinning').value = json.data.cpu_pinning
document.getElementById('ram').value = json.data.ram
document.getElementById('disk').value = json.data.disk
document.getElementById('swap').value = json.data.swap
document.getElementById('io').value = json.data.io
document.getElementById('startup_command').value = json.data.startup_command
document.getElementById('egg').value = json.data.egg
update_eggs()
for (let i = 0; i < json.data.env.length; i++) {
document.getElementById('env_' + (i + 1)).value = json.data.env[i]
}
id_string = json.data.id
category_string = json.data.category
}
id_string = json.data.id
category_string = json.data.category
} else {
// window.location.replace("/dashboard/errors/error500.html");
}
} else {
// window.location.replace("/dashboard/errors/error500.html");
}
})
})
} else {
window.location.replace("/dashboard/errors/error404.html");
}
@@ -195,7 +194,7 @@ function update_eggs() {
function save_product() {
var ok = 0
var no = 0
if(document.getElementById('name').value.length > 0) {
if (document.getElementById('name').value.length > 0) {
document.getElementById('name').classList.remove('is-invalid')
document.getElementById('name').classList.add('is-valid')
ok++
@@ -206,7 +205,7 @@ function save_product() {
no++
}
if(document.getElementById('description').value.length > 0) {
if (document.getElementById('description').value.length > 0) {
document.getElementById('description').classList.remove('is-invalid')
document.getElementById('description').classList.add('is-valid')
ok++
@@ -217,7 +216,7 @@ function save_product() {
no++
}
if(document.getElementById('price').value.length > 0) {
if (document.getElementById('price').value.length > 0) {
document.getElementById('price').classList.remove('is-invalid')
document.getElementById('price').classList.add('is-valid')
ok++
@@ -228,7 +227,7 @@ function save_product() {
no++
}
if(document.getElementById('cpu').value.length > 0) {
if (document.getElementById('cpu').value.length > 0) {
document.getElementById('cpu').classList.remove('is-invalid')
document.getElementById('cpu').classList.add('is-valid')
ok++
@@ -239,7 +238,7 @@ function save_product() {
no++
}
if(document.getElementById('ram').value.length > 0) {
if (document.getElementById('ram').value.length > 0) {
document.getElementById('ram').classList.remove('is-invalid')
document.getElementById('ram').classList.add('is-valid')
ok++
@@ -250,7 +249,7 @@ function save_product() {
no++
}
if(document.getElementById('disk').value.length > 0) {
if (document.getElementById('disk').value.length > 0) {
document.getElementById('disk').classList.remove('is-invalid')
document.getElementById('disk').classList.add('is-valid')
ok++
@@ -261,7 +260,7 @@ function save_product() {
no++
}
if(document.getElementById('swap').value.length > 0) {
if (document.getElementById('swap').value.length > 0) {
document.getElementById('swap').classList.remove('is-invalid')
document.getElementById('swap').classList.add('is-valid')
ok++
@@ -272,7 +271,7 @@ function save_product() {
no++
}
if(document.getElementById('io').value.length > 0) {
if (document.getElementById('io').value.length > 0) {
document.getElementById('io').classList.remove('is-invalid')
document.getElementById('io').classList.add('is-valid')
ok++
@@ -283,7 +282,7 @@ function save_product() {
no++
}
if(document.getElementById('startup_command').value.length > 0) {
if (document.getElementById('startup_command').value.length > 0) {
document.getElementById('startup_command').classList.remove('is-invalid')
document.getElementById('startup_command').classList.add('is-valid')
ok++
@@ -295,30 +294,29 @@ function save_product() {
}
if(ok == 9 && no == 0) {
if (ok == 9 && no == 0) {
var env_var_count = 2
var env_vars = []
var env_vars_title = []
var env_vars_json = `{`
if (document.getElementById("egg").value == 1) {env_var_count = 2, env_vars_title = ['BUNGEE_VERSION', 'SERVER_JARFILE']}
if (document.getElementById("egg").value == 2) {env_var_count = 2, env_vars_title = ['SERVER_JARFILE', 'VANILLA_VERSION']}
if (document.getElementById("egg").value == 3) {env_var_count = 4, env_vars_title = ['MINECRAFT_VERSION', 'SERVER_JARFILE', 'DL_PATH', 'BUILD_NUMBER']}
if (document.getElementById("egg").value == 4) {env_var_count = 4, env_vars_title = ['SERVER_JARFILE', 'MC_VERSION', 'BUILD_TYPE', 'FORGE_VERSION ']}
if (document.getElementById("egg").value == 5) {env_var_count = 2, env_vars_title = ['SPONGE_VERSION', 'SERVER_JARFILE']}
if (document.getElementById("egg").value == 6) {env_var_count = 3, env_vars_title = ['SERVER_JARFILE', 'MC_VERSION', 'FABRIC_VERSION']}
if (document.getElementById("egg").value == 7) {env_var_count = 6, env_vars_title = ['BEDROCK_VERSION', 'LD_LIBRARY_PATH', 'SERVERNAME', 'GAMEMODE', 'DIFFICULTY', 'CHEATS']}
if (document.getElementById("egg").value == 8) {env_var_count = 2, env_vars_title = ['GITHUB_PACKAGE', 'MATCH']}
for(var i= 1; i < env_var_count + 1; i++) {
if (document.getElementById("egg").value == 1) { env_var_count = 2, env_vars_title = ['BUNGEE_VERSION', 'SERVER_JARFILE'] }
if (document.getElementById("egg").value == 2) { env_var_count = 2, env_vars_title = ['SERVER_JARFILE', 'VANILLA_VERSION'] }
if (document.getElementById("egg").value == 3) { env_var_count = 4, env_vars_title = ['MINECRAFT_VERSION', 'SERVER_JARFILE', 'DL_PATH', 'BUILD_NUMBER'] }
if (document.getElementById("egg").value == 4) { env_var_count = 4, env_vars_title = ['SERVER_JARFILE', 'MC_VERSION', 'BUILD_TYPE', 'FORGE_VERSION '] }
if (document.getElementById("egg").value == 5) { env_var_count = 2, env_vars_title = ['SPONGE_VERSION', 'SERVER_JARFILE'] }
if (document.getElementById("egg").value == 6) { env_var_count = 3, env_vars_title = ['SERVER_JARFILE', 'MC_VERSION', 'FABRIC_VERSION'] }
if (document.getElementById("egg").value == 7) { env_var_count = 6, env_vars_title = ['BEDROCK_VERSION', 'LD_LIBRARY_PATH', 'SERVERNAME', 'GAMEMODE', 'DIFFICULTY', 'CHEATS'] }
if (document.getElementById("egg").value == 8) { env_var_count = 2, env_vars_title = ['GITHUB_PACKAGE', 'MATCH'] }
for (var i = 1; i < env_var_count + 1; i++) {
env_vars.push(document.getElementById("env_" + i).value)
}
for(var i= 0; i < env_vars.length; i++) {
env_vars_json = env_vars_json + `"${env_vars_title[i]}": "${env_vars[i]}"`
if (i < env_vars.length - 1) {env_vars_json = env_vars_json + ","}
if (i == env_vars.length - 1) {env_vars_json = env_vars_json + "}"}
for (var i = 0; i < env_vars.length; i++) {
env_vars_json = env_vars_json + `"${env_vars_title[i]}": "${env_vars[i]}"`
if (i < env_vars.length - 1) { env_vars_json = env_vars_json + "," }
if (i == env_vars.length - 1) { env_vars_json = env_vars_json + "}" }
}
body = {
"id": id_string,
"category": category_string,
"name": document.getElementById("name").value,
"description": document.getElementById("description").value,
@@ -334,8 +332,8 @@ function save_product() {
"env": env_vars_json
}
postData(`https://api.mercurycloud.fr/api/products/edit-product?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
putData(`https://dash.mercurycloud.fr:8000/api/products/${id_string}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
console.log(data)
if (data.error == false) {
window.location.reload()
@@ -347,7 +345,7 @@ function save_product() {
location.href = "../errors/error500.html"
}
}
})
})
}
}

View File

@@ -15,7 +15,7 @@ async function deleteData(url = '', data = {}) {
return response.json()
}
fetch(`https://api.mercurycloud.fr/api/products/products?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
fetch(`https://dash.mercurycloud.fr:8000/api/products?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
@@ -70,7 +70,7 @@ fetch(`https://api.mercurycloud.fr/api/products/products?uuid=${getCookie("uuid"
})
function delete_product(id) {
deleteData(`https://api.mercurycloud.fr/api/products/delete-product?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, { "id": id }).then(data => {
deleteData(`https://dash.mercurycloud.fr:8000/api/products/${id}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, {}).then(data => {
console.log(data)
if (data.error == false) {
window.location.reload()

View File

@@ -6,11 +6,11 @@ function getCookie(name) {
async function postData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json()
}
@@ -31,7 +31,7 @@ function admin_click() {
function create_role() {
var ok = 0
var no = 0
if(document.getElementById("role-name").value.length > 2) {
if (document.getElementById("role-name").value.length > 2) {
document.getElementById("role-name").classList.remove('is-invalid')
document.getElementById("role-name").classList.add('is-valid')
ok++
@@ -42,7 +42,7 @@ function create_role() {
no++
}
if(ok == 1 && no == 0) {
if (ok == 1 && no == 0) {
var permissions = []
const permissions_array = ["ADMIN", "VIEWADMINPANEL", "LISTUSERS", "CREATEUSER", "DELETEUSER", "EDTIUSER", "LISTROLES", "CREATEROLE", "DELETEROLE", "EDITROLE", "LISTPRODUCTS", "CREATEPRODUCT", "DELETEPRODUCT", "EDITPRODUCT"]
if (document.getElementById("ADMIN").checked) {
@@ -60,7 +60,7 @@ function create_role() {
"permissions": permissions
}
postData(`https://api.mercurycloud.fr/api/roles/create-role?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
postData(`https://dash.mercurycloud.fr:8000/api/roles?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
if (data.error == false) {
window.location.replace("/dashboard/roles/roles-list.html")
} else {
@@ -71,6 +71,6 @@ function create_role() {
location.href = "../errors/error500.html"
}
}
})
})
}
}

View File

@@ -4,13 +4,13 @@ function getCookie(name) {
if (parts.length === 2) return parts.pop().split(';').shift();
}
async function postData(url = '', data = {}) {
async function putData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json()
}
@@ -18,32 +18,31 @@ async function postData(url = '', data = {}) {
var role_id = ""
const url = new URL(window.location.href);
if (url.searchParams.get('id')) {
fetch(`https://api.mercurycloud.fr/api/roles/role-info?uuid=${getCookie("uuid")}&token=${getCookie("token")}&id=${url.searchParams.get('id')}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
console.log(json)
if (json.error === false) {
if (json.data.uuid == 404) {
window.location.replace("/dashboard/errors/error404.html");
} else {
document.getElementById("title").innerHTML = `Mercury Cloud | Edition du rôle ${json.data.name}`
document.getElementById("role-title").innerHTML = `Edition du rôle ${json.data.name}`
document.getElementById("role-name").value = json.data.name
if (json.data.permissions != "NONE") {
const role_permissions = json.data.permissions.split(",");
for (let i = 0; i < role_permissions.length; ++i) {
document.getElementById(role_permissions[i]).checked = true
fetch(`https://dash.mercurycloud.fr:8000/api/roles/${url.searchParams.get('id')}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
if (json.error === false) {
if (json.data.uuid == 404) {
window.location.replace("/dashboard/errors/error404.html");
} else {
document.getElementById("title").innerHTML = `Mercury Cloud | Edition du rôle ${json.data.name}`
document.getElementById("role-title").innerHTML = `Edition du rôle ${json.data.name}`
document.getElementById("role-name").value = json.data.name
if (json.data.permissions != "NONE") {
const role_permissions = json.data.permissions.split(",");
for (let i = 0; i < role_permissions.length; ++i) {
document.getElementById(role_permissions[i]).checked = true
}
admin_click()
}
admin_click()
role_id = json.data.id
}
role_id = json.data.id
} else {
window.location.replace("/dashboard/errors/error500.html");
}
} else {
window.location.replace("/dashboard/errors/error500.html");
}
})
})
} else {
window.location.replace("/dashboard/errors/error404.html");
}
@@ -64,7 +63,7 @@ function admin_click() {
function save_role() {
var ok = 0
var no = 0
if(document.getElementById("role-name").value.length > 2) {
if (document.getElementById("role-name").value.length > 2) {
document.getElementById("role-name").classList.remove('is-invalid')
document.getElementById("role-name").classList.add('is-valid')
ok++
@@ -75,7 +74,7 @@ function save_role() {
no++
}
if(ok == 1 && no == 0) {
if (ok == 1 && no == 0) {
var permissions = []
const permissions_array = ["ADMIN", "VIEWADMINPANEL", "LISTUSERS", "CREATEUSER", "DELETEUSER", "EDTIUSER", "LISTROLES", "CREATEROLE", "DELETEROLE", "EDITROLE", "LISTPRODUCTS", "CREATEPRODUCT", "DELETEPRODUCT", "EDITPRODUCT", "LISTSERVICES", "CREATESERVICE", "DELETESERVICE", "EDITSERVICE"]
if (document.getElementById("ADMIN").checked) {
@@ -89,12 +88,11 @@ function save_role() {
}
}
body = {
"id": role_id,
"name": document.getElementById("role-name").value,
"permissions": permissions
}
postData(`https://api.mercurycloud.fr/api/roles/role-edit?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
putData(`https://dash.mercurycloud.fr:8000/api/roles/${role_id}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
if (data.error == false) {
window.location.reload()
} else {
@@ -105,6 +103,6 @@ function save_role() {
location.href = "../errors/error500.html"
}
}
})
})
}
}

View File

@@ -15,7 +15,7 @@ async function deleteData(url = '', data = {}) {
return response.json()
}
fetch(`https://api.mercurycloud.fr/api/roles/roles-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
fetch(`https://dash.mercurycloud.fr:8000/api/roles?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
@@ -57,7 +57,7 @@ fetch(`https://api.mercurycloud.fr/api/roles/roles-list?uuid=${getCookie("uuid")
})
function delete_role(id) {
deleteData(`https://api.mercurycloud.fr/api/roles/delete-role?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, { "id": id }).then(data => {
deleteData(`https://dash.mercurycloud.fr:8000/api/roles/${id}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, {}).then(data => {
console.log(data)
if (data.error == false) {
window.location.reload()

View File

@@ -4,13 +4,13 @@ function getCookie(name) {
if (parts.length === 2) return parts.pop().split(';').shift();
}
async function postData(url = '', data = {}) {
async function putData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json()
}
@@ -19,55 +19,54 @@ var service_id = ""
var json_products = {}
const url = new URL(window.location.href);
if (url.searchParams.get('id')) {
fetch(`https://api.mercurycloud.fr/api/services/service-info?uuid=${getCookie("uuid")}&token=${getCookie("token")}&id=${url.searchParams.get('id')}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
if (json.error === false) {
if (json.data.id == 404) {
window.location.replace("/dashboard/errors/error404.html");
} else {
document.getElementById("title").innerHTML = `Mercury Cloud | Edition du service ${json.data.name}`
document.getElementById("service-title").innerHTML = `Edition du service ${json.data.name}`
document.getElementById("name").value = json.data.name
document.getElementById("price").value = json.data.price
document.getElementById("statut").value = json.data.statut
fetch(`https://api.mercurycloud.fr/api/users/users-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json2) {
if (json2.error === false) {
var uuid_list = ``
for (let i = 0; i < json2.users.length; i++) {
uuid_list = uuid_list + `
fetch(`https://dash.mercurycloud.fr:8000/api/services/${url.searchParams.get("id")}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
if (json.error === false) {
if (json.data.id == 404) {
window.location.replace("/dashboard/errors/error404.html");
} else {
document.getElementById("title").innerHTML = `Mercury Cloud | Edition du service ${json.data.name}`
document.getElementById("service-title").innerHTML = `Edition du service ${json.data.name}`
document.getElementById("name").value = json.data.name
document.getElementById("price").value = json.data.price
document.getElementById("statut").value = json.data.statut
fetch(`https://dash.mercurycloud.fr:8000/api/users?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json2) {
if (json2.error === false) {
var uuid_list = ``
for (let i = 0; i < json2.users.length; i++) {
uuid_list = uuid_list + `
<option value="${json2.users[i].uuid}">${json2.users[i].mail}</option>
`
}
document.getElementById("uuid-list").innerHTML = uuid_list
document.getElementById("uuid-list").value = json.data.uuid
var logs_table = ``
for (let i=0; i < json.logs.length; i++) {
var username = ""
for (let i = 0; i < json2.users.length; i++) {
if (json.logs[i].uuid == json2.users[i].uuid) {
username = json2.users[i].username
break;
}
}
let timestamp = new Date(+json.logs[i].timestamp);
let date = ("0" + timestamp.getDate()).slice(-2);
let month = ("0" + (timestamp.getMonth() + 1)).slice(-2);
let year = timestamp.getFullYear();
let hours = timestamp.getHours();
let minutes = timestamp.getMinutes();
let seconds = timestamp.getSeconds();
if (seconds < 10) {seconds = "0" + seconds}
if (hours < 10) {hours = "0" + hours}
if (minutes < 10) {minutes = "0" + minutes}
console.log(date + "/" + month + "/" + year + " " + hours + ":" + minutes + ":" + seconds)
logs_table = logs_table + `
document.getElementById("uuid-list").innerHTML = uuid_list
document.getElementById("uuid-list").value = json.data.uuid
var logs_table = ``
for (let i = 0; i < json.logs.length; i++) {
var username = ""
for (let i = 0; i < json2.users.length; i++) {
if (json.logs[i].uuid == json2.users[i].uuid) {
username = json2.users[i].username
break;
}
}
let timestamp = new Date(+json.logs[i].timestamp);
let date = ("0" + timestamp.getDate()).slice(-2);
let month = ("0" + (timestamp.getMonth() + 1)).slice(-2);
let year = timestamp.getFullYear();
let hours = timestamp.getHours();
let minutes = timestamp.getMinutes();
let seconds = timestamp.getSeconds();
if (seconds < 10) { seconds = "0" + seconds }
if (hours < 10) { hours = "0" + hours }
if (minutes < 10) { minutes = "0" + minutes }
logs_table = logs_table + `
<tr>
<td>${date + "/" + month + "/" + year + " " + hours + ":" + minutes + ":" + seconds}</td>
<td>${username}</td>
@@ -75,39 +74,39 @@ if (url.searchParams.get('id')) {
<td>${json.logs[i].action}</td>
</tr>
`
}
document.getElementById("service-logs-table").innerHTML = logs_table
fetch(`https://api.mercurycloud.fr/api/products/products?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json3) {
if (json3.error === false) {
json_products = json3
var products_list = ``
for (let i = 0; i < json3.data.length; i++) {
products_list = products_list + `
}
document.getElementById("service-logs-table").innerHTML = logs_table
fetch(`https://dash.mercurycloud.fr:8000/api/products?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json3) {
if (json3.error === false) {
json_products = json3
var products_list = ``
for (let i = 0; i < json3.data.length; i++) {
products_list = products_list + `
<option value="${json3.data[i].id}">${json3.data[i].name}</option>
`
}
document.getElementById("products").innerHTML = products_list
document.getElementById("products").value = json.data.product_id
}
document.getElementById("products").innerHTML = products_list
document.getElementById("products").value = json.data.product_id
} else {
window.location.replace("/dashboard/errors/error500.html");
}
})
} else {
window.location.replace("/dashboard/errors/error500.html");
}
})
} else {
window.location.replace("/dashboard/errors/error500.html");
}
})
service_id = json.data.id
service_id = json.data.id
}
} else {
window.location.replace("/dashboard/errors/error500.html");
}
} else {
window.location.replace("/dashboard/errors/error500.html");
}
})
})
} else {
window.location.replace("/dashboard/errors/error404.html");
}
@@ -124,7 +123,7 @@ function update_product() {
function save_service() {
var ok = 0
var no = 0
if(document.getElementById("name").value.length > 2) {
if (document.getElementById("name").value.length > 2) {
document.getElementById("name").classList.remove('is-invalid')
document.getElementById("name").classList.add('is-valid')
ok++
@@ -135,7 +134,7 @@ function save_service() {
no++
}
if(document.getElementById("uuid-list").value !=0) {
if (document.getElementById("uuid-list").value != 0) {
document.getElementById("uuid-list").classList.remove('is-invalid')
document.getElementById("uuid-list").classList.add('is-valid')
ok++
@@ -146,7 +145,7 @@ function save_service() {
no++
}
if(document.getElementById("products").value != 0) {
if (document.getElementById("products").value != 0) {
document.getElementById("products").classList.remove('is-invalid')
document.getElementById("products").classList.add('is-valid')
ok++
@@ -157,7 +156,7 @@ function save_service() {
no++
}
if(document.getElementById("statut").value != 0) {
if (document.getElementById("statut").value != 0) {
document.getElementById("statut").classList.remove('is-invalid')
document.getElementById("statut").classList.add('is-valid')
ok++
@@ -170,7 +169,7 @@ function save_service() {
document.getElementById("price").classList.remove('is-valid')
if(ok == 4 && no == 0) {
if (ok == 4 && no == 0) {
body = {
"id": service_id,
"name": document.getElementById("name").value,
@@ -180,7 +179,7 @@ function save_service() {
"statut": document.getElementById("statut").value
}
postData(`https://api.mercurycloud.fr/api/services/service-edit?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
putData(`https://dash.mercurycloud.fr:8000/api/services/${url.searchParams.get("id")}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
if (data.error == false) {
window.location.reload()
} else {
@@ -191,6 +190,6 @@ function save_service() {
location.href = "../errors/error500.html"
}
}
})
})
}
}

View File

@@ -1,6 +1,7 @@
var editor = ace.edit("editor");
editor.setTheme("ace/theme/nord_dark");
editor.session.setMode("ace/mode/yaml");
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
@@ -17,10 +18,11 @@ var term = new Terminal({
var back = [];
var files_data = {};
function load_files(directory) {
document.getElementById("files-explorer").innerHTML =
'<a class="list-group-item list-group-item"><div class="spinner-grow text-secondary" role="status"></div></a>';
fetch(`https://api.mercurycloud.fr/api/services/${url.searchParams.get("id")}/files?uuid=${getCookie("uuid")}&token=${getCookie("token")}&directory=${directory}`)
fetch(`https://dash.mercurycloud.fr:8000/api/services/${url.searchParams.get("id")}/files?uuid=${getCookie("uuid")}&token=${getCookie("token")}&directory=${directory}`)
.then(function (response) {
return response.json();
})
@@ -70,7 +72,7 @@ function load_files(directory) {
</div>`;
} else {
if (json_files.data[i].attributes.mimetype == "inode/directory") {
document.getElementById("files-explorer").innerHTML += `<div onclick="select_file(${directory + "/" + json_files.data[i].attributes.name})" ondblclick="load_filecontent('${directory + "/" + json_files.data[i].attributes.name}', ${i})" class="list-group-item list-group-item-action not-selectable">
document.getElementById("files-explorer").innerHTML += `<div onclick="select_file(${directory + "/" + json_files.data[i].attributes.name})" ondblclick="load_files('${directory + "/" + json_files.data[i].attributes.name}')" class="list-group-item list-group-item-action not-selectable">
<svg width="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.4" d="M16.8843 5.11485H13.9413C13.2081 5.11969 12.512 4.79355 12.0474 4.22751L11.0782 2.88762C10.6214 2.31661 9.9253 1.98894 9.19321 2.00028H7.11261C3.37819 2.00028 2.00001 4.19201 2.00001 7.91884V11.9474C1.99536 12.3904 21.9956 12.3898 21.9969 11.9474V10.7761C22.0147 7.04924 20.6721 5.11485 16.8843 5.11485Z"
fill="currentColor"></path>
@@ -144,6 +146,7 @@ function editor_back() {
}
var file_path = "";
function load_filecontent(path, file_id) {
document.getElementById("files-explorer").innerHTML =
'<a class="list-group-item list-group-item"><div class="spinner-grow text-secondary" role="status"></div></a>';
@@ -193,8 +196,7 @@ function load_filecontent(path, file_id) {
document.getElementById("save-file-btn").classList.remove("disabled");
document.getElementById("file-title").innerHTML =
files_data[file_id].attributes.name;
fetch(
`https://api.mercurycloud.fr/api/services/${url.searchParams.get("id")}files?uuid=${getCookie("uuid")}&token=${getCookie("token")}&path=${path}`)
fetch(`https://dash.mercurycloud.fr:8000/api/services/${url.searchParams.get("id")}/file?uuid=${getCookie("uuid")}&token=${getCookie("token")}&path=${path}`)
.then(function (response) {
return response.text();
})
@@ -219,24 +221,15 @@ function save_file_content() {
"save-filecontent-btn"
).innerHTML = `<span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>`;
body = editor.getValue();
fetch(
`https://api.mercurycloud.fr/api/services/service-savefilecontent?uuid=${getCookie(
"uuid"
)}&token=${getCookie("token")}&id=${url.searchParams.get(
"id"
)}&path=${file_path}`,
{
method: "POST",
body: body,
}
)
fetch(`https://dash.mercurycloud.fr:8000/api/services/${url.searchParams.get("id")}/file?uuid=${getCookie("uuid")}&token=${getCookie("token")}&path=${file_path}`, {
method: "PUT",
body: body,
})
.then(function (response) {
return response.json();
})
.then(function (data) {
document
.getElementById("save-filecontent-btn")
.classList.remove("disabled");
document.getElementById("save-filecontent-btn").classList.remove("disabled");
document.getElementById("save-filecontent-btn").innerHTML = `Enregistrer`;
})
.catch((error) => {
@@ -253,11 +246,7 @@ term.open(document.getElementById("terminal"));
fitAddon.fit();
const url = new URL(window.location.href);
if (url.searchParams.get("id")) {
fetch(
`https://api.mercurycloud.fr/api/services/service-info?uuid=${getCookie(
"uuid"
)}&token=${getCookie("token")}&id=${url.searchParams.get("id")}`
)
fetch(`https://dash.mercurycloud.fr:8000/api/services/${url.searchParams.get("id")}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
@@ -294,12 +283,10 @@ if (url.searchParams.get("id")) {
},
},
series: [
{
name: "CPU",
data: [],
},
],
series: [{
name: "CPU",
data: [],
},],
colors: ["#344ed1"],
xaxis: {
@@ -358,12 +345,10 @@ if (url.searchParams.get("id")) {
},
},
series: [
{
name: "RAM",
data: [],
},
],
series: [{
name: "RAM",
data: [],
},],
colors: ["#d95f18"],
xaxis: {
@@ -422,12 +407,10 @@ if (url.searchParams.get("id")) {
},
},
series: [
{
name: "Disque",
data: [],
},
],
series: [{
name: "Disque",
data: [],
},],
colors: ["#17904b"],
xaxis: {
@@ -486,12 +469,10 @@ if (url.searchParams.get("id")) {
},
},
series: [
{
name: "Réseau",
data: [],
},
],
series: [{
name: "Réseau",
data: [],
},],
colors: ["#ad2d1e"],
xaxis: {
@@ -633,28 +614,11 @@ if (url.searchParams.get("id")) {
100 +
"Go";
document.getElementById("disk-counter").innerHTML =
Math.round((args_parse.disk_bytes / (1024 * 1024 * 1024)) * 100) /
100 +
"Go";
Math.round((args_parse.disk_bytes / (1024 * 1024 * 1024)) * 100) / 100 + "Go";
document.getElementById("net-counter").innerHTML =
(Math.round(
((args_parse.network.rx_bytes + args_parse.network.tx_bytes) /
(1024 * 1024)) *
100
) /
100) *
8 +
"Mb/s";
document.getElementById("disk-counter-span").innerHTML =
Math.round((args_parse.disk_bytes / (1024 * 1024)) * 100) / 100 +
"Mo";
document.getElementById("ram-counter-span").innerHTML =
"sur " +
Math.round(
(args_parse.memory_limit_bytes / (1024 * 1024 * 1024)) * 100
) /
100 +
"Go";
(Math.round(((args_parse.network.rx_bytes + args_parse.network.tx_bytes) / (1024 * 1024)) * 100) / 100) * 8 + "Mb/s";
document.getElementById("disk-counter-span").innerHTML = Math.round((args_parse.disk_bytes / (1024 * 1024)) * 100) / 100 + "Mo";
document.getElementById("ram-counter-span").innerHTML = "sur " + Math.round((args_parse.memory_limit_bytes / (1024 * 1024 * 1024)) * 10) / 10 + "Go";
document.getElementById("net-counter-span").innerHTML = `
<svg xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 20 20"
fill="currentColor">
@@ -662,78 +626,51 @@ if (url.searchParams.get("id")) {
d="M14.707 12.293a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 111.414-1.414L9 14.586V3a1 1 0 012 0v11.586l2.293-2.293a1 1 0 011.414 0z"
clip-rule="evenodd"></path>
</svg>
${(Math.round(
(args_parse.network.rx_bytes / 1024000) *
100
) /
100) *
8
}Mb/s
${(Math.round((args_parse.network.rx_bytes / 1024000) * 100) / 100) * 8}Mb/s
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M5.293 7.707a1 1 0 010-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 01-1.414 1.414L11 5.414V17a1 1 0 11-2 0V5.414L6.707 7.707a1 1 0 01-1.414 0z" clip-rule="evenodd"></path>
</svg>
${(Math.round(
(args_parse.network.tx_bytes / 1024000) *
100
) /
100) *
8
}Mb/s`;
${(Math.round((args_parse.network.tx_bytes / 1024000) * 100) / 100) * 8}Mb/s`;
if (cpu_series.length > 14) {
cpu_series.shift();
}
cpu_series.push(Math.round(args_parse.cpu_absolute * 100) / 100);
cpu_chart.updateSeries([
{
name: "CPU",
data: cpu_series,
},
]);
cpu_chart.updateSeries([{
name: "CPU",
data: cpu_series,
},]);
if (ram_series.length > 14) {
ram_series.shift();
}
ram_series.push(
Math.round((args_parse.memory_bytes / 1024000000) * 100) / 100
Math.round((args_parse.memory_bytes / (1024 * 1024 * 1024)) * 100) / 100 + "Go"
);
ram_chart.updateSeries([
{
name: "RAM",
data: ram_series,
},
]);
ram_chart.updateSeries([{
name: "RAM",
data: ram_series,
},]);
if (disk_series.length > 14) {
disk_series.shift();
}
disk_series.push(
Math.round((args_parse.disk_bytes / 1024000000) * 100) / 100
Math.round((args_parse.disk_bytes / (1024 * 1024 * 1024)) * 100) / 100 + "Go"
);
disk_chart.updateSeries([
{
name: "Disque",
data: disk_series,
},
]);
disk_chart.updateSeries([{
name: "Disque",
data: disk_series,
},]);
if (net_series.length > 14) {
net_series.shift();
}
net_series.push(
(Math.round(
((args_parse.network.rx_bytes + args_parse.network.tx_bytes) /
1024000) *
100
) /
100) *
8
);
net_chart.updateSeries([
{
name: "Réseau",
data: net_series,
},
]);
(Math.round(((args_parse.network.rx_bytes + args_parse.network.tx_bytes) / 1024000) * 100) / 100) * 8);
net_chart.updateSeries([{
name: "Réseau",
data: net_series,
},]);
}
if (data_parse.event == "console output") {
term.writeUtf8(data_parse.args[0] + "\r\n");
@@ -794,8 +731,8 @@ if (url.searchParams.get("id")) {
}
})
.catch((error) => {
// window.location.replace("/dashboard/errors/error500.html")
window.location.replace("/dashboard/errors/error500.html")
});
} else {
window.location.replace("/dashboard/errors/error404.html");
}
}

View File

@@ -15,24 +15,48 @@ async function deleteData(url = '', data = {}) {
return response.json()
}
fetch(`https://api.mercurycloud.fr/api/services?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
fetch(`https://dash.mercurycloud.fr:8000/api/services?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
if (json.error === false) {
list = ``
for (var i = 0; i < json.data.length; i++) {
statut = ''
if (json.data[i].statut == "installing") { statut = '<span class="badge bg-primary">Installation...</span>' }
if (json.data[i].statut == "active") { statut = '<span class="badge bg-success">Actif</span>' }
if (json.data[i].statut == "suspended") { statut = '<span class="badge bg-danger">Suspendu</span>' }
list = list + `
fetch(`https://dash.mercurycloud.fr:8000/api/users?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json2) {
if (json2.error === false) {
fetch(`https://dash.mercurycloud.fr:8000/api/products?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json3) {
if (json3.error === false) {
owner_username = ''
product_name = ''
list = ``
for (var i = 0; i < json.data.length; i++) {
for (let ii = 0; ii < json2.users.length; ii++) {
if (json2.users[ii].uuid == json.data[i].uuid) {
owner_username = json2.users[ii].username
}
}
for (let ii = 0; ii < json3.data.length; ii++) {
if (json3.data[ii].id == json.data[i].product_id) {
product_name = json3.data[ii].name
}
}
statut = ''
if (json.data[i].statut == "installing") { statut = '<span class="badge bg-primary">Installation...</span>' }
if (json.data[i].statut == "active") { statut = '<span class="badge bg-success">Actif</span>' }
if (json.data[i].statut == "suspended") { statut = '<span class="badge bg-danger">Suspendu</span>' }
list = list + `
<tr>
<td>${json.data[i].id}</td>
<td><a href="/dashboard/services/service-game.html?id=${json.data[i].id}">${json.data[i].name}</a></td>
<td>${json.data[i].uuid}</td>
<td>${json.data[i].product_id}</td>
<td>${owner_username}</td>
<td>${product_name}</td>
<td>${json.data[i].price}€</td>
<td>${statut}</td>
<td>
@@ -58,15 +82,23 @@ fetch(`https://api.mercurycloud.fr/api/services?uuid=${getCookie("uuid")}&token=
</div>
</td>
</tr>`
}
document.getElementById("services-table").innerHTML = list
}
document.getElementById("services-table").innerHTML = list
} else {
window.location.replace("/dashboard/errors/error500.html");
}
})
} else {
window.location.replace("/dashboard/errors/error500.html");
}
})
} else {
window.location.replace("/dashboard/errors/error500.html");
}
})
function delete_product(id) {
deleteData(`https://api.mercurycloud.fr/api/services/${id}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`).then(data => {
deleteData(`https://dash.mercurycloud.fr:8000/api/services/${id}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`).then(data => {
console.log(data)
if (data.error == false) {
window.location.reload()

View File

@@ -13,11 +13,9 @@ async function postData(url = '', data = {}) {
function connect() {
let data = {
'mail': document.getElementById("email").value,
'password': document.getElementById("password").value
}
postData('https://api.mercurycloud.fr/api/users/login-user', data).then(data => {
console.log(data)
postData(`https://dash.mercurycloud.fr:8000/api/users/${document.getElementById("email").value}/login`, data).then(data => {
if (data.error == false) {
document.cookie = `uuid=${data.uuid};max-age=604800; path=/;`
document.cookie = `token=${data.token};max-age=604800; path=/;`

View File

@@ -6,30 +6,30 @@ function getCookie(name) {
async function postData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json()
}
fetch(`https://api.mercurycloud.fr/api/roles/roles-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
}).then(function (json) {
var roles_select = `<option selected="" value="0">--</option>`
for (let i = 0; i < json.roles.length; i++) {
roles_select = roles_select + `<option value="${json.roles[i].id}">${json.roles[i].name}</option>`
}
document.getElementById("roles-select").innerHTML = roles_select
})
fetch(`https://dash.mercurycloud.fr:8000/api/roles?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
}).then(function (json) {
var roles_select = `<option selected="" value="0">--</option>`
for (let i = 0; i < json.roles.length; i++) {
roles_select = roles_select + `<option value="${json.roles[i].id}">${json.roles[i].name}</option>`
}
document.getElementById("roles-select").innerHTML = roles_select
})
function create_user() {
var ok = 0
var no = 0
if(document.getElementById("first-name").value.length > 2) {
if (document.getElementById("first-name").value.length > 2) {
document.getElementById("first-name").classList.remove('is-invalid')
document.getElementById("first-name").classList.add('is-valid')
ok++
@@ -40,7 +40,7 @@ function create_user() {
no++
}
if(document.getElementById("roles-select").value != 0) {
if (document.getElementById("roles-select").value != 0) {
document.getElementById("roles-select").classList.remove('is-invalid')
document.getElementById("roles-select").classList.add('is-valid')
ok++
@@ -51,27 +51,11 @@ function create_user() {
no++
}
if(document.getElementById("username-input").value.length > 2) {
fetch(`https://api.mercurycloud.fr/api/users/username-exist?uuid=${getCookie("uuid")}&token=${getCookie("token")}&username=${document.getElementById("username-input").value}`)
.then(function (response) {
return response.json();
})
.then(function (myJson) {
if(myJson.exist == false) {
document.getElementById("username-input").classList.remove('is-invalid')
document.getElementById("username-input").classList.add('is-valid')
document.getElementById("username-toast").innerHTML = ``
ok++
} else {
no++
document.getElementById("username-input").classList.remove('is-valid')
document.getElementById("username-input").classList.add('is-invalid')
document.getElementById("username-input").value = ""
if (myJson.error != true) {
document.getElementById("username-toast").innerHTML = `<div class="toast-body">Le nom d'utilisateur ${document.getElementById("username-input").value} éxiste déja !</div>`
}
}
})
if (document.getElementById("username-input").value.length > 2) {
document.getElementById("username-input").classList.remove('is-invalid')
document.getElementById("username-input").classList.add('is-valid')
document.getElementById("username-toast").innerHTML = ``
ok++
} else {
document.getElementById("username-input").classList.remove('is-valid')
document.getElementById("username-input").classList.add('is-invalid')
@@ -80,7 +64,7 @@ function create_user() {
}
if(document.getElementById("last-name").value.length > 2) {
if (document.getElementById("last-name").value.length > 2) {
document.getElementById("last-name").classList.remove('is-invalid')
document.getElementById("last-name").classList.add('is-valid')
ok++
@@ -92,27 +76,10 @@ function create_user() {
}
if(document.getElementById("mail").value.length > 2) {
fetch(`https://api.mercurycloud.fr/api/users/mail-exist?uuid=${getCookie("uuid")}&token=${getCookie("token")}&mail=${document.getElementById("mail").value}`)
.then(function (response) {
return response.json();
})
.then(function (myJson) {
if(myJson.exist == false) {
document.getElementById("mail").classList.remove('is-invalid')
document.getElementById("mail").classList.add('is-valid')
document.getElementById("mail-toast").innerHTML = ``
ok++
} else {
document.getElementById("mail").classList.remove('is-valid')
document.getElementById("mail").classList.add('is-invalid')
document.getElementById("mail").value = ""
if (myJson.error != true) {
document.getElementById("mail-toast").innerHTML = `<div class="toast-body">L'adresse mail ${document.getElementById("mail").value} est déja utilisé !</div>`
}
no++
}
})
if (document.getElementById("mail").value.length > 2) {
document.getElementById("mail").classList.remove('is-invalid')
document.getElementById("mail").classList.add('is-valid')
document.getElementById("mail-toast").innerHTML = ``
} else {
document.getElementById("mail").classList.remove('is-valid')
document.getElementById("mail").classList.add('is-invalid')
@@ -120,8 +87,8 @@ function create_user() {
no++
}
if(document.getElementById("password").value.length >= 8) {
if (document.getElementById("password").value.length >= 8) {
document.getElementById("password").classList.remove('is-invalid')
document.getElementById("password").classList.add('is-valid')
ok++
@@ -133,7 +100,7 @@ function create_user() {
}
if(document.getElementById("tel").value.length == 12 && document.getElementById("tel").value.match(/[0-9]/gi) != null && document.getElementById("tel").value.includes("+", 0) == true) {
if (document.getElementById("tel").value.length == 12 && document.getElementById("tel").value.match(/[0-9]/gi) != null && document.getElementById("tel").value.includes("+", 0) == true) {
document.getElementById("tel").classList.remove('is-invalid')
document.getElementById("tel").classList.add('is-valid')
ok++
@@ -145,7 +112,7 @@ function create_user() {
}
if(document.getElementById("address-1").value.length > 2) {
if (document.getElementById("address-1").value.length > 2) {
document.getElementById("address-1").classList.remove('is-invalid')
document.getElementById("address-1").classList.add('is-valid')
ok++
@@ -157,7 +124,7 @@ function create_user() {
}
if(document.getElementById("city").value.length > 2) {
if (document.getElementById("city").value.length > 2) {
document.getElementById("city").classList.remove('is-invalid')
document.getElementById("city").classList.add('is-valid')
ok++
@@ -169,7 +136,7 @@ function create_user() {
}
if(document.getElementById("zip").value.length == 5 && /^\d+$/.test(document.getElementById("zip").value) == true) {
if (document.getElementById("zip").value.length == 5 && /^\d+$/.test(document.getElementById("zip").value) == true) {
document.getElementById("zip").classList.remove('is-invalid')
document.getElementById("zip").classList.add('is-valid')
ok++
@@ -181,7 +148,7 @@ function create_user() {
}
if(document.getElementById("country").value > 0) {
if (document.getElementById("country").value > 0) {
document.getElementById("country").classList.remove('is-invalid')
document.getElementById("country").classList.add('is-valid')
ok++
@@ -193,7 +160,7 @@ function create_user() {
}
if(document.getElementById("state").value.length > 2) {
if (document.getElementById("state").value.length > 2) {
document.getElementById("state").classList.remove('is-invalid')
document.getElementById("state").classList.add('is-valid')
ok++
@@ -202,9 +169,10 @@ function create_user() {
document.getElementById("state").classList.add('is-invalid')
document.getElementById("state").value = ""
no++
}
}
console.log("ok : " + ok + " no : " + no)
if(ok == 10 && no == 0) {
if (ok == 11 && no == 0) {
body = {
"username": document.getElementById("username-input").value,
"mail": document.getElementById("mail").value,
@@ -220,18 +188,26 @@ function create_user() {
"country": document.getElementById("country").value,
"state": document.getElementById("state").value
}
postData(`https://api.mercurycloud.fr/api/users/create-user?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
postData(`https://dash.mercurycloud.fr:8000/api/users?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
if (data.error == false) {
window.location.replace("/dashboard/users/users-list.html")
} else {
console.log('[ERROR] Code : ' + data.code + ' Message : ' + data.msg);
if (data.code == 403) {
location.href = "../errors/error403.html"
console.log('[ERROR] Message : ' + data.msg);
if (data.msg == "Mail already used") {
document.getElementById("mail").classList.remove('is-valid')
document.getElementById("mail").classList.add('is-invalid')
document.getElementById("mail").value = ""
document.getElementById("mail-toast").innerHTML = `<div class="toast-body">L'adresse mail ${document.getElementById("mail").value} est déja utilisé !</div>`
} else if (data.msg == "Username already exist") {
document.getElementById("username-input").classList.remove('is-valid')
document.getElementById("username-input").classList.add('is-invalid')
document.getElementById("username-input").value = ""
document.getElementById("username-toast").innerHTML = `<div class="toast-body">Le nom d'utilisateur ${document.getElementById("username-input").value} éxiste déja !</div>`
} else {
location.href = "../errors/error500.html"
}
}
})
})
}
}

View File

@@ -4,13 +4,13 @@ function getCookie(name) {
if (parts.length === 2) return parts.pop().split(';').shift();
}
async function postData(url = '', data = {}) {
async function putData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json()
}
@@ -18,47 +18,46 @@ async function postData(url = '', data = {}) {
var uuid_string = ""
const url = new URL(window.location.href);
if (url.searchParams.get('id')) {
fetch(`https://api.mercurycloud.fr/api/users/user-info?uuid=${getCookie("uuid")}&token=${getCookie("token")}&id=${url.searchParams.get('id')}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
console.log(json)
if (json.error === false) {
if (json.data.uuid == 404) {
window.location.replace("/dashboard/errors/error404.html");
fetch(`https://dash.mercurycloud.fr:8000/api/users/${url.searchParams.get('id')}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
if (json.error === false) {
if (json.data.uuid == 404) {
window.location.replace("/dashboard/errors/error404.html");
} else {
fetch(`https://dash.mercurycloud.fr:8000/api/roles?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
}).then(function (json1) {
var roles_select = `<option selected="" value="0">--</option>`
for (let i = 0; i < json1.roles.length; i++) {
roles_select = roles_select + `<option value="${json1.roles[i].id}">${json1.roles[i].name}</option>`
}
document.getElementById("roles-select").innerHTML = roles_select
document.getElementById('roles-select').value = json.data.role
})
document.getElementById("title").innerHTML = `Mercury Cloud | Edition de ${json.data.username}`
document.getElementById("username_title").innerHTML = `Edition de ${json.data.username}`
document.getElementById('username-input').value = json.data.username
document.getElementById('mail').value = json.data.mail
document.getElementById('password').value = "Q@4%738r$7"
document.getElementById('first-name').value = json.data.first_name
document.getElementById('last-name').value = json.data.last_name
document.getElementById('tel').value = json.data.tel
document.getElementById('address-1').value = json.data.address_1
document.getElementById('address-2').value = json.data.address_2
document.getElementById('city').value = json.data.city
document.getElementById('zip').value = json.data.zip
document.getElementById('country').value = json.data.country
document.getElementById('state').value = json.data.state
uuid_string = json.data.uuid
}
} else {
fetch(`https://api.mercurycloud.fr/api/roles/roles-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
}).then(function (json1) {
var roles_select = `<option selected="" value="0">--</option>`
for (let i = 0; i < json1.roles.length; i++) {
roles_select = roles_select + `<option value="${json1.roles[i].id}">${json1.roles[i].name}</option>`
}
document.getElementById("roles-select").innerHTML = roles_select
document.getElementById('roles-select').value = json.data.role
})
document.getElementById("title").innerHTML = `Mercury Cloud | Edition de ${json.data.username}`
document.getElementById("username_title").innerHTML = `Edition de ${json.data.username}`
document.getElementById('username-input').value = json.data.username
document.getElementById('mail').value = json.data.mail
document.getElementById('password').value = "Q@4%738r$7"
document.getElementById('first-name').value = json.data.first_name
document.getElementById('last-name').value = json.data.last_name
document.getElementById('tel').value = json.data.tel
document.getElementById('address-1').value = json.data.address_1
document.getElementById('address-2').value = json.data.address_2
document.getElementById('city').value = json.data.city
document.getElementById('zip').value = json.data.zip
document.getElementById('country').value = json.data.country
document.getElementById('state').value = json.data.state
uuid_string = json.data.uuid
// window.location.replace("/dashboard/errors/error500.html");
}
} else {
// window.location.replace("/dashboard/errors/error500.html");
}
})
})
} else {
window.location.replace("/dashboard/errors/error404.html");
}
@@ -66,7 +65,7 @@ if (url.searchParams.get('id')) {
function save_user() {
var ok = 0
var no = 0
if(document.getElementById("first-name").value.length > 2) {
if (document.getElementById("first-name").value.length > 2) {
document.getElementById("first-name").classList.remove('is-invalid')
document.getElementById("first-name").classList.add('is-valid')
ok++
@@ -77,7 +76,7 @@ function save_user() {
no++
}
if(document.getElementById("roles-select").value != 0) {
if (document.getElementById("roles-select").value != 0) {
document.getElementById("roles-select").classList.remove('is-invalid')
document.getElementById("roles-select").classList.add('is-valid')
ok++
@@ -88,27 +87,27 @@ function save_user() {
no++
}
if(document.getElementById("username-input").value.length > 2) {
fetch(`https://api.mercurycloud.fr/api/users/username-exist?uuid=${getCookie("uuid")}&token=${getCookie("token")}&username=${document.getElementById("username-input").value}`)
.then(function (response) {
return response.json();
})
.then(function (myJson) {
if(myJson.exist == false) {
document.getElementById("username-input").classList.remove('is-invalid')
document.getElementById("username-input").classList.add('is-valid')
document.getElementById("username-toast").innerHTML = ``
ok++
} else {
no++
document.getElementById("username-input").classList.remove('is-valid')
document.getElementById("username-input").classList.add('is-invalid')
document.getElementById("username-input").value = ""
if (myJson.error != true) {
document.getElementById("username-toast").innerHTML = `<div class="toast-body">Le nom d'utilisateur ${document.getElementById("username-input").value} éxiste déja !</div>`
if (document.getElementById("username-input").value.length > 2) {
fetch(`https://dash.mercurycloud.fr:8000/api/users/username-exist?uuid=${getCookie("uuid")}&token=${getCookie("token")}&username=${document.getElementById("username-input").value}`)
.then(function (response) {
return response.json();
})
.then(function (myJson) {
if (myJson.exist == false) {
document.getElementById("username-input").classList.remove('is-invalid')
document.getElementById("username-input").classList.add('is-valid')
document.getElementById("username-toast").innerHTML = ``
ok++
} else {
no++
document.getElementById("username-input").classList.remove('is-valid')
document.getElementById("username-input").classList.add('is-invalid')
document.getElementById("username-input").value = ""
if (myJson.error != true) {
document.getElementById("username-toast").innerHTML = `<div class="toast-body">Le nom d'utilisateur ${document.getElementById("username-input").value} éxiste déja !</div>`
}
}
}
})
})
} else {
document.getElementById("username-input").classList.remove('is-valid')
document.getElementById("username-input").classList.add('is-invalid')
@@ -117,7 +116,7 @@ function save_user() {
}
if(document.getElementById("last-name").value.length > 2) {
if (document.getElementById("last-name").value.length > 2) {
document.getElementById("last-name").classList.remove('is-invalid')
document.getElementById("last-name").classList.add('is-valid')
ok++
@@ -129,27 +128,27 @@ function save_user() {
}
if(document.getElementById("mail").value.length > 2) {
fetch(`https://api.mercurycloud.fr/api/users/mail-exist?uuid=${getCookie("uuid")}&token=${getCookie("token")}&mail=${document.getElementById("mail").value}`)
.then(function (response) {
return response.json();
})
.then(function (myJson) {
if(myJson.exist == false) {
document.getElementById("mail").classList.remove('is-invalid')
document.getElementById("mail").classList.add('is-valid')
document.getElementById("mail-toast").innerHTML = ``
ok++
} else {
document.getElementById("mail").classList.remove('is-valid')
document.getElementById("mail").classList.add('is-invalid')
document.getElementById("mail").value = ""
if (myJson.error != true) {
document.getElementById("mail-toast").innerHTML = `<div class="toast-body">L'adresse mail ${document.getElementById("mail").value} est déja utilisé !</div>`
if (document.getElementById("mail").value.length > 2) {
fetch(`https://dash.mercurycloud.fr:8000/api/users/mail-exist?uuid=${getCookie("uuid")}&token=${getCookie("token")}&mail=${document.getElementById("mail").value}`)
.then(function (response) {
return response.json();
})
.then(function (myJson) {
if (myJson.exist == false) {
document.getElementById("mail").classList.remove('is-invalid')
document.getElementById("mail").classList.add('is-valid')
document.getElementById("mail-toast").innerHTML = ``
ok++
} else {
document.getElementById("mail").classList.remove('is-valid')
document.getElementById("mail").classList.add('is-invalid')
document.getElementById("mail").value = ""
if (myJson.error != true) {
document.getElementById("mail-toast").innerHTML = `<div class="toast-body">L'adresse mail ${document.getElementById("mail").value} est déja utilisé !</div>`
}
no++
}
no++
}
})
})
} else {
document.getElementById("mail").classList.remove('is-valid')
document.getElementById("mail").classList.add('is-invalid')
@@ -157,8 +156,8 @@ function save_user() {
no++
}
if(document.getElementById("password").value.length >= 8) {
if (document.getElementById("password").value.length >= 8) {
document.getElementById("password").classList.remove('is-invalid')
document.getElementById("password").classList.add('is-valid')
ok++
@@ -170,7 +169,7 @@ function save_user() {
}
if(document.getElementById("tel").value.length == 12 && document.getElementById("tel").value.match(/[0-9]/gi) != null && document.getElementById("tel").value.includes("+", 0) == true) {
if (document.getElementById("tel").value.length == 12 && document.getElementById("tel").value.match(/[0-9]/gi) != null && document.getElementById("tel").value.includes("+", 0) == true) {
document.getElementById("tel").classList.remove('is-invalid')
document.getElementById("tel").classList.add('is-valid')
ok++
@@ -182,7 +181,7 @@ function save_user() {
}
if(document.getElementById("address-1").value.length > 2) {
if (document.getElementById("address-1").value.length > 2) {
document.getElementById("address-1").classList.remove('is-invalid')
document.getElementById("address-1").classList.add('is-valid')
ok++
@@ -194,7 +193,7 @@ function save_user() {
}
if(document.getElementById("city").value.length > 2) {
if (document.getElementById("city").value.length > 2) {
document.getElementById("city").classList.remove('is-invalid')
document.getElementById("city").classList.add('is-valid')
ok++
@@ -206,7 +205,7 @@ function save_user() {
}
if(document.getElementById("zip").value.length == 5 && /^\d+$/.test(document.getElementById("zip").value) == true) {
if (document.getElementById("zip").value.length == 5 && /^\d+$/.test(document.getElementById("zip").value) == true) {
document.getElementById("zip").classList.remove('is-invalid')
document.getElementById("zip").classList.add('is-valid')
ok++
@@ -218,7 +217,7 @@ function save_user() {
}
if(document.getElementById("country").value > 0) {
if (document.getElementById("country").value > 0) {
document.getElementById("country").classList.remove('is-invalid')
document.getElementById("country").classList.add('is-valid')
ok++
@@ -230,7 +229,7 @@ function save_user() {
}
if(document.getElementById("state").value.length > 2) {
if (document.getElementById("state").value.length > 2) {
document.getElementById("state").classList.remove('is-invalid')
document.getElementById("state").classList.add('is-valid')
ok++
@@ -239,11 +238,10 @@ function save_user() {
document.getElementById("state").classList.add('is-invalid')
document.getElementById("state").value = ""
no++
}
}
if(ok == 10 && no == 0) {
if (ok == 10 && no == 0) {
body = {
"uuid": uuid_string,
"username": document.getElementById("username-input").value,
"role": document.getElementById("roles-select").value,
"mail": document.getElementById("mail").value,
@@ -258,7 +256,7 @@ function save_user() {
"country": document.getElementById("country").value,
"state": document.getElementById("state").value
}
postData(`https://api.mercurycloud.fr/api/users/edit-user?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
putData(`https://dash.mercurycloud.fr:8000/api/users/${uuid_string}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, body).then(data => {
if (data.error == false) {
window.location.reload()
} else {
@@ -269,7 +267,7 @@ function save_user() {
location.href = "../errors/error500.html"
}
}
})
})
}
}

View File

@@ -15,20 +15,32 @@ async function deleteData(url = '', data = {}) {
return response.json()
}
fetch(`https://api.mercurycloud.fr/api/users/users-list?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
fetch(`https://dash.mercurycloud.fr:8000/api/users?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json) {
if (json.error === false) {
list = ``
for (var i = 0; i < json.users.length; i++) {
list = list + `
fetch(`https://dash.mercurycloud.fr:8000/api/roles?uuid=${getCookie("uuid")}&token=${getCookie("token")}`)
.then(function (response) {
return response.json();
})
.then(function (json2) {
if (json2.error === false) {
list = ``
role_name = ''
for (let i = 0; i < json.users.length; i++) {
for (let ii = 0; ii < json2.roles.length; ii++) {
if (json2.roles[ii].id == json.users[i].role) {
role_name = json2.roles[ii].name
}
}
list = list + `
<tr>
<td>${json.users[i].uuid}</td>
<td>${json.users[i].username}</td>
<td>${json.users[i].mail}</td>
<td>${json.users[i].role}</td>
<td>${role_name}</td>
<td><span class="badge bg-primary">Actif</span></td>
<td>
<div class="flex align-items-center list-user-action">
@@ -52,16 +64,19 @@ fetch(`https://api.mercurycloud.fr/api/users/users-list?uuid=${getCookie("uuid")
</div>
</td>
</tr>`
}
document.getElementById("users-table").innerHTML = list
}
document.getElementById("users-table").innerHTML = list
} else {
window.location.replace("/dashboard/errors/error500.html");
}
})
} else {
window.location.replace("/dashboard/errors/error500.html");
}
})
function delete_product(uuid) {
deleteData(`https://api.mercurycloud.fr/api/users/delete-user?uuid=${getCookie("uuid")}&token=${getCookie("token")}`, { "user_uuid": uuid }).then(data => {
console.log(data)
deleteData(`https://dash.mercurycloud.fr:8000/api/users/${uuid}?uuid=${getCookie("uuid")}&token=${getCookie("token")}`).then(data => {
if (data.error == false) {
window.location.reload()
} else {

View File

@@ -533,7 +533,7 @@
<div class="form-group">
<label class="form-label" for="statut">Status *</label>
<select id="statut" class="form-select mb-3 shadow-none">
<option value="ative">Actif</option>
<option value="active">Actif</option>
<option value="installing">Installation...</option>
<option value="suspended">Suspendu</option>
</select>

View File

@@ -486,8 +486,8 @@
<tr class="ligth">
<th>ID</th>
<th>Nom</th>
<th>UUID</th>
<th>ID du produit</th>
<th>Propriétaire</th>
<th>Produit</th>
<th>Prix</th>
<th>Statut</th>
<th>Actions</th>

View File

@@ -486,8 +486,8 @@
<tr class="ligth">
<th>ID</th>
<th>Nom</th>
<th>UUID</th>
<th>ID du produit</th>
<th>Propriétaire</th>
<th>Produit</th>
<th>Prix</th>
<th>Statut</th>
<th>Actions</th>