Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2023
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | Source Code | 0 0
  1. require('dotenv').config();
  2. const bcrypt = require('bcrypt');
  3. const mysql = require('mysql');
  4. const { hashPassword } = require("mysql/lib/protocol/Auth");
  5. const { promise } = require("bcrypt/promises");
  6. const util = require('util');
  7.  
  8. const connection = mysql.createConnection({
  9. host: process.env.database_host,
  10. port: process.env.database_port,
  11. user: process.env.database_user,
  12. password: process.env.database_password,
  13. database: process.env.database_database,
  14. });
  15.  
  16. connection.connect();
  17.  
  18. const query = util.promisify(connection.query).bind(connection);
  19.  
  20. class User {
  21. constructor(id, firstName, lastName, username, email, password) {
  22. this.id = id;
  23. this.firstName = firstName;
  24. this.lastName = lastName;
  25. this.username = username;
  26. this.email = email;
  27. this.password = password;
  28. }
  29. hashPassword(password) {
  30. const saltRounds = 10;
  31. const salt = bcrypt.genSaltSync(saltRounds);
  32. return bcrypt.hashSync(password, salt);
  33. }
  34.  
  35. async setPassword(password) {
  36. const savedUser = await connection.query(`UPDATE Users SET password = ? WHERE id = ?`,[this.hashPassword(password),this.id]);
  37.  
  38. if (savedUser) return savedUser; else return null;
  39. }
  40.  
  41. async save() {
  42. try {
  43. const myEmailUser = await User.find(this.email);
  44. if (myEmailUser) {
  45. return 'Email address already registered. Log in instead.'
  46. } else {
  47. try {
  48. const myUsernameUser = await User.find(this.username);
  49. if (myUsernameUser) {
  50. return 'Username already taken. Please choose a different username.'
  51. } else {
  52. const savedUser = await connection.query(`
  53. INSERT INTO Users (firstName, lastName, username, email, password) VALUES ('${this.firstName}', '${this.lastName}', '${this.username}', '${this.email}', '${this.hashPassword(this.password)}')`)
  54. // If the user is saved successfully, return the saved user object
  55. if (savedUser) return User.find(myUsernameUser);
  56. }
  57. } catch (error) {
  58. console.error(error);
  59. return null;
  60. }
  61. }
  62. } catch (error) {
  63. console.error(error);
  64. return null;
  65. }
  66. }
  67. async checkCredentials(password) {
  68. return await bcrypt.compare(password, this.password);
  69. }
  70.  
  71. static async find(query) {
  72. return new Promise((resolve, reject) => {
  73. connection.query(`SELECT * FROM Users WHERE email = ? OR username = ? OR id = ?`, [query, query, query], function (error, results, fields) {
  74. if (error) reject(error);
  75. const userFromDatabase = results[0];
  76. if (userFromDatabase) {
  77. const newUser = new User(userFromDatabase.id,userFromDatabase.firstName, userFromDatabase.lastName, userFromDatabase.username, userFromDatabase.email, userFromDatabase.password);
  78. resolve(newUser);
  79. } else {
  80. resolve(null);
  81. }
  82. });
  83. });
  84. }
  85. async delete() {
  86. return new Promise((resolve, reject) => {
  87. connection.query(`DELETE FROM Users WHERE id = ?`, [this.id], function (error, results, fields) {
  88. if (error) reject(error);
  89. console.log(results)
  90. console.log(results.affectedRows > 1)
  91. resolve(results.affectedRows > 1)
  92. });
  93. });
  94. }
  95. }
  96.  
  97. console.log(process.env.TEST)
  98.  
  99. module.exports = User;
  100.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement