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