Version 0.4.0 - Ajout des metrics
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Neutral/pipeline/head This commit looks good
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Neutral/pipeline/head This commit looks good
				
			This commit is contained in:
		
							
								
								
									
										25
									
								
								bin/files.js
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								bin/files.js
									
									
									
									
									
								
							@@ -6,7 +6,7 @@ const clog = new LogType("Fichier")
 | 
				
			|||||||
const os = require("os");
 | 
					const os = require("os");
 | 
				
			||||||
const uuid = require('uuid');
 | 
					const uuid = require('uuid');
 | 
				
			||||||
var mime = require('mime-types');
 | 
					var mime = require('mime-types');
 | 
				
			||||||
const { set } = require("../main")
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// check if shared folder exist, if not create it
 | 
					// check if shared folder exist, if not create it
 | 
				
			||||||
if(!fs.existsSync(__glob.SHARED)) {
 | 
					if(!fs.existsSync(__glob.SHARED)) {
 | 
				
			||||||
@@ -230,3 +230,26 @@ module.exports.newFile = function(settings) {
 | 
				
			|||||||
            return "EXIST"
 | 
					            return "EXIST"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports.pasteFile = function(settings) {
 | 
				
			||||||
 | 
					    if(settings.action == "cut") {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            fs.renameSync(settings.file.fileDirectory, settings.newPath + path.sep + settings.name)
 | 
				
			||||||
 | 
					            return "OK"
 | 
				
			||||||
 | 
					        } catch(err) {
 | 
				
			||||||
 | 
					            console.log(err)
 | 
				
			||||||
 | 
					            return "NOT_PERMITTED"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } else if(settings.action == "copy") {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            fs.copyFileSync(settings.file.fileDirectory, settings.newPath + path.sep + settings.name)
 | 
				
			||||||
 | 
					            return "OK"
 | 
				
			||||||
 | 
					        } catch(err) {  
 | 
				
			||||||
 | 
					            console.log(err)    
 | 
				
			||||||
 | 
					            return "NOT_PERMITTED"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										74
									
								
								bin/server-metrics.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								bin/server-metrics.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
				
			|||||||
 | 
					const { LogType } = require("loguix")
 | 
				
			||||||
 | 
					const fs = require("fs")
 | 
				
			||||||
 | 
					const path = require("path")
 | 
				
			||||||
 | 
					const { __glob } = require("./global-variables")
 | 
				
			||||||
 | 
					const clog = new LogType("Serveur Metrics")
 | 
				
			||||||
 | 
					const osutils = require("os-utils")
 | 
				
			||||||
 | 
					const os = require("os")
 | 
				
			||||||
 | 
					const { statfs } = require("fs")
 | 
				
			||||||
 | 
					const config = require("./config")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports.getMetrics = async function(server) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return new Promise((resolve, reject) => {
 | 
				
			||||||
 | 
					        if(server == "Alpha") {
 | 
				
			||||||
 | 
					            var resp = "NULL"
 | 
				
			||||||
 | 
					            const space = statfs("/", (err, stats) => {
 | 
				
			||||||
 | 
					                if (err) {
 | 
				
			||||||
 | 
					                  throw err
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					               
 | 
				
			||||||
 | 
					                osutils.cpuUsage(function(cpuUsage) {   
 | 
				
			||||||
 | 
					                    resp = {
 | 
				
			||||||
 | 
					                        cpu: Math.round(cpuUsage * 1000),
 | 
				
			||||||
 | 
					                        usedram: osutils.totalmem() - osutils.freemem(),
 | 
				
			||||||
 | 
					                        totalram: osutils.totalmem(),
 | 
				
			||||||
 | 
					                        usedisk: stats.blocks - stats.bfree, 
 | 
				
			||||||
 | 
					                        totaldisk: stats.blocks,
 | 
				
			||||||
 | 
					                        name: server
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					                resolve(resp)
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                   
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        } else if(server == "Omega") {
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					            const key = config.getFile().OMEGA_KEY;
 | 
				
			||||||
 | 
					       
 | 
				
			||||||
 | 
					            fetch("http://omega.raphix.fr:4000/metrics?key="+key, {
 | 
				
			||||||
 | 
					                method: "GET",
 | 
				
			||||||
 | 
					                headers: {
 | 
				
			||||||
 | 
					                    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
 | 
				
			||||||
 | 
					                    "Accept-Encoding": "gzip, deflate",
 | 
				
			||||||
 | 
					                    "Accept-Language": "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7",
 | 
				
			||||||
 | 
					                    "Cache-Control": "no-cache",
 | 
				
			||||||
 | 
					                    "Connection": "keep-alive"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					                .then(response => response.json())
 | 
				
			||||||
 | 
					                .then(raw => {
 | 
				
			||||||
 | 
					                    raw.name = server;
 | 
				
			||||||
 | 
					                    resolve(raw);
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					                .catch(error => {
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    reject(error);
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,14 +1,15 @@
 | 
				
			|||||||
const { LogType } = require("loguix")
 | 
					const { LogType } = require("loguix")
 | 
				
			||||||
const fs = require("fs")
 | 
					const fs = require("fs")
 | 
				
			||||||
const path = require("path")
 | 
					const path = require("path")
 | 
				
			||||||
const { __glob } = require("./global-variables")
 | 
					const { __glob } = require("./global-variables.js")
 | 
				
			||||||
const auth = require("./auth")
 | 
					const auth = require("./auth.js")
 | 
				
			||||||
const files = require("./files")
 | 
					const files = require("./files.js")
 | 
				
			||||||
const links = require("./links.js")
 | 
					const links = require("./links.js")
 | 
				
			||||||
const service = require("./services")
 | 
					const service = require("./services.js")
 | 
				
			||||||
const plog = new LogType("Web")
 | 
					const plog = new LogType("Web")
 | 
				
			||||||
const cook = require("cookie")
 | 
					const cook = require("cookie")
 | 
				
			||||||
const http = require("http")
 | 
					const http = require("http")
 | 
				
			||||||
 | 
					const servermetrics = require("./server-metrics.js")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * NOTE INTERNE
 | 
					 * NOTE INTERNE
 | 
				
			||||||
@@ -94,6 +95,11 @@ module.exports.serverIO = function(server) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            })
 | 
					            })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            PostRequest("FX_PASTE", (settings) => {
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                PostAnswer("FX_PASTE", files.pasteFile(settings))
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            } 
 | 
					            } 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if(user.checkPermission("SERVICES")) {
 | 
					            if(user.checkPermission("SERVICES")) {
 | 
				
			||||||
@@ -136,6 +142,15 @@ module.exports.serverIO = function(server) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(user.checkPermission("SERVERS")) {
 | 
				
			||||||
 | 
					                PostRequest("SERVER_GET_METRICS_Alpha", async (settings) => {
 | 
				
			||||||
 | 
					                    PostAnswer("SERVER_GET_METRICS_Alpha", {answer: "OK", metrics: await servermetrics.getMetrics(settings), name: settings});
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					                PostRequest("SERVER_GET_METRICS_Omega", async (settings) => {
 | 
				
			||||||
 | 
					                    PostAnswer("SERVER_GET_METRICS_Omega", {answer: "OK", metrics: await servermetrics.getMetrics(settings), name: settings});
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            socket.on("disconnect", () => {
 | 
					            socket.on("disconnect", () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                plog.log("Déconnexion du panel par '" + user.username + "' avec le socket : " + socket.id)
 | 
					                plog.log("Déconnexion du panel par '" + user.username + "' avec le socket : " + socket.id)
 | 
				
			||||||
							
								
								
									
										2
									
								
								bin/www
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								bin/www
									
									
									
									
									
								
							@@ -20,7 +20,7 @@ wlog.step.init("start_server",  "Démarrage du serveur Express JS")
 | 
				
			|||||||
var app = require('../main');
 | 
					var app = require('../main');
 | 
				
			||||||
var http = require('http');
 | 
					var http = require('http');
 | 
				
			||||||
var config = require("./config")
 | 
					var config = require("./config")
 | 
				
			||||||
var serverIO = require("./server")
 | 
					var serverIO = require("./servers")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Get port from environment and store in Express.
 | 
					 * Get port from environment and store in Express.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										18
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -1,12 +1,12 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "neutral",
 | 
					  "name": "neutral",
 | 
				
			||||||
  "version": "0.2.0",
 | 
					  "version": "0.4.0",
 | 
				
			||||||
  "lockfileVersion": 2,
 | 
					  "lockfileVersion": 2,
 | 
				
			||||||
  "requires": true,
 | 
					  "requires": true,
 | 
				
			||||||
  "packages": {
 | 
					  "packages": {
 | 
				
			||||||
    "": {
 | 
					    "": {
 | 
				
			||||||
      "name": "neutral",
 | 
					      "name": "neutral",
 | 
				
			||||||
      "version": "0.2.0",
 | 
					      "version": "0.4.0",
 | 
				
			||||||
      "license": "ISC",
 | 
					      "license": "ISC",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "cookie-parser": "~1.4.4",
 | 
					        "cookie-parser": "~1.4.4",
 | 
				
			||||||
@@ -17,6 +17,7 @@
 | 
				
			|||||||
        "http-errors": "~1.6.3",
 | 
					        "http-errors": "~1.6.3",
 | 
				
			||||||
        "loguix": "1.4.1",
 | 
					        "loguix": "1.4.1",
 | 
				
			||||||
        "nodemon": "^3.0.1",
 | 
					        "nodemon": "^3.0.1",
 | 
				
			||||||
 | 
					        "os-utils": "^0.0.14",
 | 
				
			||||||
        "serve-favicon": "^2.0.4",
 | 
					        "serve-favicon": "^2.0.4",
 | 
				
			||||||
        "socket.io": "^4.7.2",
 | 
					        "socket.io": "^4.7.2",
 | 
				
			||||||
        "uuid": "^9.0.1"
 | 
					        "uuid": "^9.0.1"
 | 
				
			||||||
@@ -718,6 +719,14 @@
 | 
				
			|||||||
        "node": ">= 0.8"
 | 
					        "node": ">= 0.8"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/os-utils": {
 | 
				
			||||||
 | 
					      "version": "0.0.14",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/os-utils/-/os-utils-0.0.14.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-ajB8csaHLBvJOYsHJkp8YdO2FvlBbf/ZxaYQwXXRDyQ84UoE+uTuLXxqd0shekXMX6Qr/pt/DDyLMRAMsgfWzg==",
 | 
				
			||||||
 | 
					      "engines": {
 | 
				
			||||||
 | 
					        "node": "*"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/parseurl": {
 | 
					    "node_modules/parseurl": {
 | 
				
			||||||
      "version": "1.3.3",
 | 
					      "version": "1.3.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
 | 
				
			||||||
@@ -1635,6 +1644,11 @@
 | 
				
			|||||||
        "ee-first": "1.1.1"
 | 
					        "ee-first": "1.1.1"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "os-utils": {
 | 
				
			||||||
 | 
					      "version": "0.0.14",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/os-utils/-/os-utils-0.0.14.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-ajB8csaHLBvJOYsHJkp8YdO2FvlBbf/ZxaYQwXXRDyQ84UoE+uTuLXxqd0shekXMX6Qr/pt/DDyLMRAMsgfWzg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "parseurl": {
 | 
					    "parseurl": {
 | 
				
			||||||
      "version": "1.3.3",
 | 
					      "version": "1.3.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "neutral",
 | 
					  "name": "neutral",
 | 
				
			||||||
  "version": "0.3.4",
 | 
					  "version": "0.4.0",
 | 
				
			||||||
  "description": "Panel d'administration de Raphix",
 | 
					  "description": "Panel d'administration de Raphix",
 | 
				
			||||||
  "main": "index.js",
 | 
					  "main": "index.js",
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
@@ -25,10 +25,11 @@
 | 
				
			|||||||
    "debug": "~2.6.9",
 | 
					    "debug": "~2.6.9",
 | 
				
			||||||
    "ejs": "~2.6.1",
 | 
					    "ejs": "~2.6.1",
 | 
				
			||||||
    "express": "~4.16.1",
 | 
					    "express": "~4.16.1",
 | 
				
			||||||
    "serve-favicon": "^2.0.4",
 | 
					 | 
				
			||||||
    "http-errors": "~1.6.3",
 | 
					    "http-errors": "~1.6.3",
 | 
				
			||||||
    "loguix": "1.4.1",
 | 
					    "loguix": "1.4.1",
 | 
				
			||||||
    "nodemon": "^3.0.1",
 | 
					    "nodemon": "^3.0.1",
 | 
				
			||||||
 | 
					    "os-utils": "^0.0.14",
 | 
				
			||||||
 | 
					    "serve-favicon": "^2.0.4",
 | 
				
			||||||
    "socket.io": "^4.7.2",
 | 
					    "socket.io": "^4.7.2",
 | 
				
			||||||
    "uuid": "^9.0.1"
 | 
					    "uuid": "^9.0.1"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,19 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					var xMousePos = null;
 | 
				
			||||||
 | 
					var yMousePos = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Get Document ID
 | 
					document.onmousemove = function(e) {
 | 
				
			||||||
 | 
					  xMousePos = e.clientX + window.scrollX;
 | 
				
			||||||
 | 
					  yMousePos = e.clientY + window.scrollY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					document.oncontextmenu = function(e) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    xMousePos = e.clientX + window.scrollX;
 | 
				
			||||||
 | 
					    yMousePos = e.clientY + window.scrollY;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Récupère depuis le document l'identifiant de l'élément
 | 
					 * Récupère depuis le document l'identifiant de l'élément
 | 
				
			||||||
@@ -13,10 +25,50 @@ function getID(id) {
 | 
				
			|||||||
    return document.getElementById(id)
 | 
					    return document.getElementById(id)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @param {Date} GetDate 
 | 
				
			||||||
 | 
					 * @returns 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function getFormattedDate(GetDate) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const date = new Date(GetDate)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var gmonth = date.getMonth() + 1
 | 
				
			||||||
 | 
					    var gday = date.getDate()
 | 
				
			||||||
 | 
					    var gHour = date.getHours()
 | 
				
			||||||
 | 
					    var gMinute = date.getMinutes()
 | 
				
			||||||
 | 
					    var gSecondes = date.getSeconds()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(date.getMonth() + 1 < 10) {
 | 
				
			||||||
 | 
					        gmonth = "0" + (date.getMonth() + 1)
 | 
				
			||||||
 | 
					    } 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(date.getDate() + 1 <= 10) {
 | 
				
			||||||
 | 
					        gday = "0" + date.getDate()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(date.getHours() + 1 <= 10) {
 | 
				
			||||||
 | 
					        gHour = "0" + date.getHours()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(date.getMinutes() + 1 <= 10) {
 | 
				
			||||||
 | 
					        gMinute = "0" + date.getMinutes()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(date.getSeconds() + 1 <= 10) {
 | 
				
			||||||
 | 
					        gSecondes = "0" + date.getSeconds()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return gday + "/" + gmonth + "/" + date.getFullYear()  + " - " + gHour + ":" + gMinute
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Permet de faire une pop-up automatique
 | 
					 * Permet de faire une pop-up automatique
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
class InfoPop {
 | 
					class TextResponse {
 | 
				
			||||||
    constructor(name) {
 | 
					    constructor(name) {
 | 
				
			||||||
        this.name = name
 | 
					        this.name = name
 | 
				
			||||||
        this.element = getID(this.name)
 | 
					        this.element = getID(this.name)
 | 
				
			||||||
@@ -54,38 +106,30 @@ class InfoPop {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const viewsAccessible = new Map()
 | 
					const AllViews = new Map()
 | 
				
			||||||
 | 
					 | 
				
			||||||
var xMousePos = null;
 | 
					 | 
				
			||||||
var yMousePos = null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
document.onmousemove = function(e) {
 | 
					 | 
				
			||||||
  xMousePos = e.clientX + window.scrollX;
 | 
					 | 
				
			||||||
  yMousePos = e.clientY + window.scrollY;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
document.oncontextmenu = function(e) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    xMousePos = e.clientX + window.scrollX;
 | 
					 | 
				
			||||||
    yMousePos = e.clientY + window.scrollY;
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var zIndex = 5
 | 
					var zIndex = 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Permet de créer une fenêtre
 | 
				
			||||||
 | 
					 * @param {object} properties Propriétés de la fenêtre
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
class ViewWindow {
 | 
					class ViewWindow {
 | 
				
			||||||
    ViewHTML = null
 | 
					    ViewHTML = null
 | 
				
			||||||
 | 
					    ViewWindowDiv
 | 
				
			||||||
    ViewProperties = null
 | 
					    ViewProperties = null
 | 
				
			||||||
    ViewSpanInteger = null
 | 
					    ViewSpanInteger = null
 | 
				
			||||||
    ViewPopupSpanInteger = null
 | 
					    ViewPopupSpanInteger = null
 | 
				
			||||||
    ViewPopupHTML = null
 | 
					    ViewPopupHTML = null
 | 
				
			||||||
    ViewPopupTitle = null
 | 
					    ViewPopupTitle = null
 | 
				
			||||||
 | 
					    ViewItem = new ViewItem(this)
 | 
				
			||||||
    constructor(properties) {
 | 
					    constructor(properties) {
 | 
				
			||||||
        if(!viewsAccessible.has(properties.title)) {
 | 
					        if(!AllViews.has(properties.title)) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            this.ViewProperties = properties
 | 
					            this.ViewProperties = properties
 | 
				
			||||||
            viewsAccessible.set(properties.title, true)
 | 
					            AllViews.set(properties.title, true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            this.ViewHTML = `
 | 
					            this.ViewHTML = `
 | 
				
			||||||
                <div draggable="true" id='${properties.title}_window' style='width: ${properties.width}; height: ${properties.height}' class='view-window'>
 | 
					                <div draggable="true" id='${properties.title}_window' style='width: ${properties.width}; height: ${properties.height}' class='view-window'>
 | 
				
			||||||
@@ -93,8 +137,12 @@ class ViewWindow {
 | 
				
			|||||||
                    <div id='${properties.title}_header' class='view-window-header'>
 | 
					                    <div id='${properties.title}_header' class='view-window-header'>
 | 
				
			||||||
                    <span style='width: 40px'></span>
 | 
					                    <span style='width: 40px'></span>
 | 
				
			||||||
                    <p>${properties.title}</p>
 | 
					                    <p>${properties.title}</p>
 | 
				
			||||||
 | 
					                    <div class='view-closediv'>
 | 
				
			||||||
 | 
					                    <span id='${properties.title}_reduce' class='btn-cover'><i class="fa-solid fa-window-minimize"></i></span>
 | 
				
			||||||
 | 
					                    <span id='${properties.title}_minimize' class='btn-cover'><i class="fa-solid fa-window-maximize"></i></span>
 | 
				
			||||||
                    <span id='${properties.title}_close' class='view-close'><i class='fa fa-xmark'></i></span>
 | 
					                    <span id='${properties.title}_close' class='view-close'><i class='fa fa-xmark'></i></span>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
                    <div id='${properties.title}_content' class='view-window-content'>
 | 
					                    <div id='${properties.title}_content' class='view-window-content'>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                    <div id='${properties.title}_popupDiv'></div>
 | 
					                    <div id='${properties.title}_popupDiv'></div>
 | 
				
			||||||
@@ -105,15 +153,49 @@ class ViewWindow {
 | 
				
			|||||||
            document.body.appendChild(this.ViewSpanInteger);
 | 
					            document.body.appendChild(this.ViewSpanInteger);
 | 
				
			||||||
            this.ViewSpanInteger.outerHTML = this.ViewHTML
 | 
					            this.ViewSpanInteger.outerHTML = this.ViewHTML
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const header = document.getElementById(properties.title + "_header")
 | 
				
			||||||
 | 
					            const windowDiv  = document.getElementById(properties.title + "_window")
 | 
				
			||||||
 | 
					            this.ViewWindowDiv = windowDiv
 | 
				
			||||||
            const closeWindow = document.getElementById(properties.title + "_close")
 | 
					            const closeWindow = document.getElementById(properties.title + "_close")
 | 
				
			||||||
 | 
					            const minimizeWindow = document.getElementById(properties.title + "_minimize")
 | 
				
			||||||
 | 
					            const reduceWindow = document.getElementById(properties.title + "_reduce")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            closeWindow.addEventListener("click", () => {
 | 
					            closeWindow.addEventListener("click", () => {
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
                this.destroy()
 | 
					                this.destroy()
 | 
				
			||||||
              
 | 
					              
 | 
				
			||||||
            })
 | 
					            })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const header = document.getElementById(properties.title + "_header")
 | 
					            reduceWindow.addEventListener("click", () => {
 | 
				
			||||||
 | 
					                windowDiv.style.display = "none"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            minimizeWindow.addEventListener("click", () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                const windowDiv  = document.getElementById(properties.title + "_window")
 | 
					                const windowDiv  = document.getElementById(properties.title + "_window")
 | 
				
			||||||
 | 
					                const contentDiv = document.getElementById(properties.title + "_content")
 | 
				
			||||||
 | 
					                const minimizeIcon = document.getElementById(properties.title + "_minimize").children[0]
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					                if(windowDiv.classList.contains("minimized")) {
 | 
				
			||||||
 | 
					                    windowDiv.classList.remove("minimized")
 | 
				
			||||||
 | 
					                    contentDiv.style.display = "unset"
 | 
				
			||||||
 | 
					                    windowDiv.style.backgroundColor = "#605e58c1"
 | 
				
			||||||
 | 
					                    minimizeIcon.classList.remove("fa-window-restore")
 | 
				
			||||||
 | 
					                    minimizeIcon.classList.add("fa-window-maximize")
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    windowDiv.classList.add("minimized")
 | 
				
			||||||
 | 
					                    contentDiv.style.display = "none"
 | 
				
			||||||
 | 
					                    windowDiv.style.backgroundColor = "transparent"
 | 
				
			||||||
 | 
					                    minimizeIcon.classList.remove("fa-window-maximize")
 | 
				
			||||||
 | 
					                    minimizeIcon.classList.add("fa-window-restore")
 | 
				
			||||||
 | 
					                    this.destroyPopup()
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
            let isDragging = false;
 | 
					            let isDragging = false;
 | 
				
			||||||
            let offsetX, offsetY;
 | 
					            let offsetX, offsetY;
 | 
				
			||||||
@@ -160,12 +242,15 @@ class ViewWindow {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.ViewItem.show()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    destroy() {
 | 
					    destroy() {
 | 
				
			||||||
        const win = getID(`${this.ViewProperties.title}_window`)
 | 
					        const win = getID(`${this.ViewProperties.title}_window`)
 | 
				
			||||||
        win.outerHTML = " "
 | 
					        win.outerHTML = " "
 | 
				
			||||||
        viewsAccessible.delete(this.ViewProperties.title)
 | 
					        AllViews.delete(this.ViewProperties.title)
 | 
				
			||||||
 | 
					        this.ViewItem.hide()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    setContent(text) {
 | 
					    setContent(text) {
 | 
				
			||||||
@@ -226,6 +311,9 @@ class ViewWindow {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    destroyPopup() {
 | 
					    destroyPopup() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const popup = getID(this.ViewPopupTitle + "_popup")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(popup) {
 | 
				
			||||||
            const contentDiv = getID(this.ViewProperties.title + "_content")
 | 
					            const contentDiv = getID(this.ViewProperties.title + "_content")
 | 
				
			||||||
            for(var child of contentDiv.children) {
 | 
					            for(var child of contentDiv.children) {
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@@ -233,39 +321,92 @@ class ViewWindow {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            contentDiv.classList.remove("blur")
 | 
					            contentDiv.classList.remove("blur")
 | 
				
			||||||
       
 | 
					       
 | 
				
			||||||
        const popup = getID(this.ViewPopupTitle + "_popup")
 | 
					        
 | 
				
			||||||
            popup.outerHTML = ""
 | 
					            popup.outerHTML = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
     
 | 
					     
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function createView(viewType) {
 | 
					}
 | 
				
			||||||
    if(viewType == 'files_explorer') {
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        generateFileExplorerView()
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var AllComponents = new Array()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Permet de créer un composant de vue
 | 
				
			||||||
 | 
					 * @param {object} properties Propriétés du composant de vue
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class ViewComponent {
 | 
				
			||||||
 | 
					    name;
 | 
				
			||||||
 | 
					    icon;
 | 
				
			||||||
 | 
					    permission;
 | 
				
			||||||
 | 
					    window;
 | 
				
			||||||
 | 
					    constructor (properties) {
 | 
				
			||||||
 | 
					        this.name = properties.name
 | 
				
			||||||
 | 
					        this.icon = properties.icon
 | 
				
			||||||
 | 
					        this.permission = properties.permission
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        AllComponents.push(this)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    inject(array) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        array.push(`<div id='${this.name}' class='view'>
 | 
				
			||||||
 | 
					        <span class='view-image'><i class='${this.icon}'></i></span>
 | 
				
			||||||
 | 
					        <p class='view-text'>${this.name}</p>
 | 
				
			||||||
 | 
					        </div>`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
       
 | 
					       
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if(viewType == 'service') {
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        generateServiceView()
 | 
					    createWindow(functionToExecute) {
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        this.window = functionToExecute
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if(viewType == "links") {
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        generateLinksView()
 | 
					    bindView() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const component = getID(this.name)
 | 
				
			||||||
 | 
					        if(component) {
 | 
				
			||||||
 | 
					            component.addEventListener("click", () => {
 | 
				
			||||||
 | 
					                console.log(component)
 | 
				
			||||||
 | 
					                if(this.window) {
 | 
				
			||||||
 | 
					                    this.window()
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    forceWindow() {
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
 | 
					            if(this.window) {
 | 
				
			||||||
 | 
					                this.window()
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Permet de créer un menu déroulant
 | 
				
			||||||
 | 
					 * @param {object} properties Propriétés du menu déroulant
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var ActualDroppableMenu = null
 | 
				
			||||||
class DroppableMenu {
 | 
					class DroppableMenu {
 | 
				
			||||||
    options = new Array()
 | 
					    options = new Array()
 | 
				
			||||||
    id = null
 | 
					    id = null
 | 
				
			||||||
    DMSpanInteger = null
 | 
					    DMSpanInteger = null
 | 
				
			||||||
    constructor(properties) {
 | 
					    #enableHide = false
 | 
				
			||||||
 | 
					    constructor() {
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
        this.id = properties.id
 | 
					        this.id = Math.random().toString(36).substring(7)
 | 
				
			||||||
        this.options.push(`<div id='dm-${this.id}' class='dm-menu'>`)
 | 
					        this.options.push(`<div id='dm-${this.id}' class='dm-menu'>`)
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -277,13 +418,18 @@ class DroppableMenu {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    show() {
 | 
					    show() {
 | 
				
			||||||
       
 | 
					            console.log("DROPPABLE MENU - " + this.id)
 | 
				
			||||||
 | 
					            if(ActualDroppableMenu) {
 | 
				
			||||||
 | 
					                ActualDroppableMenu.hide()
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            ActualDroppableMenu = this
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            this.options.push(`</div>`)
 | 
					            this.options.push(`</div>`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if(xMousePos && yMousePos) {
 | 
					            if(xMousePos && yMousePos) {
 | 
				
			||||||
             
 | 
					             
 | 
				
			||||||
                this.DMSpanInteger = document.createElement("span")
 | 
					                this.DMSpanInteger = document.createElement("span")
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
                document.body.appendChild(this.DMSpanInteger);
 | 
					                document.body.appendChild(this.DMSpanInteger);
 | 
				
			||||||
                this.DMSpanInteger.outerHTML = this.options.join('')
 | 
					                this.DMSpanInteger.outerHTML = this.options.join('')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -292,19 +438,18 @@ class DroppableMenu {
 | 
				
			|||||||
                menu.style.zIndex = zIndex + 2
 | 
					                menu.style.zIndex = zIndex + 2
 | 
				
			||||||
                zIndex+=1
 | 
					                zIndex+=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
                menu.style.left = (xMousePos - 40) + "px" 
 | 
					                menu.style.left = (xMousePos - 40) + "px" 
 | 
				
			||||||
                menu.style.top = (yMousePos - 40) + "px"
 | 
					                menu.style.top = (yMousePos - 40) + "px"
 | 
				
			||||||
              
 | 
					              
 | 
				
			||||||
                menu.addEventListener('mouseleave', () => {
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
                    menu.outerHTML = ""
 | 
					 | 
				
			||||||
                 
 | 
					 | 
				
			||||||
                })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
 | 
					            this.#enableHide = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            document.addEventListener("click", () => {
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					                this.hide()
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
           
 | 
					           
 | 
				
			||||||
          
 | 
					          
 | 
				
			||||||
         
 | 
					         
 | 
				
			||||||
@@ -318,43 +463,329 @@ class DroppableMenu {
 | 
				
			|||||||
    hide() {
 | 
					    hide() {
 | 
				
			||||||
       
 | 
					       
 | 
				
			||||||
        const menu = getID(`dm-${this.id}`)
 | 
					        const menu = getID(`dm-${this.id}`)
 | 
				
			||||||
 | 
					        if(menu) {
 | 
				
			||||||
            menu.outerHTML = ""
 | 
					            menu.outerHTML = ""
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Permet de créer un composant de type "Serveur"
 | 
				
			||||||
function getFormattedDate(GetDate) {
 | 
					 */
 | 
				
			||||||
 | 
					class Server {
 | 
				
			||||||
    const date = new Date(GetDate)
 | 
					    constructor(properties) {
 | 
				
			||||||
 | 
					        this.name = properties.name
 | 
				
			||||||
    var gmonth = date.getMonth() + 1
 | 
					        this.description = properties.description
 | 
				
			||||||
    var gday = date.getDate()
 | 
					        this.icon = properties.icon
 | 
				
			||||||
    var gHour = date.getHours()
 | 
					 | 
				
			||||||
    var gMinute = date.getMinutes()
 | 
					 | 
				
			||||||
    var gSecondes = date.getSeconds()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if(date.getMonth() + 1 < 10) {
 | 
					 | 
				
			||||||
        gmonth = "0" + (date.getMonth() + 1)
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(date.getDate() + 1 <= 10) {
 | 
					    generateHTML() {
 | 
				
			||||||
        gday = "0" + date.getDate()
 | 
					        return `
 | 
				
			||||||
 | 
					        <div class="servers-box">
 | 
				
			||||||
 | 
					            <div class="servers-box-title">
 | 
				
			||||||
 | 
					                <div class='servers-box-title-info'>
 | 
				
			||||||
 | 
					                    <i class='${this.icon}'></i>
 | 
				
			||||||
 | 
					                    <p>${this.name}</p>
 | 
				
			||||||
 | 
					                   
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <p style='font-size: 12px;'>${this.description}</p>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="servers-box-content">
 | 
				
			||||||
 | 
					                <div class='servers-metrics'>
 | 
				
			||||||
 | 
					                      <div class='servers-metrics-box'>
 | 
				
			||||||
 | 
					                            <div>
 | 
				
			||||||
 | 
					                            <i class='fa-solid fa-memory'></i>
 | 
				
			||||||
 | 
					                            <p>RAM</p>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            <p id='${this.name}_ram'>-- Mo / -- Mo</p>
 | 
				
			||||||
 | 
					                      </div>
 | 
				
			||||||
 | 
					                      <div class='servers-metrics-box'>
 | 
				
			||||||
 | 
					                            <div>
 | 
				
			||||||
 | 
					                            <i class='fa-solid fa-microchip'></i>   
 | 
				
			||||||
 | 
					                            <p>CPU</p>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            <p id='${this.name}_cpu'>---%</p>
 | 
				
			||||||
 | 
					                      </div>
 | 
				
			||||||
 | 
					                      <div class='servers-metrics-box'>
 | 
				
			||||||
 | 
					                            <div>
 | 
				
			||||||
 | 
					                            <i class='fa-solid fa-hdd'></i>
 | 
				
			||||||
 | 
					                            <p>DISK</p>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            <p id='${this.name}_disk'>-- Go / -- Go</p>
 | 
				
			||||||
 | 
					                      </div>
 | 
				
			||||||
 | 
					                 </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        `
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(date.getHours() + 1 <= 10) {
 | 
					
 | 
				
			||||||
        gHour = "0" + date.getHours()
 | 
					    loadScript() {
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        const ramSpan = getID(`${this.name}_ram`)
 | 
				
			||||||
 | 
					        const cpuSpan = getID(`${this.name}_cpu`)
 | 
				
			||||||
 | 
					        const diskSpan = getID(`${this.name}_disk`)
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					       
 | 
				
			||||||
 | 
					        setInterval(() => {  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(getID(`${this.name}_ram`)) {
 | 
				
			||||||
 | 
					           
 | 
				
			||||||
 | 
					                const request = post(`SERVER_GET_METRICS_` + this.name, this.name ) 
 | 
				
			||||||
 | 
					                console.log(this.name)
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					                request.then((answer) => {
 | 
				
			||||||
 | 
					                    console.log(answer)
 | 
				
			||||||
 | 
					                    console.log(this.name)
 | 
				
			||||||
 | 
					                    //Transform all metrics in mb to answer.metrics to Go or %
 | 
				
			||||||
 | 
					                    answer.metrics.usedram = Math.round(answer.metrics.usedram)
 | 
				
			||||||
 | 
					                    answer.metrics.totalram = Math.round(answer.metrics.totalram)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    //Transform all metrics in blocks to Go
 | 
				
			||||||
 | 
					                    answer.metrics.usedisk = Math.round((answer.metrics.usedisk * 3.814697265625) / 1000000) 
 | 
				
			||||||
 | 
					                    answer.metrics.totaldisk = Math.round((answer.metrics.totaldisk * 3.814697265625) / 1000000) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if(answer.metrics.name == this.name) {
 | 
				
			||||||
 | 
					                        ramSpan.innerHTML = `${answer.metrics.usedram} Mo / ${answer.metrics.totalram} Mo`
 | 
				
			||||||
 | 
					                        cpuSpan.innerHTML = answer.metrics.cpu + "%"
 | 
				
			||||||
 | 
					                        diskSpan.innerHTML = `${answer.metrics.usedisk} Go / ${answer.metrics.totaldisk} Go`
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                                
 | 
					                                
 | 
				
			||||||
    if(date.getMinutes() + 1 <= 10) {
 | 
					                }) 
 | 
				
			||||||
        gMinute = "0" + date.getMinutes()
 | 
					 | 
				
			||||||
            } 
 | 
					            } 
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    if(date.getSeconds() + 1 <= 10) {
 | 
					
 | 
				
			||||||
        gSecondes = "0" + date.getSeconds()
 | 
					  
 | 
				
			||||||
 | 
					        }, 1000)
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return gday + "/" + gmonth + "/" + date.getFullYear()  + " - " + gHour + ":" + gMinute
 | 
					/**
 | 
				
			||||||
 | 
					 * Créer un composant de vue de type "Service"
 | 
				
			||||||
 | 
					 * @param {object} properties Propriétés du composant de vue
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class Service {
 | 
				
			||||||
 | 
					    name = null
 | 
				
			||||||
 | 
					    description = null
 | 
				
			||||||
 | 
					    icon = null
 | 
				
			||||||
 | 
					    url = null
 | 
				
			||||||
 | 
					    canAccess = false
 | 
				
			||||||
 | 
					    isOnline  = false
 | 
				
			||||||
 | 
					    constructor(properties) {
 | 
				
			||||||
 | 
					        this.name = properties.name
 | 
				
			||||||
 | 
					        this.description = properties.description
 | 
				
			||||||
 | 
					        this.icon = properties.icon
 | 
				
			||||||
 | 
					        this.url = properties.url
 | 
				
			||||||
 | 
					        this.canAccess = properties.canAccess
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    generateHTML() {
 | 
				
			||||||
 | 
					        return `
 | 
				
			||||||
 | 
					        <div class="sv">
 | 
				
			||||||
 | 
					            <div class='sv-info'>
 | 
				
			||||||
 | 
					                <img class="sv-icon" src="${this.icon}" alt="${this.name}">
 | 
				
			||||||
 | 
					                <div>
 | 
				
			||||||
 | 
					                    <h1>${this.name}</h1>
 | 
				
			||||||
 | 
					                    <p>${this.description}</p>
 | 
				
			||||||
 | 
					                    <p>Etat : <span id='${this.name}_status' class="sv-status">Vérification en cours ...</span></p>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            <div class="sv-actions">
 | 
				
			||||||
 | 
					                ${this.canAccess ? `<a href="${this.url}" target="_blank"><button class="btn green"><span>Accéder au service</span></button></a>` : ""}
 | 
				
			||||||
 | 
					                <button id='${this.name}_svpower' class='btn yellow'n><span>Options d'alimentation<span></button>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        `
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    loadScript() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return new Promise((resolve, reject) => {
 | 
				
			||||||
 | 
					            const statusSpan = getID(`${this.name}_status`)
 | 
				
			||||||
 | 
					            const request = post(`SV_GET_SERVICE_STATUS`, this.url) 
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            request.then((answer) => {
 | 
				
			||||||
 | 
					                if(answer.name == this.url) {
 | 
				
			||||||
 | 
					                    if(answer.answer == "ONLINE") {
 | 
				
			||||||
 | 
					                        statusSpan.innerHTML = '<span style="font-size: 12px;"><i class="fa-solid fa-circle green"></i> En ligne</span>'
 | 
				
			||||||
 | 
					                        this.isOnline  = true
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        statusSpan.innerHTML = '<span style="font-size: 12px;"><i class="fa-solid fa-circle red"></i> Hors ligne</span>'
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    resolve("LOADED")
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const powerButton = getID(`${this.name}_svpower`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Make a popup of View to select if you want to start, stop or restart the service by doing a request
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            powerButton.addEventListener("click", () => {
 | 
				
			||||||
 | 
					                View.createPopup({
 | 
				
			||||||
 | 
					                    title: `<i class='fa-solid fa-power-off'></i> Gestion de l'alimentation du service`,
 | 
				
			||||||
 | 
					                    content: `
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    <p class='sv-power-select'>${this.name}</p>
 | 
				
			||||||
 | 
					                    <p id='sv-power-info'></p>
 | 
				
			||||||
 | 
					                    <div class="sv-power">
 | 
				
			||||||
 | 
					                        <button id="${this.name}_start" class="btn green"><span>Démarrer</span></button>
 | 
				
			||||||
 | 
					                        <button id="${this.name}_restart" class="btn yellow"><span>Redémarrer</span></button>
 | 
				
			||||||
 | 
					                        <button id="${this.name}_stop" class="btn red"><span> Arrêter</span></button>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    `
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                const startButton = getID(`${this.name}_start`)
 | 
				
			||||||
 | 
					                const stopButton = getID(`${this.name}_stop`)
 | 
				
			||||||
 | 
					                const restartButton = getID(`${this.name}_restart`)
 | 
				
			||||||
 | 
					                const info = new InfoPop("sv-power-info")
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if(this.isOnline) {
 | 
				
			||||||
 | 
					                    startButton.style.display = "none"
 | 
				
			||||||
 | 
					                    info.info("Verifiez que le service n'est pas utilisé par quelqu'un d'autre avant de le redémarrer ou de l'arrêter")
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    stopButton.style.display = "none"
 | 
				
			||||||
 | 
					                    restartButton.style.display = "none"
 | 
				
			||||||
 | 
					                    info.info("Si le service ne démarre pas, vérifiez l'intégrité du service")
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                startButton.addEventListener("click", () => {
 | 
				
			||||||
 | 
					                    const request = post(`SV_START_SERVICE`, this.url) 
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    request.then((answer) => {
 | 
				
			||||||
 | 
					                        if(answer.answer == "OK") {
 | 
				
			||||||
 | 
					                            statusSpan.innerHTML = '<span style="font-size: 12px;"><i class="fa-solid fa-circle green"></i> En ligne</span>'
 | 
				
			||||||
 | 
					                            View.destroyPopup("`<i class='fa-solid fa-power-off'></i> Gestion de l'alimentation du service`")
 | 
				
			||||||
 | 
					                            this.isOnline  = true
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            info.err("Impossible de démarrer le service")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                stopButton.addEventListener("click", () => {
 | 
				
			||||||
 | 
					                    const request = post(`SV_STOP_SERVICE`, this.url) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    request.then((answer) => {
 | 
				
			||||||
 | 
					                        if(answer.answer == "OK") {
 | 
				
			||||||
 | 
					                            statusSpan.innerHTML = '<span style="font-size: 12px;"><i class="fa-solid fa-circle red"></i> Hors ligne</span>'
 | 
				
			||||||
 | 
					                            this.isOnline  = false
 | 
				
			||||||
 | 
					                            View.destroyPopup("`<i class='fa-solid fa-power-off'></i> Gestion de l'alimentation du service`")
 | 
				
			||||||
 | 
					                          
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            info.err("Impossible d'arrêter le service")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                restartButton.addEventListener("click", () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    console.log("RESTART")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    const request = post(`SV_RESTART_SERVICE`, this.url) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    request.then((answer) => {
 | 
				
			||||||
 | 
					                        if(answer.answer == "OK") {
 | 
				
			||||||
 | 
					                            statusSpan.innerHTML = '<span style="font-size: 12px;"><i class="fa-solid fa-circle green"></i> En ligne</span>'
 | 
				
			||||||
 | 
					                            View.destroyPopup("`<i class='fa-solid fa-power-off'></i> Gestion de l'alimentation du service`")
 | 
				
			||||||
 | 
					                            this.isOnline  = true
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            info.err("Impossible de redémarrer le service")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					     })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Permet de créer un item de la barre des tâches
 | 
				
			||||||
 | 
					 * @param {ViewWindow} window ViewWindow associé à l'item
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class ViewItem {
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     * @param {ViewWindow} window 
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    constructor(window) {
 | 
				
			||||||
 | 
					        this.window = window
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    show() {
 | 
				
			||||||
 | 
					        const viewItems = getID("views-items")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const item = document.createElement("div")
 | 
				
			||||||
 | 
					        item.id = `${this.window.ViewProperties.title}_item`
 | 
				
			||||||
 | 
					        item.classList.add("view-item")
 | 
				
			||||||
 | 
					        item.innerHTML = this.window.ViewProperties.title
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        viewItems.appendChild(item)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        item.addEventListener("click", () => {  
 | 
				
			||||||
 | 
					            zIndex+=1
 | 
				
			||||||
 | 
					            this.window.ViewWindowDiv.style.zIndex = zIndex + 1
 | 
				
			||||||
 | 
					            this.window.ViewWindowDiv.style.display = "unset"
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        item.addEventListener("contextmenu", () => {
 | 
				
			||||||
 | 
					            const dp = new DroppableMenu()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            dp.add("index", `<i class='fa fa-window-restore'></i> Afficher`)
 | 
				
			||||||
 | 
					            dp.add("close", `<span class='menu-signout'><i class='fa fa-xmark'></i> Fermer</span>`)
 | 
				
			||||||
 | 
					            dp.show()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const index = dp.get("index")
 | 
				
			||||||
 | 
					            const close = dp.get("close")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            index.addEventListener("click", () => {
 | 
				
			||||||
 | 
					                zIndex+=1
 | 
				
			||||||
 | 
					                this.window.ViewWindowDiv.style.display = "unset"
 | 
				
			||||||
 | 
					                this.window.ViewWindowDiv.style.zIndex = zIndex + 1
 | 
				
			||||||
 | 
					                dp.hide()
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            close.addEventListener("click", () => {
 | 
				
			||||||
 | 
					                this.window.destroy()
 | 
				
			||||||
 | 
					                dp.hide()
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    hide() {
 | 
				
			||||||
 | 
					        const viewItems = getID("views-items")
 | 
				
			||||||
 | 
					        const item = getID(`${this.window.ViewProperties.title}_item`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        item.outerHTML = ""
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,9 @@ document.addEventListener("contextmenu", (e) => {
 | 
				
			|||||||
    e.preventDefault()
 | 
					    e.preventDefault()
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function generateFileExplorerView() {
 | 
					explorer.createWindow(() => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var inCopyOrCut = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const View = new ViewWindow({
 | 
					    const View = new ViewWindow({
 | 
				
			||||||
        title: `<i class="fa fa-folder"></i> Gestionnaire de fichiers`,
 | 
					        title: `<i class="fa fa-folder"></i> Gestionnaire de fichiers`,
 | 
				
			||||||
@@ -11,6 +13,15 @@ function generateFileExplorerView() {
 | 
				
			|||||||
        height: "600px"
 | 
					        height: "600px"
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    console.log("")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    goHomePath()
 | 
					    goHomePath()
 | 
				
			||||||
    function goHomePath() {
 | 
					    function goHomePath() {
 | 
				
			||||||
        const rFiles = post("FX_GET", "homepath")
 | 
					        const rFiles = post("FX_GET", "homepath")
 | 
				
			||||||
@@ -53,6 +64,57 @@ function generateFileExplorerView() {
 | 
				
			|||||||
    const home = getID(View.getViewTitle() + '_home')
 | 
					    const home = getID(View.getViewTitle() + '_home')
 | 
				
			||||||
    const sharebtn = getID(View.getViewTitle() + '_sharebtn')
 | 
					    const sharebtn = getID(View.getViewTitle() + '_sharebtn')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    View.ViewWindowDiv.addEventListener("contextmenu", () => {
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if(inCopyOrCut != null) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                const dMenu = new DroppableMenu()
 | 
				
			||||||
 | 
					                dMenu.add("paste", "<i class='fa fa-paste'></i> Coller")
 | 
				
			||||||
 | 
					                dMenu.show()
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					                dMenu.get("paste").addEventListener("click", () => {
 | 
				
			||||||
 | 
					                    console.log({newPath: rootInput.value, action: inCopyOrCut.action, file: inCopyOrCut.file, name: inCopyOrCut.file.name, orginalPath: inCopyOrCut.orginalPath})
 | 
				
			||||||
 | 
					                    dMenu.hide()
 | 
				
			||||||
 | 
					                    const reqFiles = post("FX_PASTE", {newPath: rootInput.value, action: inCopyOrCut.action, file: inCopyOrCut.file, name: inCopyOrCut.file.name, orginalPath: inCopyOrCut.orginalPath})
 | 
				
			||||||
 | 
					                    reqFiles.then((result) => {
 | 
				
			||||||
 | 
					                        if(result == "OK") {
 | 
				
			||||||
 | 
					                            const reqFiles = post("FX_GET", rootInput.value)
 | 
				
			||||||
 | 
					                            reqFiles.then((result) => {
 | 
				
			||||||
 | 
					                                loadFiles(result)
 | 
				
			||||||
 | 
					                            })
 | 
				
			||||||
 | 
					                        } else if(result == "NOT_PERMITTED") {
 | 
				
			||||||
 | 
					                            const reqFiles = post("FX_GET", rootInput.value)
 | 
				
			||||||
 | 
					                            reqFiles.then((result) => {
 | 
				
			||||||
 | 
					                                loadFiles(result)
 | 
				
			||||||
 | 
					                            })
 | 
				
			||||||
 | 
					                            View.createPopup({
 | 
				
			||||||
 | 
					                                title: `<i class='fa fa-warning'></i> Erreur`,
 | 
				
			||||||
 | 
					                                content: `<p class='yellow'>Vous n'avez pas les permissions pour coller ce fichier.</p>`
 | 
				
			||||||
 | 
					                            })
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            const reqFiles = post("FX_GET", rootInput.value)
 | 
				
			||||||
 | 
					                            reqFiles.then((result) => {
 | 
				
			||||||
 | 
					                                loadFiles(result)
 | 
				
			||||||
 | 
					                            })
 | 
				
			||||||
 | 
					                            View.createPopup({
 | 
				
			||||||
 | 
					                                title: `<i class='fa fa-warning'></i> Erreur`,
 | 
				
			||||||
 | 
					                                content: `<p class='yellow'>Une erreur est survenue.</p>`
 | 
				
			||||||
 | 
					                            })
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        })
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					                        inCopyOrCut = null
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                console.log("LISTENER : " + rootInput.value)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    home.addEventListener("click", () => {
 | 
					    home.addEventListener("click", () => {
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        goHomePath()
 | 
					        goHomePath()
 | 
				
			||||||
@@ -77,7 +139,7 @@ function generateFileExplorerView() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        const foldername = getID(View.getViewTitle() + "_foldername")
 | 
					        const foldername = getID(View.getViewTitle() + "_foldername")
 | 
				
			||||||
        const foldercreate = getID(View.getViewTitle() + "_foldercreate")
 | 
					        const foldercreate = getID(View.getViewTitle() + "_foldercreate")
 | 
				
			||||||
        const folderInfo = new InfoPop(View.getViewTitle() + "_folderInfo")
 | 
					        const folderInfo = new TextResponse(View.getViewTitle() + "_folderInfo")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        folderInfo.setSize("13px")
 | 
					        folderInfo.setSize("13px")
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
@@ -137,7 +199,7 @@ function generateFileExplorerView() {
 | 
				
			|||||||
        const filename = getID(View.getViewTitle() + "_filename")
 | 
					        const filename = getID(View.getViewTitle() + "_filename")
 | 
				
			||||||
        const filecreate = getID(View.getViewTitle() + "_filecreate")
 | 
					        const filecreate = getID(View.getViewTitle() + "_filecreate")
 | 
				
			||||||
        const fileupload = getID(View.getViewTitle() + "_fileupload")
 | 
					        const fileupload = getID(View.getViewTitle() + "_fileupload")
 | 
				
			||||||
        const fileInfo = new InfoPop(View.getViewTitle() + "_fileInfo")
 | 
					        const fileInfo = new TextResponse(View.getViewTitle() + "_fileInfo")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        fileInfo.setSize("13px")
 | 
					        fileInfo.setSize("13px")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -190,7 +252,7 @@ function generateFileExplorerView() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            const fileuploadInput = getID(View.getViewTitle() + "_fileuploadInput")
 | 
					            const fileuploadInput = getID(View.getViewTitle() + "_fileuploadInput")
 | 
				
			||||||
            const fileuploadBtn = getID(View.getViewTitle() + "_fileuploadBtn")
 | 
					            const fileuploadBtn = getID(View.getViewTitle() + "_fileuploadBtn")
 | 
				
			||||||
            const fileuploadInfo = new InfoPop(View.getViewTitle() + "_fileuploadInfo")
 | 
					            const fileuploadInfo = new TextResponse(View.getViewTitle() + "_fileuploadInfo")
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
            fileuploadBtn.addEventListener("click", () => {
 | 
					            fileuploadBtn.addEventListener("click", () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -324,9 +386,7 @@ function generateFileExplorerView() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            for(const file of files.content) {
 | 
					            for(const file of files.content) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                const dropMenu = new DroppableMenu({
 | 
					                
 | 
				
			||||||
                    "id": file.id
 | 
					 | 
				
			||||||
                })
 | 
					 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                const element = document.getElementById(file.id)
 | 
					                const element = document.getElementById(file.id)
 | 
				
			||||||
@@ -347,18 +407,41 @@ function generateFileExplorerView() {
 | 
				
			|||||||
                        editFile()
 | 
					                        editFile()
 | 
				
			||||||
                    })
 | 
					                    })
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					               
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					                  
 | 
				
			||||||
 | 
					                getID(file.id).addEventListener("contextmenu", () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    const dropMenu = new DroppableMenu()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    dropMenu.add("copy", "<i class='fa fa-copy'></i> Copier")
 | 
				
			||||||
 | 
					                    dropMenu.add("cut", "<i class='fa fa-cut'></i> Couper")
 | 
				
			||||||
 | 
					                    dropMenu.add("rename", "<i class='fa-solid fa-file-signature'></i> Renommer")
 | 
				
			||||||
 | 
					                    dropMenu.add("delete", "<i class='fa fa-trash'></i> Supprimer")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if(!file.directory) {
 | 
				
			||||||
                        dropMenu.add("edit", "<i class='fa-solid fa-pen'></i> Editer")
 | 
					                        dropMenu.add("edit", "<i class='fa-solid fa-pen'></i> Editer")
 | 
				
			||||||
                        dropMenu.add("share", "<i class='fa fa-share'></i> Partager")
 | 
					                        dropMenu.add("share", "<i class='fa fa-share'></i> Partager")
 | 
				
			||||||
                        dropMenu.add("download", "<i class='fa fa-download'></i> Télécharger")
 | 
					                        dropMenu.add("download", "<i class='fa fa-download'></i> Télécharger")
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
                dropMenu.add("rename", "<i class='fa-solid fa-file-signature'></i> Renommer")
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                dropMenu.add("delete", "<i class='fa fa-trash'></i> Supprimer")
 | 
					 | 
				
			||||||
              
 | 
					 | 
				
			||||||
                  
 | 
					 | 
				
			||||||
                getID(file.id).addEventListener("contextmenu", () => {
 | 
					 | 
				
			||||||
                    dropMenu.show()
 | 
					                    dropMenu.show()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    dropMenu.get("copy").addEventListener("click", () => {
 | 
				
			||||||
 | 
					                        dropMenu.hide()
 | 
				
			||||||
 | 
					                        inCopyOrCut = {"action": "copy", "file": file, "orginalPath": files.root}
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    dropMenu.get("cut").addEventListener("click", () => {
 | 
				
			||||||
 | 
					                        dropMenu.hide()
 | 
				
			||||||
 | 
					                        inCopyOrCut = {"action": "cut", "file": file, "orginalPath": files.root}
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    dropMenu.get("delete").addEventListener("click", () => {
 | 
					                    dropMenu.get("delete").addEventListener("click", () => {
 | 
				
			||||||
                        dropMenu.hide()
 | 
					                        dropMenu.hide()
 | 
				
			||||||
                        const reqFiles = post("FX_DELETE", file.fileDirectory)
 | 
					                        const reqFiles = post("FX_DELETE", file.fileDirectory)
 | 
				
			||||||
@@ -403,7 +486,7 @@ function generateFileExplorerView() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                        const rename = getID(View.getViewTitle() + "_rename")
 | 
					                        const rename = getID(View.getViewTitle() + "_rename")
 | 
				
			||||||
                        const renameBtn = getID(View.getViewTitle() + "_renameBtn")
 | 
					                        const renameBtn = getID(View.getViewTitle() + "_renameBtn")
 | 
				
			||||||
                        const renameInfo = new InfoPop(View.getViewTitle() + "_renameInfo")
 | 
					                        const renameInfo = new TextResponse(View.getViewTitle() + "_renameInfo")
 | 
				
			||||||
                        renameInfo.setSize("13px")
 | 
					                        renameInfo.setSize("13px")
 | 
				
			||||||
                        rename.value = file.name
 | 
					                        rename.value = file.name
 | 
				
			||||||
                        rename.focus()
 | 
					                        rename.focus()
 | 
				
			||||||
@@ -465,7 +548,7 @@ function generateFileExplorerView() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                                const sharelink = getID(View.getViewTitle() + "_sharelink")
 | 
					                                const sharelink = getID(View.getViewTitle() + "_sharelink")
 | 
				
			||||||
                                const shareBtn = getID(View.getViewTitle() + "_shareBtn")
 | 
					                                const shareBtn = getID(View.getViewTitle() + "_shareBtn")
 | 
				
			||||||
                                const shareInfo = new InfoPop(View.getViewTitle() + "_shareInfo")
 | 
					                                const shareInfo = new TextResponse(View.getViewTitle() + "_shareInfo")
 | 
				
			||||||
                                shareInfo.setSize("13px")
 | 
					                                shareInfo.setSize("13px")
 | 
				
			||||||
                                sharelink.value = result
 | 
					                                sharelink.value = result
 | 
				
			||||||
                                sharelink.focus()
 | 
					                                sharelink.focus()
 | 
				
			||||||
@@ -583,10 +666,7 @@ function generateFileExplorerView() {
 | 
				
			|||||||
                            editorContent.style.resize = "none"
 | 
					                            editorContent.style.resize = "none"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        
 | 
					                        
 | 
				
			||||||
                            editorClose.addEventListener("click", () => {
 | 
					 | 
				
			||||||
                        
 | 
					                        
 | 
				
			||||||
                                editor.destroy()
 | 
					 | 
				
			||||||
                            })
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
@@ -603,7 +683,7 @@ function generateFileExplorerView() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function getIcon(file) {
 | 
					function getIcon(file) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,8 @@ const infoUserimage = getID("infoUserimage")
 | 
				
			|||||||
const infoDisplayname = getID("infoDisplayname")
 | 
					const infoDisplayname = getID("infoDisplayname")
 | 
				
			||||||
const views = getID("views")
 | 
					const views = getID("views")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// User Request
 | 
					// User Request
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const REQ_user = get("USERINFO")
 | 
					const REQ_user = get("USERINFO")
 | 
				
			||||||
@@ -18,54 +20,11 @@ REQ_user.then((ANS_user) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    permissions.forEach((permValue) => {
 | 
					    permissions.forEach((permValue) => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         if(permValue == "FILES_EXPLORER") {
 | 
					        AllComponents.forEach((component) => {
 | 
				
			||||||
            AvailableViews.push(`<div onclick="createView('files_explorer')" class="view">
 | 
					            if(component.permission == permValue) {
 | 
				
			||||||
            <span class="view-image"><i class="fa-solid fa-folder"></i></span>
 | 
					                component.inject(AvailableViews)
 | 
				
			||||||
            <p class="view-text">Gestionnaire de fichiers</p>
 | 
					 | 
				
			||||||
        </div>`)
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
         if(permValue == "SERVICES") {
 | 
					 | 
				
			||||||
            AvailableViews.push(`<div onclick="createView('service')" class="view">
 | 
					 | 
				
			||||||
            <span class="view-image"><i class="fa-solid fa-layer-group"></i></span>
 | 
					 | 
				
			||||||
            <p class="view-text">Gestion des services</p>
 | 
					 | 
				
			||||||
        </div>`)
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
         if(permValue == "SERVERS") {
 | 
					 | 
				
			||||||
            AvailableViews.push(`<div class="view">
 | 
					 | 
				
			||||||
            <span class="view-image"><i class="fa fa-server"></i></span>
 | 
					 | 
				
			||||||
            <p class="view-text">Gestion des serveurs</p>
 | 
					 | 
				
			||||||
          </div>`)
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
         if(permValue == "PIPELINES") {
 | 
					 | 
				
			||||||
            AvailableViews.push(` <div class="view">
 | 
					 | 
				
			||||||
            <span class="view-image"><i class="fa-brands fa-jenkins"></i></span>
 | 
					 | 
				
			||||||
            <p class="view-text">Gestion des pipelines</p>
 | 
					 | 
				
			||||||
          </div>`)
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
         if(permValue == "METRICS") {
 | 
					 | 
				
			||||||
            AvailableViews.push(` <div class="view">
 | 
					 | 
				
			||||||
            <span class="view-image"><i class="fa-solid fa-square-poll-vertical"></i></span>
 | 
					 | 
				
			||||||
            <p class="view-text">Web Metrics</p>
 | 
					 | 
				
			||||||
          </div>`)
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
         if(permValue == "USERS") {
 | 
					 | 
				
			||||||
            AvailableViews.push(` <div class="view">
 | 
					 | 
				
			||||||
            <span class="view-image"><i class="fa fa-users"></i></span>
 | 
					 | 
				
			||||||
            <p class="view-text">Gestion des utilisateurs</p>
 | 
					 | 
				
			||||||
          </div>`)
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
         if(permValue == "LINKS") {
 | 
					 | 
				
			||||||
            AvailableViews.push(` <div onclick="createView('links')" class="view">
 | 
					 | 
				
			||||||
            <span class="view-image"><i class="fa-solid fa-link"></i></span>
 | 
					 | 
				
			||||||
            <p class="view-text">Générateur de lien</p>
 | 
					 | 
				
			||||||
          </div>`)
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
         if(permValue == "SETTINGS") {
 | 
					 | 
				
			||||||
            AvailableViews.push(` <div class="view">
 | 
					 | 
				
			||||||
            <span class="view-image"><i class="fa fa-gear"></i></span>
 | 
					 | 
				
			||||||
            <p class="view-text">Paramètres</p>
 | 
					 | 
				
			||||||
          </div>`)
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					          })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
@@ -73,7 +32,7 @@ REQ_user.then((ANS_user) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if(AvailableViews.join("") == "") {
 | 
					    if(AvailableViews.join("") == "") {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AvailableViews.push("<p class='yellow'><i class='fa-solid fa-warning'></i> Aucune permission ne semble vous êtes accordée<br>Demandez à Raphix afin de résoudre ce problème</p>")
 | 
					        AvailableViews.push("<p style='position: absolute; width: 100%;' class='yellow t-center'><i class='fa-solid fa-warning'></i> Aucune permission ne semble vous êtes accordée<br>Demandez à Raphix afin de résoudre ce problème</p>")
 | 
				
			||||||
        views.classList.remove("views-box")
 | 
					        views.classList.remove("views-box")
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -82,5 +41,14 @@ REQ_user.then((ANS_user) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    views.innerHTML = AvailableViews.join("")
 | 
					    views.innerHTML = AvailableViews.join("")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // BindView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AllComponents.forEach((component) => {
 | 
				
			||||||
 | 
					      component.bindView()
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    servers.forceWindow()
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
function generateLinksView() {
 | 
					links.createWindow(() => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const View = new ViewWindow({
 | 
					    const View = new ViewWindow({
 | 
				
			||||||
        title: `<i class="fa-solid fa-link"></i> Générateur de liens`,
 | 
					        title: `<i class="fa-solid fa-link"></i> Générateur de liens`,
 | 
				
			||||||
@@ -40,7 +40,7 @@ function generateLinksView() {
 | 
				
			|||||||
            const titleInput = getID(`${View.getViewTitle()}_title`)
 | 
					            const titleInput = getID(`${View.getViewTitle()}_title`)
 | 
				
			||||||
            const urlInput = getID(`${View.getViewTitle()}_url`)
 | 
					            const urlInput = getID(`${View.getViewTitle()}_url`)
 | 
				
			||||||
            const addBtn = getID(`${View.getViewTitle()}_confirm`)
 | 
					            const addBtn = getID(`${View.getViewTitle()}_confirm`)
 | 
				
			||||||
            const info = new InfoPop(`${View.getViewTitle()}_info`)
 | 
					            const info = new TextResponse(`${View.getViewTitle()}_info`)
 | 
				
			||||||
            const ablink = getID(`${View.getViewTitle()}_ablink`)
 | 
					            const ablink = getID(`${View.getViewTitle()}_ablink`)
 | 
				
			||||||
            const newlinkSpan = getID(`${View.getViewTitle()}_newlink_span`)
 | 
					            const newlinkSpan = getID(`${View.getViewTitle()}_newlink_span`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -206,7 +206,7 @@ function generateLinksView() {
 | 
				
			|||||||
                        const titleInput = getID(`${View.getViewTitle()}_edittitle`)
 | 
					                        const titleInput = getID(`${View.getViewTitle()}_edittitle`)
 | 
				
			||||||
                        const urlInput = getID(`${View.getViewTitle()}_editurl`)
 | 
					                        const urlInput = getID(`${View.getViewTitle()}_editurl`)
 | 
				
			||||||
                        const editBtnConfirm = getID(`${View.getViewTitle()}_editconfirm`)
 | 
					                        const editBtnConfirm = getID(`${View.getViewTitle()}_editconfirm`)
 | 
				
			||||||
                        const info = new InfoPop(`${View.getViewTitle()}_editinfo`)
 | 
					                        const info = new TextResponse(`${View.getViewTitle()}_editinfo`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        titleInput.value = link.title
 | 
					                        titleInput.value = link.title
 | 
				
			||||||
                        urlInput.value = link.url
 | 
					                        urlInput.value = link.url
 | 
				
			||||||
@@ -294,4 +294,4 @@ function generateLinksView() {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
}
 | 
					})
 | 
				
			||||||
@@ -2,7 +2,7 @@ const username = getID("username")
 | 
				
			|||||||
const password = getID("password")
 | 
					const password = getID("password")
 | 
				
			||||||
const submit = getID("submit")
 | 
					const submit = getID("submit")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const loginInfo = new InfoPop("login-info")
 | 
					const loginInfo = new TextResponse("login-info")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
loginInfo.clear()
 | 
					loginInfo.clear()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										57
									
								
								public/javascripts/middle.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								public/javascripts/middle.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					// My View Component
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const explorer = new ViewComponent({
 | 
				
			||||||
 | 
					    name: "Explorateur de fichier",
 | 
				
			||||||
 | 
					    icon: "fa-solid fa-folder",
 | 
				
			||||||
 | 
					    permission: "FILES_EXPLORER"
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  const services = new ViewComponent({
 | 
				
			||||||
 | 
					    name: "Gestion des services",
 | 
				
			||||||
 | 
					    icon: "fa-solid fa-layer-group",
 | 
				
			||||||
 | 
					    permission: "SERVICES"
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  const servers = new ViewComponent({
 | 
				
			||||||
 | 
					    name: "Gestion des serveurs",
 | 
				
			||||||
 | 
					    icon: "fa fa-server",
 | 
				
			||||||
 | 
					    permission: "SERVERS"
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  const pipelines = new ViewComponent({
 | 
				
			||||||
 | 
					    name: "Gestion des pipelines",
 | 
				
			||||||
 | 
					    icon: "fa-solid fa-code-merge",
 | 
				
			||||||
 | 
					    permission: "PIPELINES"
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  const metrics = new ViewComponent({
 | 
				
			||||||
 | 
					    name: "Web Metrics",
 | 
				
			||||||
 | 
					    icon: "fa-solid fa-square-poll-vertical",
 | 
				
			||||||
 | 
					    permission: "METRICS"
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  const users = new ViewComponent({
 | 
				
			||||||
 | 
					    name: "Gestion des utilisateurs",
 | 
				
			||||||
 | 
					    icon: "fa-solid fa-users",
 | 
				
			||||||
 | 
					    permission: "USERS"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  const links = new ViewComponent({
 | 
				
			||||||
 | 
					    name: "Gestion des liens",
 | 
				
			||||||
 | 
					    icon: "fa-solid fa-link",
 | 
				
			||||||
 | 
					    permission: "LINKS"
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  const settings = new ViewComponent({
 | 
				
			||||||
 | 
					    name: "Paramètres",
 | 
				
			||||||
 | 
					    icon: "fa-solid fa-cog",
 | 
				
			||||||
 | 
					    permission: "SETTINGS"
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										73
									
								
								public/javascripts/server.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								public/javascripts/server.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					servers.createWindow(async () => {
 | 
				
			||||||
 | 
					    const View = new ViewWindow({
 | 
				
			||||||
 | 
					        title: `<i class="fa fa-server"></i> Gestion des serveurs`,
 | 
				
			||||||
 | 
					        width: "1000px",
 | 
				
			||||||
 | 
					        height: "450px"
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const serversList = new Array()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const alpha = new Server({
 | 
				
			||||||
 | 
					        name: "Alpha",
 | 
				
			||||||
 | 
					        description: "Serveur principal",
 | 
				
			||||||
 | 
					        icon: "fa-solid fa-hourglass-start",
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const omega = new Server({
 | 
				
			||||||
 | 
					        name: "Omega",
 | 
				
			||||||
 | 
					        description: "Serveur secondaire",
 | 
				
			||||||
 | 
					        icon: "fa-solid fa-stop",
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    serversList.push(alpha.generateHTML())
 | 
				
			||||||
 | 
					    serversList.push(omega.generateHTML())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    View.setContent(`
 | 
				
			||||||
 | 
					    <div class="servers">
 | 
				
			||||||
 | 
					        ${serversList.join("")}
 | 
				
			||||||
 | 
					    </div>`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await alpha.loadScript()
 | 
				
			||||||
 | 
					    await omega.loadScript()
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					     <div class="servers-box">
 | 
				
			||||||
 | 
					        <div class="servers-box-title">
 | 
				
			||||||
 | 
					            <div class='servers-box-title-info'>
 | 
				
			||||||
 | 
					                <i class="fa fa-server"></i> 
 | 
				
			||||||
 | 
					                <p>Alpha</p>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <button class="btn yellow"><span>Redémarrer</span></button>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div class="servers-box-content">
 | 
				
			||||||
 | 
					           <div class='servers-metrics'>
 | 
				
			||||||
 | 
					                <div class='servers-metrics-box'>
 | 
				
			||||||
 | 
					                    <div>
 | 
				
			||||||
 | 
					                    <i class='fa-solid fa-memory'></i>
 | 
				
			||||||
 | 
					                    <p>RAM</p>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <p>1.5 Go / 2 Go</p>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class='servers-metrics-box'>
 | 
				
			||||||
 | 
					                    <div>
 | 
				
			||||||
 | 
					                    <i class='fa-solid fa-microchip'></i>
 | 
				
			||||||
 | 
					                    <p>CPU</p>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <p>1.5 Go / 2 Go</p>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class='servers-metrics-box'>
 | 
				
			||||||
 | 
					                    <div>
 | 
				
			||||||
 | 
					                    <i class='fa-solid fa-hdd'></i>
 | 
				
			||||||
 | 
					                    <p>DISK</p>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <p>1.5 Go / 2 Go</p>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
@@ -1,164 +1,7 @@
 | 
				
			|||||||
async function generateServiceView() {
 | 
					services.createWindow(async () => { 
 | 
				
			||||||
 | 
					 | 
				
			||||||
    class Service {
 | 
					 | 
				
			||||||
        name = null
 | 
					 | 
				
			||||||
        description = null
 | 
					 | 
				
			||||||
        icon = null
 | 
					 | 
				
			||||||
        url = null
 | 
					 | 
				
			||||||
        canAccess = false
 | 
					 | 
				
			||||||
        isOnline  = false
 | 
					 | 
				
			||||||
        constructor(properties) {
 | 
					 | 
				
			||||||
            this.name = properties.name
 | 
					 | 
				
			||||||
            this.description = properties.description
 | 
					 | 
				
			||||||
            this.icon = properties.icon
 | 
					 | 
				
			||||||
            this.url = properties.url
 | 
					 | 
				
			||||||
            this.canAccess = properties.canAccess
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        generateHTML() {
 | 
					 | 
				
			||||||
            return `
 | 
					 | 
				
			||||||
            <div class="sv">
 | 
					 | 
				
			||||||
                <div class='sv-info'>
 | 
					 | 
				
			||||||
                    <img class="sv-icon" src="${this.icon}" alt="${this.name}">
 | 
					 | 
				
			||||||
                    <div>
 | 
					 | 
				
			||||||
                        <h1>${this.name}</h1>
 | 
					 | 
				
			||||||
                        <p>${this.description}</p>
 | 
					 | 
				
			||||||
                        <p>Etat : <span id='${this.name}_status' class="sv-status">Vérification en cours ...</span></p>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                <div class="sv-actions">
 | 
					 | 
				
			||||||
                    ${this.canAccess ? `<a href="${this.url}" target="_blank"><button class="btn green"><span>Accéder au service</span></button></a>` : ""}
 | 
					 | 
				
			||||||
                    <button id='${this.name}_svpower' class='btn yellow'n><span>Options d'alimentation<span></button>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            `
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        loadScript() {
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
            return new Promise((resolve, reject) => {
 | 
					 | 
				
			||||||
                const statusSpan = getID(`${this.name}_status`)
 | 
					 | 
				
			||||||
                const request = post(`SV_GET_SERVICE_STATUS`, this.url) 
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                request.then((answer) => {
 | 
					 | 
				
			||||||
                    if(answer.name == this.url) {
 | 
					 | 
				
			||||||
                        if(answer.answer == "ONLINE") {
 | 
					 | 
				
			||||||
                            statusSpan.innerHTML = '<span style="font-size: 12px;"><i class="fa-solid fa-circle green"></i> En ligne</span>'
 | 
					 | 
				
			||||||
                            this.isOnline  = true
 | 
					 | 
				
			||||||
                        } else {
 | 
					 | 
				
			||||||
                            statusSpan.innerHTML = '<span style="font-size: 12px;"><i class="fa-solid fa-circle red"></i> Hors ligne</span>'
 | 
					 | 
				
			||||||
                  
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        resolve("LOADED")
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                })
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
                const powerButton = getID(`${this.name}_svpower`)
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
                // Make a popup of View to select if you want to start, stop or restart the service by doing a request
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
                powerButton.addEventListener("click", () => {
 | 
					 | 
				
			||||||
                    View.createPopup({
 | 
					 | 
				
			||||||
                        title: `<i class='fa-solid fa-power-off'></i> Gestion de l'alimentation du service`,
 | 
					 | 
				
			||||||
                        content: `
 | 
					 | 
				
			||||||
                        
 | 
					 | 
				
			||||||
                        <p class='sv-power-select'>${this.name}</p>
 | 
					 | 
				
			||||||
                        <p id='sv-power-info'></p>
 | 
					 | 
				
			||||||
                        <div class="sv-power">
 | 
					 | 
				
			||||||
                            <button id="${this.name}_start" class="btn green"><span>Démarrer</span></button>
 | 
					 | 
				
			||||||
                            <button id="${this.name}_restart" class="btn yellow"><span>Redémarrer</span></button>
 | 
					 | 
				
			||||||
                            <button id="${this.name}_stop" class="btn red"><span> Arrêter</span></button>
 | 
					 | 
				
			||||||
                        </div>
 | 
					 | 
				
			||||||
                        `
 | 
					 | 
				
			||||||
                    })
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
                    const startButton = getID(`${this.name}_start`)
 | 
					 | 
				
			||||||
                    const stopButton = getID(`${this.name}_stop`)
 | 
					 | 
				
			||||||
                    const restartButton = getID(`${this.name}_restart`)
 | 
					 | 
				
			||||||
                    const info = new InfoPop("sv-power-info")
 | 
					 | 
				
			||||||
                    
 | 
					 | 
				
			||||||
                    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if(this.isOnline) {
 | 
					 | 
				
			||||||
                        startButton.style.display = "none"
 | 
					 | 
				
			||||||
                        info.info("Verifiez que le service n'est pas utilisé par quelqu'un d'autre avant de le redémarrer ou de l'arrêter")
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        stopButton.style.display = "none"
 | 
					 | 
				
			||||||
                        restartButton.style.display = "none"
 | 
					 | 
				
			||||||
                        info.info("Si le service ne démarre pas, vérifiez l'intégrité du service")
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
                    startButton.addEventListener("click", () => {
 | 
					 | 
				
			||||||
                        const request = post(`SV_START_SERVICE`, this.url) 
 | 
					 | 
				
			||||||
                        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        request.then((answer) => {
 | 
					 | 
				
			||||||
                            if(answer.answer == "OK") {
 | 
					 | 
				
			||||||
                                statusSpan.innerHTML = '<span style="font-size: 12px;"><i class="fa-solid fa-circle green"></i> En ligne</span>'
 | 
					 | 
				
			||||||
                                View.destroyPopup("`<i class='fa-solid fa-power-off'></i> Gestion de l'alimentation du service`")
 | 
					 | 
				
			||||||
                                this.isOnline  = true
 | 
					 | 
				
			||||||
                            } else {
 | 
					 | 
				
			||||||
                                info.err("Impossible de démarrer le service")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        })
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
                    })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    stopButton.addEventListener("click", () => {
 | 
					 | 
				
			||||||
                        const request = post(`SV_STOP_SERVICE`, this.url) 
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
                        request.then((answer) => {
 | 
					 | 
				
			||||||
                            if(answer.answer == "OK") {
 | 
					 | 
				
			||||||
                                statusSpan.innerHTML = '<span style="font-size: 12px;"><i class="fa-solid fa-circle red"></i> Hors ligne</span>'
 | 
					 | 
				
			||||||
                                this.isOnline  = false
 | 
					 | 
				
			||||||
                                View.destroyPopup("`<i class='fa-solid fa-power-off'></i> Gestion de l'alimentation du service`")
 | 
					 | 
				
			||||||
                              
 | 
					 | 
				
			||||||
                            } else {
 | 
					 | 
				
			||||||
                                info.err("Impossible d'arrêter le service")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        
 | 
					 | 
				
			||||||
                        })
 | 
					 | 
				
			||||||
                    })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    restartButton.addEventListener("click", () => {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        console.log("RESTART")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        const request = post(`SV_RESTART_SERVICE`, this.url) 
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
                        request.then((answer) => {
 | 
					 | 
				
			||||||
                            if(answer.answer == "OK") {
 | 
					 | 
				
			||||||
                                statusSpan.innerHTML = '<span style="font-size: 12px;"><i class="fa-solid fa-circle green"></i> En ligne</span>'
 | 
					 | 
				
			||||||
                                View.destroyPopup("`<i class='fa-solid fa-power-off'></i> Gestion de l'alimentation du service`")
 | 
					 | 
				
			||||||
                                this.isOnline  = true
 | 
					 | 
				
			||||||
                            } else {
 | 
					 | 
				
			||||||
                                info.err("Impossible de redémarrer le service")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                            
 | 
					 | 
				
			||||||
                        })
 | 
					 | 
				
			||||||
                    })
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
         })
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * CODE OF SERVICE.JS
 | 
					     * CODE OF SERVICE.JS
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
 | 
					 | 
				
			||||||
    const allServices = new Array()
 | 
					    const allServices = new Array()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const View = new ViewWindow({
 | 
					    const View = new ViewWindow({
 | 
				
			||||||
@@ -236,5 +79,5 @@ async function generateServiceView() {
 | 
				
			|||||||
    await cvraphix.loadScript()
 | 
					    await cvraphix.loadScript()
 | 
				
			||||||
    await lavalink.loadScript()
 | 
					    await lavalink.loadScript()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -293,14 +293,21 @@ a {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.subpanel-box {
 | 
					.subpanel-box {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  width: 900px;
 | 
					  width: 100%;
 | 
				
			||||||
  height: 50px;
 | 
					  position: absolute;
 | 
				
			||||||
  border-radius: 10px;
 | 
					  background-color: #09090963;
 | 
				
			||||||
  padding: 2%;
 | 
					  backdrop-filter: blur(10px);
 | 
				
			||||||
 | 
					  bottom: 0;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.subpanel-content {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  display: flex;
 | 
					  display: flex;
 | 
				
			||||||
  justify-content: space-between;
 | 
					  justify-content: space-between;
 | 
				
			||||||
  background-color: #605e5863;
 | 
					  padding: 20px;
 | 
				
			||||||
  backdrop-filter: blur(10px);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.subpanel-image {
 | 
					.subpanel-image {
 | 
				
			||||||
@@ -310,6 +317,16 @@ a {
 | 
				
			|||||||
  border-radius: 100%;
 | 
					  border-radius: 100%;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.subpanel-logo {
 | 
				
			||||||
 | 
					  width: 50px;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  transition: 0.3s;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.subpanel-logo:hover {
 | 
				
			||||||
 | 
					  transform: scale(0.9);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.subpanel-user {
 | 
					.subpanel-user {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  display: flex;
 | 
					  display: flex;
 | 
				
			||||||
@@ -319,12 +336,21 @@ a {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.subpanel-userinfo {
 | 
					.subpanel-userinfo {
 | 
				
			||||||
  text-align: start;
 | 
					  text-align: end;
 | 
				
			||||||
  display: flex;
 | 
					  display: flex;
 | 
				
			||||||
  flex-direction: column;
 | 
					  flex-direction: column;
 | 
				
			||||||
  gap: 5px;
 | 
					  gap: 5px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.subpanel-actions {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  flex-direction: row;
 | 
				
			||||||
 | 
					  gap: 20px;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.subpanel-username {
 | 
					.subpanel-username {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  font-size: 14px;
 | 
					  font-size: 14px;
 | 
				
			||||||
@@ -332,6 +358,66 @@ a {
 | 
				
			|||||||
  margin-block: 0 !important;
 | 
					  margin-block: 0 !important;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.views-items {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  flex-direction: row;
 | 
				
			||||||
 | 
					  gap: 15px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.view-item {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					  flex-direction: row;
 | 
				
			||||||
 | 
					  gap: 10px;
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					  background-color: #3230319d;
 | 
				
			||||||
 | 
					  padding: 5px;
 | 
				
			||||||
 | 
					  padding-left: 10px;
 | 
				
			||||||
 | 
					  padding-right: 10px;
 | 
				
			||||||
 | 
					  border-radius: 15px;
 | 
				
			||||||
 | 
					  transition: 0.3s;
 | 
				
			||||||
 | 
					  user-select: none;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.view-item:hover {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  background-color: #4e4b4d9d;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  transform: scale(1.05);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.view-item:active {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  background-color: #4e4b4d9d;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  transform: scale(0.975);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.view-item p {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  text-align: start;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.menu-signout {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  color: #ff5d51;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					  display: grid;
 | 
				
			||||||
 | 
					  grid-template-columns: 0.2fr 0.8fr;
 | 
				
			||||||
 | 
					  gap: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.dm-element:hover .menu-signout {
 | 
				
			||||||
 | 
					  color: black;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.subpanel-dispname {
 | 
					.subpanel-dispname {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -513,6 +599,17 @@ a {
 | 
				
			|||||||
  color: #ff5d51;
 | 
					  color: #ff5d51;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.view-closediv {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    flex-direction: row;
 | 
				
			||||||
 | 
					    gap: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.minimized {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  height: 7% !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Files Explorer */
 | 
					/* Files Explorer */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -793,3 +890,80 @@ a {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  font-size: 12px;
 | 
					  font-size: 12px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* SERVERS */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.servers {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  flex-direction: row;
 | 
				
			||||||
 | 
					  justify-content: space-between;
 | 
				
			||||||
 | 
					  padding: 20px;
 | 
				
			||||||
 | 
					  user-select: none;
 | 
				
			||||||
 | 
					  gap: 30px;
 | 
				
			||||||
 | 
					  -webkit-user-select: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.servers-box {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  flex-direction: column;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.servers-box-title {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  flex-direction: row;
 | 
				
			||||||
 | 
					  gap: 10px;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					  padding: 10px;
 | 
				
			||||||
 | 
					  border-radius: 10px;
 | 
				
			||||||
 | 
					  background-color: #1b1b1bc1;
 | 
				
			||||||
 | 
					  transition: 0.1s;
 | 
				
			||||||
 | 
					  justify-content: space-between;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.servers-box-title-info {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  flex-direction: row;
 | 
				
			||||||
 | 
					  gap: 10px;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.servers-metrics {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  display: grid;
 | 
				
			||||||
 | 
					  grid-template-columns: 1fr 1fr;
 | 
				
			||||||
 | 
					  gap: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.servers-box-content {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  padding: 10px;
 | 
				
			||||||
 | 
					  background-color: #3D3B3C;
 | 
				
			||||||
 | 
					  margin-top: 20px;
 | 
				
			||||||
 | 
					  border-radius: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.servers-metrics-box {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  flex-direction: column;
 | 
				
			||||||
 | 
					  gap: 10px;
 | 
				
			||||||
 | 
					  padding: 10px;
 | 
				
			||||||
 | 
					  border-radius: 10px;
 | 
				
			||||||
 | 
					  background-color: #1b1b1bc1;
 | 
				
			||||||
 | 
					  transition: 0.1s;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.servers-metrics-box div {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					  gap: 10px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -10,7 +10,7 @@ router.get('/', function(req, res, next) {
 | 
				
			|||||||
      res.redirect(302, "/")
 | 
					      res.redirect(302, "/")
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
      res.clearCookie('token')
 | 
					      res.clearCookie('token')
 | 
				
			||||||
      res.render('login', {version: process.env.npm_package_version});
 | 
					      res.render('login', {version: require("../package.json").version});
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,58 +8,42 @@
 | 
				
			|||||||
    <div class="panel-box m-align t-center">
 | 
					    <div class="panel-box m-align t-center">
 | 
				
			||||||
      <div class="logo"><img class="logo-img" src="/images/FormatLogo_WHITE.svg"><p>Neutral</p></div>
 | 
					      <div class="logo"><img class="logo-img" src="/images/FormatLogo_WHITE.svg"><p>Neutral</p></div>
 | 
				
			||||||
      <div id="views" class="views-box">
 | 
					      <div id="views" class="views-box">
 | 
				
			||||||
          <div class="view">
 | 
					        <p style="position: absolute; width: 100%;" class='yellow t-center'><i class='fa-solid fa-warning'></i> Aucune permission ne semble vous êtes accordée<br>Demandez à Raphix afin de résoudre ce problème</p>
 | 
				
			||||||
              <span class="view-image"><i class="fa-solid fa-folder"></i></span>
 | 
					 | 
				
			||||||
              <p class="view-text">Gestionnaire de fichiers</p>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
            <div class="view">
 | 
					 | 
				
			||||||
              <span class="view-image"><i class="fa-solid fa-layer-group"></i></span>
 | 
					 | 
				
			||||||
              <p class="view-text">Gestion des services</p>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
          <div class="view">
 | 
					 | 
				
			||||||
            <span class="view-image"><i class="fa fa-server"></i></span>
 | 
					 | 
				
			||||||
            <p class="view-text">Gestion des serveurs</p>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
        <div class="view">
 | 
					 | 
				
			||||||
          <span class="view-image"><i class="fa-brands fa-jenkins"></i></span>
 | 
					 | 
				
			||||||
          <p class="view-text">Gestion des pipelines</p>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="view">
 | 
					 | 
				
			||||||
          <span class="view-image"><i class="fa-solid fa-square-poll-vertical"></i></span>
 | 
					 | 
				
			||||||
          <p class="view-text">Web Metrics</p>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="view">
 | 
					 | 
				
			||||||
          <span class="view-image"><i class="fa fa-users"></i></span>
 | 
					 | 
				
			||||||
          <p class="view-text">Gestion des utilisateurs</p>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="view">
 | 
					 | 
				
			||||||
          <span class="view-image"><i class="fa-solid fa-link"></i></span>
 | 
					 | 
				
			||||||
          <p class="view-text">Générateur de lien</p>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="view">
 | 
					 | 
				
			||||||
          <span class="view-image"><i class="fa fa-gear"></i></span>
 | 
					 | 
				
			||||||
          <p class="view-text">Paramètres</p>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <div class="subpanel-box m-align t-center">
 | 
					    <div class="subpanel-box m-align t-center">
 | 
				
			||||||
 | 
					      <div class="subpanel-content">
 | 
				
			||||||
 | 
					        <div class="subpanel-actions">
 | 
				
			||||||
 | 
					          <img id="menu-logo" class="subpanel-logo" src="/images/FormatLogo_WHITE.svg">
 | 
				
			||||||
 | 
					          <div id="views-items" class="views-items">
 | 
				
			||||||
 | 
					            <div class="view-item menu-signout" onclick="window.location = '/login/signout'">
 | 
				
			||||||
 | 
					              <i class="fas fa-sign-out-alt"></i>
 | 
				
			||||||
 | 
					              <p>Déconnexion</p>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        <div class="subpanel-user">
 | 
					        <div class="subpanel-user">
 | 
				
			||||||
        <img id="infoUserimage" class="subpanel-image" src="/images/users/default.jpg">
 | 
					 | 
				
			||||||
          <div class="subpanel-userinfo">
 | 
					          <div class="subpanel-userinfo">
 | 
				
			||||||
            <p id="infoDisplayname" class="subpanel-dispname">DisplayName</p>
 | 
					            <p id="infoDisplayname" class="subpanel-dispname">DisplayName</p>
 | 
				
			||||||
            <p id="infoUsername" class="subpanel-username">Username</p>
 | 
					            <p id="infoUsername" class="subpanel-username">Username</p>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
 | 
					          <img id="infoUserimage" class="subpanel-image" src="/images/users/default.jpg">
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      <a href="/login/signout"><button class="btn yellow"><span><i class="fa fa-sign-out"></i> Déconnexion</span></button></a>
 | 
					       
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <script src="/socket.io/socket.io.js"></script>
 | 
					    <script src="/socket.io/socket.io.js"></script>
 | 
				
			||||||
    <script defer="" src="https://use.fontawesome.com/releases/v6.4.2/js/all.js" crossorigin="anonymous"></script>
 | 
					    <script defer="" src="https://use.fontawesome.com/releases/v6.4.2/js/all.js" crossorigin="anonymous"></script>
 | 
				
			||||||
 | 
					    <script src="/javascripts/basics.js"></script>
 | 
				
			||||||
 | 
					    <script src="/javascripts/middle.js"></script>
 | 
				
			||||||
    <script src="/javascripts/io.js"></script>
 | 
					    <script src="/javascripts/io.js"></script>
 | 
				
			||||||
    <script src="/javascripts/link.js"></script>
 | 
					    <script src="/javascripts/link.js"></script>
 | 
				
			||||||
    <script src="/javascripts/service.js"></script>
 | 
					    <script src="/javascripts/service.js"></script>
 | 
				
			||||||
 | 
					    <script src="/javascripts/server.js"></script>
 | 
				
			||||||
    <script src="/javascripts/filexplorer.js"></script>
 | 
					    <script src="/javascripts/filexplorer.js"></script>
 | 
				
			||||||
    <script src="/javascripts/basics.js"></script>
 | 
					 | 
				
			||||||
    <script src="/javascripts/indexscript.js"></script>
 | 
					    <script src="/javascripts/indexscript.js"></script>
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
  </body>
 | 
					  </body>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user