import conn from "./Conn.js"; import hash from "./hash.js"; import { emailRegex } from "./EmailCheck.js"; import { phoneRegex } from "./PhoneNumberCheck.js"; import crypto from "crypto"; import CheckPermission from "./CheckPermission.js"; class User { async register(user) { //CONCAT + const sql = `INSERT INTO users (IsAdmin, Name, Phone, Email, Pass, ZIP, City, Address) VALUES(?,?,?,?,?,?,?,?)`; let errors = []; if(!emailRegex.test(user.email)) { errors.push("A megadott email cím formátuma nem megfelelő!"); } if(user.pass.length < 8) { errors.push("A jelszónak legalább 8 karakteresnek kell lennie!"); } if(user.pass !== user.passAgain) { errors.push("A két jelszó nem egyezik meg!"); } if(!phoneRegex.test(user.phone)) { errors.push("A telefonszám formátuma érvénytelen. Kérjük, a +36-os országkóddal kezdődő 9 számjegyet adjon meg!") } if(await this.checkEmail(user.email) !== 0) errors.push("A megadott email címmel már regisztráltak a felületen!") if(errors.length > 0) { return { status:400, messages:errors }; } try { await conn.promise().query(sql, [ false, user.fullName, user.phone, user.email, hash(user.pass), user.zip, user.city, user.address ] ); return { status:200, messages:["Sikeres regisztráció!"] } } catch(err) { console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async login(user, res) { const sql = `SELECT UserID, IsAdmin, Email FROM users WHERE Email = ? AND PAss = ?`; const token = crypto.randomBytes(64).toString('hex'); //??????????? Nem használunk tokent try { const userData = await conn.promise().query(sql, [user.email, hash(user.pass)]); if(userData[0].length === 1) { const userID = parseInt(userData[0][0].UserID); const isAdmin = parseInt(userData[0][0].IsAdmin); const email = userData[0][0].Email; const expires = new Date(Date.now() + 7 * 24 * 60 * 60 *1000); res.cookie("userID", userID, {expires:expires, httpOnly:true}); res.cookie("isAdmin", isAdmin, {expires:expires, httpOnly:true}); res.cookie("email", email, {expires: expires, httpOnly:true}); return { messages:{isAdmin:isAdmin, email: email, userID:userID, token:token, uzenet:["Sikeres belépés"]}, status:200 }; } else { return { messages:["Nem megfelelő felhasználónév/jelszó páros!"], status:403 }; } } catch(err) { console.log(err); return { status:503, messages: ["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async getUsers(isAdmin) { const sql = "SELECT * FROM users"; try { const response = await conn.promise().query(sql); return { status:200, messages:response[0] } } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async deleteUser(userID, c_userID, isAdmin) { const sql = `DELETE FROM users WHERE UserID = ?`; if(!CheckPermission(c_userID, isAdmin, true)) { return { status:403, messages:["Nincs jogosultságod törölni a bejegyzést!"] } } try { const response = await conn.promise().query(sql, [userID]); if(response[0].affectedRows === 1) { return { status:200, messages:"Sikeres törlés!" } } else { return { status:404, messages:"A felhasználó nem található a megadott ID alapján!" } } } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage) return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async checkEmail(email) { const sql = `SELECT COUNT(*) as EmailExist FROM users WHERE Email = ?`; try { const response = await conn.promise().query(sql, [email]); return parseInt(response[0][0].EmailExist); } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async resetPass(user) { const sql = `UPDATE users SET Pass = ? WHERE Email = ?`; try { if(await this.checkEmail(user.email) !== 0){ const response = await conn.promise().query(sql, [ hash(user.pass), user.email, ]); if(response[0].affectedRows === 1) { return { status:200, messages:["Sikeres felülírás!"] } } } else { return { status:404, messages:["A megadott email cím nem szerepel az adatbázisban! "] } } } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async searchUsers(char) { const sql = `SELECT * FROM users WHERE name LIKE ?`; const startingP = `${char}%`; try { const data = await conn.promise().query(sql, [startingP]); if(data[0].length !== 0) { return { status:200, messages: data[0] }; } else { return { status: 404, messages:["A keresett erőforrás nem található!"] }; } } catch (err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages: ["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async getProfile(userID) { const sql = `SELECT * FROM users WHERE UserID = ?`; if(userID === null || userID === undefined || userID === "") { return { status:403, messages:["Nem vagy belépve! Kérlek, lépj be előbb a felületre!"] } } try { const response = await conn.promise().query(sql, [userID]); if(response[0].length == 1) { return { status:200, messages:response[0][0] } } else{ return { status:404, messages:["Nem találtam a profilodhoz adatot!"] } } } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } } export default User;