var fs = require("fs") var uuid = require('uuid') var path = require("path") var CryptoJS = require("crypto-js") module.exports.createUser = (name, password) => { const passcrypt = CryptoJS.AES.encrypt(password, "D*G-KaPdSgVkYp3s"); const userUUID = uuid.v4(); const userData = { "username":name, "password": passcrypt.toString(), "uuid": userUUID, "token":{ } } fs.writeFileSync(__dirname + path.sep + "users" + path.sep + userUUID + ".json", JSON.stringify(userData, null, 2)) } module.exports.checkToken = (req, res) => { const tokens = this.getAllToken() const users = this.getUsers() if(req.cookies.tokenID == null) { return false; } else if(tokens.has(req.cookies.tokenID)) { const user = tokens.get(req.cookies.tokenID) const userData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + users.get(user) + ".json", 'utf-8')) if(userData.token.livableToken == true) { return user; } else { const tokenDate = new Date(userData.token.createdAt) const nowDate = new Date(Date.now()) if(tokenDate.getDay() == nowDate.getDay() && tokenDate.getMonth() == nowDate.getMonth()) { return user; } else { res.clearCookie('tokenID'); return false; } } } else { return false; } return false; } module.exports.getFullName = (username) => { const userData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + this.getUUID(username) + ".json", 'utf-8')) return userData.fullname } module.exports.generateTokenID = (username, userData, req, users) => { const tokenID = uuid.v4() const date = Date.now() var newUserData = userData; var livable = false; if(req.body.remindus == true) { livable = true; } Object.defineProperties(newUserData, { token: { value: { "tokenID":tokenID, "livableToken": livable, "createdAt": date }, writable: true } }) fs.writeFileSync(__dirname + path.sep + "users" + path.sep + users.get(username) + ".json", JSON.stringify(newUserData, null, 2)) return tokenID } module.exports.getUsers = () => { const users = new Map(); fs.readdirSync(__dirname + path.sep + "users").forEach(file => { const fileData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + file, 'utf-8')) users.set(fileData.username, fileData.uuid) }) return users } module.exports.getAllToken = () => { const token = new Map(); fs.readdirSync(__dirname + path.sep + "users").forEach(file => { const fileData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + file, 'utf-8')) token.set(fileData.token.tokenID, fileData.username) }) return token } module.exports.getUUID = (username) => { const users = new Map(); fs.readdirSync(__dirname + path.sep + "users").forEach(fileD => { const fileData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + fileD, 'utf-8')) users.set(fileData.username, fileData.uuid) }) return users.get(username); } module.exports.changeFullName = (username, req, res) => { const userData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + this.getUUID(this.checkToken(req, res)) + ".json", 'utf-8')) Object.defineProperties(userData, { fullname: { value: username, writable: true } }) const user = this.getUUIDRequest(req); fs.writeFileSync(__dirname + path.sep + "users" + path.sep + user + ".json", JSON.stringify(userData, null, 2)) } module.exports.getUUIDRequest = (req) => { const users = this.getUsers() const tokens = this.getAllToken() users.get(tokens.get(req.cookies.tokenID)) if(req.cookies.tokenID == null) { return false; } else if(tokens.has(req.cookies.tokenID)) { return users.get(tokens.get(req.cookies.tokenID)) } else { return false; } } module.exports.changePassword = (req, res) => { const userData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + this.getUUID(this.checkToken(req, res)) + ".json", 'utf-8')) const oldp = CryptoJS.AES.encrypt(req.body.additional, "D*G-KaPdSgVkYp3s") const newp = CryptoJS.AES.encrypt(req.body.value, "D*G-KaPdSgVkYp3s") if(CryptoJS.AES.decrypt(oldp, "D*G-KaPdSgVkYp3s").toString(CryptoJS.enc.Utf8) == CryptoJS.AES.decrypt(userData.password, "D*G-KaPdSgVkYp3s").toString(CryptoJS.enc.Utf8)) { Object.defineProperties(userData, { password: { value: newp.toString(), writable: true } }) const user = this.getUUIDRequest(req); fs.writeFileSync(__dirname + path.sep + "users" + path.sep + user + ".json", JSON.stringify(userData, null, 2)) res.send({"result":"success", "content": "Le mot de passe a été changé avec succès."}) } else { res.send({"result":"success", "content": "Le mot de passe actuel est éronné."}) } }