298 lines
8.8 KiB
JavaScript
298 lines
8.8 KiB
JavaScript
|
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;
|