Version 0.6.0 - Ajout des utilisateurs et des paramètres V1
	
		
			
	
		
	
	
		
	
		
			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
									
								
								bin/auth.js
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								bin/auth.js
									
									
									
									
									
								
							@@ -14,7 +14,7 @@ const users = require("./users")
 | 
			
		||||
module.exports.check = function(token) {
 | 
			
		||||
    var isApproved = false;
 | 
			
		||||
    var username = null
 | 
			
		||||
    users.getUsers().forEach((fetchUser) => {
 | 
			
		||||
    users.fetchUsers().forEach((fetchUser) => {
 | 
			
		||||
        if(fetchUser.tokens.includes(token)) {
 | 
			
		||||
            isApproved = true
 | 
			
		||||
            username = fetchUser.username
 | 
			
		||||
@@ -42,8 +42,8 @@ module.exports.login = function(data) {
 | 
			
		||||
    var username = data.username
 | 
			
		||||
    var password = data.password
 | 
			
		||||
 | 
			
		||||
    if(users.getUsers().has(username)) {
 | 
			
		||||
        const user = users.getUsers().get(username)
 | 
			
		||||
    if(users.fetchUsers().has(username)) {
 | 
			
		||||
        const user = users.fetchUsers().get(username)
 | 
			
		||||
        if(password == user.getPassword()) {
 | 
			
		||||
            const token = user.generateToken()
 | 
			
		||||
            alog.log("Connexion approuvé de l'utilisateur : " + username)
 | 
			
		||||
@@ -67,7 +67,7 @@ module.exports.login = function(data) {
 | 
			
		||||
module.exports.signout = function(token) {
 | 
			
		||||
    var isDone = false;
 | 
			
		||||
    var username = null
 | 
			
		||||
    users.getUsers().forEach((fetchUser) => {
 | 
			
		||||
    users.fetchUsers().forEach((fetchUser) => {
 | 
			
		||||
        if(fetchUser.tokens.includes(token)) {
 | 
			
		||||
            isDone = true
 | 
			
		||||
            username = fetchUser.username
 | 
			
		||||
@@ -92,7 +92,7 @@ module.exports.signout = function(token) {
 | 
			
		||||
module.exports.getUserByToken = function(token) {
 | 
			
		||||
    var isApproved = false;
 | 
			
		||||
    var userGetted = null
 | 
			
		||||
    users.getUsers().forEach((fetchUser) => {
 | 
			
		||||
    users.fetchUsers().forEach((fetchUser) => {
 | 
			
		||||
        if(fetchUser.tokens.includes(token)) {
 | 
			
		||||
            userGetted = fetchUser
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -35,3 +35,14 @@ module.exports.updateFile = function (file) {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports.getSettings = function () {
 | 
			
		||||
    const file = this.getFile()
 | 
			
		||||
    return {"jenkins_token": file.JENKINS_TOKEN, "omega_token": file.OMEGA_KEY}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports.saveSettings = function (settings) {
 | 
			
		||||
    const file = this.getFile()
 | 
			
		||||
    file.JENKINS_TOKEN = settings.jenkins_token
 | 
			
		||||
    file.OMEGA_KEY = settings.omega_token
 | 
			
		||||
    this.updateFile(file)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,12 @@ module.exports.getFiles = function(root) {
 | 
			
		||||
        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if(root == "logpath") {
 | 
			
		||||
 | 
			
		||||
            root = __glob.LOGS
 | 
			
		||||
        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        if(!fs.existsSync(root)) {
 | 
			
		||||
           response.content = "NOT_EXIST" 
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ 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",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,9 @@ const fs = require("fs")
 | 
			
		||||
const path = require("path")
 | 
			
		||||
const { __glob } = require("./global-variables.js")
 | 
			
		||||
const auth = require("./auth.js")
 | 
			
		||||
const users = require("./users.js")
 | 
			
		||||
const files = require("./files.js")
 | 
			
		||||
const config = require("./config.js")
 | 
			
		||||
const links = require("./links.js")
 | 
			
		||||
const service = require("./services.js")
 | 
			
		||||
const pipeline = require("./pipelines.js")
 | 
			
		||||
@@ -11,6 +13,7 @@ const plog = new LogType("Web")
 | 
			
		||||
const cook = require("cookie")
 | 
			
		||||
const http = require("http")
 | 
			
		||||
const servermetrics = require("./server-metrics.js")
 | 
			
		||||
const pm2 = require('pm2');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * NOTE INTERNE
 | 
			
		||||
@@ -25,11 +28,16 @@ const servermetrics = require("./server-metrics.js")
 | 
			
		||||
 | 
			
		||||
module.exports.serverIO = function(server) {
 | 
			
		||||
 | 
			
		||||
    const io = require('socket.io')(server)
 | 
			
		||||
    const io = require('socket.io')(server, {
 | 
			
		||||
        maxHttpBufferSize: 1e8,
 | 
			
		||||
        pingTimeout: 60000
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
    io.on("connection", (socket) => {
 | 
			
		||||
 | 
			
		||||
        let token = cook.parse(socket.handshake.headers.cookie).token
 | 
			
		||||
        const user = auth.getUserByToken(token)
 | 
			
		||||
        var user = auth.getUserByToken(token)
 | 
			
		||||
 | 
			
		||||
        if(user) {
 | 
			
		||||
            plog.log("Connexion au panel par '" + user.username + "' avec le socket : " + socket.id)
 | 
			
		||||
@@ -40,7 +48,7 @@ module.exports.serverIO = function(server) {
 | 
			
		||||
 | 
			
		||||
            // Get Users
 | 
			
		||||
            GetRequest("USERINFO", () => {
 | 
			
		||||
 | 
			
		||||
                user = auth.getUserByToken(token)
 | 
			
		||||
                GetAnswer("USERINFO", {username: user.username, display_name: user.display_name ,picture: user.picture, permission: user.permission})
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
@@ -163,11 +171,57 @@ module.exports.serverIO = function(server) {
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            socket.on("disconnect", () => {
 | 
			
		||||
            if(user.checkPermission("USERS")) {
 | 
			
		||||
                GetRequest("US_ALL", async () => {
 | 
			
		||||
                    GetAnswer("US_ALL", await users.getAllUsers())
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
                PostRequest("US_ADD", async (settings) => {
 | 
			
		||||
                    PostAnswer("US_ADD", await users.addUser(settings))
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
                PostRequest("US_DELETE", async (settings) => {
 | 
			
		||||
                    PostAnswer("US_DELETE", await users.deleteUser(settings))
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
                PostRequest("US_EDIT", async (settings) => {
 | 
			
		||||
                    PostAnswer("US_EDIT", await users.editUser(settings))
 | 
			
		||||
                })
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if(user.checkPermission("SETTINGS")) {
 | 
			
		||||
                PostRequest("SETTINGS_SAVE", async (settings) => {
 | 
			
		||||
                    PostAnswer("SETTINGS_SAVE", await config.saveSettings(settings))
 | 
			
		||||
                })
 | 
			
		||||
                PostRequest("SERVER_RESTART", async () => {
 | 
			
		||||
                    pm2.restart('Neutral')
 | 
			
		||||
                })
 | 
			
		||||
                PostRequest("SERVER_STOP", async () => {
 | 
			
		||||
                    pm2.stop('Neutral')
 | 
			
		||||
                })
 | 
			
		||||
                GetRequest("SERVER_GET_LOGS", async () => {
 | 
			
		||||
                    GetAnswer("SERVER_GET_LOGS", await fs.readdirSync(__glob.LOGS))
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
                PostRequest("SERVER_READ_LOG", async (logs) => {
 | 
			
		||||
                    PostAnswer("SERVER_READ_LOG", await fs.readFileSync(__glob.LOGS + path.sep + logs).toString())
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
                GetRequest("SETTINGS_GET", async () => {
 | 
			
		||||
                    GetAnswer("SETTINGS_GET", await config.getSettings())
 | 
			
		||||
                })
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            socket.on("disconnect", (reason) => {
 | 
			
		||||
                plog.log("Déconnexion du panel par '" + user.username + "' avec le socket : " + socket.id)
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
            socket.on("connect_error", (err) => {
 | 
			
		||||
                console.log(err)
 | 
			
		||||
                console.log(err.message); // prints the message associated with the error
 | 
			
		||||
              });
 | 
			
		||||
 | 
			
		||||
            function GetRequest(GQname, GQcallback) {
 | 
			
		||||
                socket.on("GET/" + GQname, () => {
 | 
			
		||||
                
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										156
									
								
								bin/users.js
									
									
									
									
									
								
							
							
						
						
									
										156
									
								
								bin/users.js
									
									
									
									
									
								
							@@ -18,22 +18,30 @@ function setup() {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * @returns Liste des utilisateurs
 | 
			
		||||
 */
 | 
			
		||||
module.exports.getUsers = function () {
 | 
			
		||||
module.exports.getAllUsers = async function() {
 | 
			
		||||
    return new Promise(async (resolve, reject) => {
 | 
			
		||||
        const users = await this.fetchUsers()
 | 
			
		||||
 | 
			
		||||
    return usersList
 | 
			
		||||
        // Remove for every people the password & the tokens
 | 
			
		||||
 | 
			
		||||
        for(var user of users) {
 | 
			
		||||
            user = user[1]
 | 
			
		||||
            user.password = null
 | 
			
		||||
            user.tokens = null
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        resolve(JSON.stringify(Array.from(users)))
 | 
			
		||||
    })
 | 
			
		||||
   
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get all users from Users Data Base
 | 
			
		||||
 */
 | 
			
		||||
module.exports.fetchUsers = function () {
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    ulog.step.init("fetch_user", "Récupération de tous les utilisateurs inscrit dans la base de donnée")
 | 
			
		||||
    const userFile = getFile()
 | 
			
		||||
    usersList = new Map()
 | 
			
		||||
@@ -80,6 +88,8 @@ module.exports.fetchUsers = function () {
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    ulog.step.end("fetch_user")
 | 
			
		||||
 | 
			
		||||
    return usersList
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -177,6 +187,7 @@ module.exports.User =  class {
 | 
			
		||||
        }
 | 
			
		||||
        userFile.push(this)
 | 
			
		||||
        updateFile(userFile)
 | 
			
		||||
    
 | 
			
		||||
        usersList.set(this.username, this)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -298,12 +309,37 @@ module.exports.User =  class {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setNewUsername(text) {
 | 
			
		||||
        this.#sync()
 | 
			
		||||
        module.exports.deleteUser(this.username)
 | 
			
		||||
        this.username = text
 | 
			
		||||
        this.register()
 | 
			
		||||
 | 
			
		||||
        ulog.log("Le nom d'utilisateur de l'utilisateur a été modifié : " + this.username) 
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setLastLogin(text) {
 | 
			
		||||
        this.#sync()
 | 
			
		||||
        this.lastLogin = text
 | 
			
		||||
        this.register()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setPicture(file) {
 | 
			
		||||
        this.#sync()
 | 
			
		||||
        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.register()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setPermissions(permissions) {
 | 
			
		||||
        this.#sync()
 | 
			
		||||
        this.permission = permissions
 | 
			
		||||
        this.register()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #sync() {
 | 
			
		||||
 | 
			
		||||
        for(var userGet of usersList.keys()) {
 | 
			
		||||
@@ -321,6 +357,108 @@ module.exports.User =  class {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports.addUser = function(settings) {
 | 
			
		||||
 | 
			
		||||
   if(settings.username == '') {
 | 
			
		||||
       ulog.error("Le nom d'utilisateur est manquant")
 | 
			
		||||
       return "USERNAME_MISSING"
 | 
			
		||||
   } else if(settings.password == '') {
 | 
			
		||||
         ulog.error("Le mot de passe est manquant")
 | 
			
		||||
            return "PASSWORD_MISSING"
 | 
			
		||||
    } else if(settings.display_name == '') {
 | 
			
		||||
        ulog.error("Le nom d'affichage est manquant")
 | 
			
		||||
        return "DISPLAY_NAME_MISSING"
 | 
			
		||||
    } else if(this.getUser(settings.username)) {
 | 
			
		||||
       ulog.error("L'utilisateur existe déjà : " + settings.username)
 | 
			
		||||
       return "ALREADY_EXIST"
 | 
			
		||||
    } else {
 | 
			
		||||
        ulog.step.init("add_user", "Ajout d'un utilisateur dans la base de donnée : " + settings.username)
 | 
			
		||||
        var pictureDir = null
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
        if(settings.picture == null) {
 | 
			
		||||
            pictureDir = "/images/users/default.jpg"
 | 
			
		||||
        } else {
 | 
			
		||||
            pictureDir = __glob.USERS_IMAGES + path.sep + uuid.v4().toString() + ".png"
 | 
			
		||||
            fs.writeFileSync(pictureDir, settings.picture)
 | 
			
		||||
  
 | 
			
		||||
           
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
        const user = new this.User({
 | 
			
		||||
            username: settings.username,
 | 
			
		||||
            display_name: settings.display_name,
 | 
			
		||||
            permission: settings.permissions,
 | 
			
		||||
            picture: pictureDir.replace(__glob.USERS_IMAGES + path.sep, "/images/users/")
 | 
			
		||||
    
 | 
			
		||||
        })
 | 
			
		||||
    
 | 
			
		||||
        user.setPassword(settings.password)
 | 
			
		||||
        user.register()
 | 
			
		||||
        ulog.step.end("add_user")
 | 
			
		||||
    }
 | 
			
		||||
   
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports.deleteUser = function(username) {
 | 
			
		||||
    ulog.step.init("delete_user", "Suppression d'un utilisateur dans la base de donnée : " + username)
 | 
			
		||||
    const user = this.getUser(username)
 | 
			
		||||
    user.unregister()
 | 
			
		||||
    ulog.step.end("delete_user")
 | 
			
		||||
    return "OK"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
module.exports.getUser = function(username) {
 | 
			
		||||
    return usersList.get(username)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports.editUser = function(settings) {
 | 
			
		||||
    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)
 | 
			
		||||
            }
 | 
			
		||||
            if(settings.permissions) {
 | 
			
		||||
 | 
			
		||||
                user.setPermissions(settings.permissions)
 | 
			
		||||
            } 
 | 
			
		||||
            ulog.step.end("edit_user")
 | 
			
		||||
            return "OK"
 | 
			
		||||
        } else {
 | 
			
		||||
            ulog.step.end("edit_user")
 | 
			
		||||
            return "NOT_EXIST"
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user