Version 1.0.0 - Ajout de WebMetrics et de l'édit utilisateur
	
		
			
	
		
	
	
		
	
		
			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:
		@@ -10,7 +10,8 @@ const __glob = {
 | 
			
		||||
    USERS: root + path.sep + "data" + path.sep + "users.json",
 | 
			
		||||
    CONFIG: root + path.sep + "data" + path.sep + "config.json",
 | 
			
		||||
    SHARED: root + path.sep + "data" + path.sep + "shared",
 | 
			
		||||
    USERS_IMAGES: root + path.sep + "public" + path.sep + 'images' + path.sep + "users",
 | 
			
		||||
    USERS_IMAGES: root + path.sep + "data" + path.sep + "user_images",
 | 
			
		||||
    PACKAGE_JSON: root + path.sep + "package.json",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										112
									
								
								bin/metrics.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								bin/metrics.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,112 @@
 | 
			
		||||
const { LogType } = require("loguix")
 | 
			
		||||
const fs = require("fs")
 | 
			
		||||
const path = require("path")
 | 
			
		||||
var CryptoJS = require("crypto-js")
 | 
			
		||||
const { __glob } = require("./global-variables")
 | 
			
		||||
const { captureRejectionSymbol } = require("events")
 | 
			
		||||
const clog = new LogType("Metrics")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if(!fs.existsSync(__glob.DATA + path.sep + "metrics.json")) {
 | 
			
		||||
    fs.writeFileSync(__glob.DATA + path.sep + "metrics.json", JSON.stringify([], null, 2))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports.getDataMetrics = function() {
 | 
			
		||||
    return JSON.parse(fs.readFileSync(__glob.DATA + path.sep + "metrics.json"))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports.getMetrics = function() {
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    const metrics = this.getDataMetrics()
 | 
			
		||||
    var metricsToReturn = new Array()
 | 
			
		||||
 | 
			
		||||
    return new Promise(async (resolve, reject) => {
 | 
			
		||||
 | 
			
		||||
        // Count the number processed 
 | 
			
		||||
 | 
			
		||||
        var processed = 0
 | 
			
		||||
 | 
			
		||||
        await metrics.forEach(async (metric) => {
 | 
			
		||||
 | 
			
		||||
            // Try to connect to the metric server with the key in query params named "privatekey"
 | 
			
		||||
            // If the connection is successful, we add the metric to the list of metrics to return
 | 
			
		||||
        
 | 
			
		||||
                const url = `http://${metric.address}:${metric.port}/metrics?privatekey=${metric.key}`
 | 
			
		||||
                const res = await fetch(url, {
 | 
			
		||||
                    method: "GET",
 | 
			
		||||
                    headers: {
 | 
			
		||||
                        "Accept": "application/json",
 | 
			
		||||
                    },
 | 
			
		||||
                    credentials: "include"
 | 
			
		||||
                }).then(res => res.json())
 | 
			
		||||
                .then(res => {
 | 
			
		||||
 | 
			
		||||
                    if(res) {
 | 
			
		||||
                        metric.data = res
 | 
			
		||||
                        metricsToReturn.push(metric)
 | 
			
		||||
                    } else {
 | 
			
		||||
                        metric.data = "ERROR"
 | 
			
		||||
                        metricsToReturn.push(metric)
 | 
			
		||||
                    }
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
                processed++
 | 
			
		||||
 | 
			
		||||
                if(processed == metrics.length) {
 | 
			
		||||
                    resolve(metricsToReturn)
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    })
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports.addMetric = function(settings) {
 | 
			
		||||
 | 
			
		||||
    const metrics = this.getDataMetrics()
 | 
			
		||||
 | 
			
		||||
    const metric = {
 | 
			
		||||
        id: makeid(8),
 | 
			
		||||
        name: settings.name,
 | 
			
		||||
        address: settings.address,
 | 
			
		||||
        port: settings.port,
 | 
			
		||||
        key: settings.key,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    metrics.push(metric)
 | 
			
		||||
    fs.writeFileSync(__glob.DATA + path.sep + "metrics.json", JSON.stringify(metrics, null, 2))
 | 
			
		||||
    return "OK"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports.deleteMetric = function(id) {
 | 
			
		||||
 | 
			
		||||
    const metrics = this.getDataMetrics()
 | 
			
		||||
 | 
			
		||||
    metrics.forEach((metric) => {
 | 
			
		||||
        if(metric.id == id) {
 | 
			
		||||
            metrics.splice(metrics.indexOf(metric), 1)
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    fs.writeFileSync(__glob.DATA + path.sep + "metrics.json", JSON.stringify(metrics, null, 2))
 | 
			
		||||
    return "OK"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function makeid(length) {
 | 
			
		||||
    var result           = [];
 | 
			
		||||
    var characters       = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
 | 
			
		||||
    var charactersLength = characters.length;
 | 
			
		||||
    for ( var i = 0; i < length; i++ ) {
 | 
			
		||||
      result.push(characters.charAt(Math.floor(Math.random() * 
 | 
			
		||||
        charactersLength)));
 | 
			
		||||
   }
 | 
			
		||||
   return result.join('');
 | 
			
		||||
}
 | 
			
		||||
@@ -13,6 +13,7 @@ const plog = new LogType("Web")
 | 
			
		||||
const cook = require("cookie")
 | 
			
		||||
const http = require("http")
 | 
			
		||||
const servermetrics = require("./server-metrics.js")
 | 
			
		||||
const metrics = require("./metrics.js")
 | 
			
		||||
const pm2 = require('pm2');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -56,6 +57,11 @@ module.exports.serverIO = function(server) {
 | 
			
		||||
             * POST REQUEST
 | 
			
		||||
             */
 | 
			
		||||
 | 
			
		||||
            PostRequest("US_EDIT_PERSONNAL", async (settings) => {
 | 
			
		||||
                user = auth.getUserByToken(token)
 | 
			
		||||
                PostAnswer("US_EDIT_PERSONNAL", await users.editMySelf(settings, user))
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
            if(user.checkPermission("FILES_EXPLORER")) {
 | 
			
		||||
 | 
			
		||||
                PostRequest("FX_GET", (root) => {
 | 
			
		||||
@@ -217,6 +223,22 @@ module.exports.serverIO = function(server) {
 | 
			
		||||
                })
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if(user.checkPermission("METRICS")) {
 | 
			
		||||
                GetRequest("MT_ALL", async () => {
 | 
			
		||||
                    GetAnswer("MT_ALL", await metrics.getMetrics())
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
                PostRequest("MT_ADD", async (settings) => { 
 | 
			
		||||
                    PostAnswer("MT_ADD", await metrics.addMetric(settings))
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
                PostRequest("MT_DELETE", async (settings) => {
 | 
			
		||||
                    PostAnswer("MT_DELETE", await metrics.deleteMetric(settings))
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
                
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            socket.on("disconnect", (reason) => {
 | 
			
		||||
                plog.log("Déconnexion du panel par '" + user.username + "' avec le socket : " + socket.id)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										57
									
								
								bin/users.js
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								bin/users.js
									
									
									
									
									
								
							@@ -77,7 +77,7 @@ module.exports.fetchUsers = function () {
 | 
			
		||||
            ],
 | 
			
		||||
            "tokens": [],
 | 
			
		||||
            "lastLogin": "DEFAULT ACCOUNT",
 | 
			
		||||
            "picture": "/images/users/default.jpg"
 | 
			
		||||
            "picture": "/images/default.jpg"
 | 
			
		||||
          })
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
@@ -103,7 +103,7 @@ module.exports.User =  class {
 | 
			
		||||
    permission = []
 | 
			
		||||
    tokens = [] 
 | 
			
		||||
    lastLogin = new Date()
 | 
			
		||||
    picture = "/images/users/default.jpg"
 | 
			
		||||
    picture = "/images/default.jpg"
 | 
			
		||||
    
 | 
			
		||||
    constructor(properties) {
 | 
			
		||||
 | 
			
		||||
@@ -164,7 +164,7 @@ module.exports.User =  class {
 | 
			
		||||
            this.lastLogin = new Date()
 | 
			
		||||
        }
 | 
			
		||||
        if(this.picture == null) {
 | 
			
		||||
            this.picture = "/images/users/default.jpg"
 | 
			
		||||
            this.picture = "/images/default.jpg"
 | 
			
		||||
        }
 | 
			
		||||
       
 | 
			
		||||
     
 | 
			
		||||
@@ -330,7 +330,7 @@ module.exports.User =  class {
 | 
			
		||||
        var pictureDir = __glob.USERS_IMAGES + path.sep + uuid.v4().toString() + ".png"
 | 
			
		||||
        fs.writeFileSync(pictureDir, file)
 | 
			
		||||
 | 
			
		||||
        this.picture = pictureDir.replace(__glob.USERS_IMAGES + path.sep, "/images/users/")
 | 
			
		||||
        this.picture = pictureDir.replace(__glob.USERS_IMAGES + path.sep, "/users/")
 | 
			
		||||
        this.register()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -383,7 +383,7 @@ module.exports.addUser = function(settings) {
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
        if(settings.picture == null) {
 | 
			
		||||
            pictureDir = "/images/users/default.jpg"
 | 
			
		||||
            pictureDir = "/images/default.jpg"
 | 
			
		||||
        } else {
 | 
			
		||||
            pictureDir = __glob.USERS_IMAGES + path.sep + uuid.v4().toString() + ".png"
 | 
			
		||||
            fs.writeFileSync(pictureDir, settings.picture)
 | 
			
		||||
@@ -465,6 +465,53 @@ module.exports.editUser = function(settings) {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports.editMySelf = function (settings, user) {
 | 
			
		||||
    if(user.username == settings.actualUsername) {
 | 
			
		||||
        if(settings.username == '') {
 | 
			
		||||
            ulog.error("Le nom d'utilisateur est manquant")
 | 
			
		||||
            return "USERNAME_MISSING"
 | 
			
		||||
        } else if(settings.display_name == '') {
 | 
			
		||||
            ulog.error("Le nom d'affichage est manquant")
 | 
			
		||||
            return "DISPLAY_NAME_MISSING"
 | 
			
		||||
        } else {
 | 
			
		||||
            ulog.step.init("edit_user", "Modification d'un utilisateur dans la base de donnée : " + settings.username)
 | 
			
		||||
            const user = this.fetchUsers().get(settings.username)
 | 
			
		||||
            if(user) {
 | 
			
		||||
                console.log(settings)
 | 
			
		||||
                if(settings.newusername && settings.newusername != settings.username) {
 | 
			
		||||
                    if(this.getUser(settings.newusername)) {
 | 
			
		||||
                        ulog.error("L'utilisateur existe déjà : " + settings.username)
 | 
			
		||||
                        return "ALREADY_EXIST"
 | 
			
		||||
                    } else {
 | 
			
		||||
 | 
			
		||||
                        user.setNewUsername(settings.newusername)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if(settings.display_name) {
 | 
			
		||||
                    user.setDisplayName(settings.display_name)
 | 
			
		||||
                }
 | 
			
		||||
            
 | 
			
		||||
                if(settings.password) {
 | 
			
		||||
                    user.setPassword(settings.password)
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                if(settings.picture) {
 | 
			
		||||
                    user.setPicture(settings.picture)
 | 
			
		||||
                }
 | 
			
		||||
                ulog.step.end("edit_user")
 | 
			
		||||
                return "OK"
 | 
			
		||||
            } else {
 | 
			
		||||
                ulog.step.end("edit_user")
 | 
			
		||||
                return "NOT_EXIST"
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        ulog.error("Vous ne pouvez pas modifier les informations d'un autre utilisateur !")
 | 
			
		||||
        return "NOT_ALLOWED"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports.clearTokens = function(username) {
 | 
			
		||||
   
 | 
			
		||||
    const user = this.fetchUsers().get(username)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user