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")) 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.delete('tokenID'); return false; } } } else { return false; } return false; } 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)) 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)) token.set(fileData.token.tokenID, fileData.username) }) return token }