Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require('dotenv').config();
- const bcrypt = require('bcrypt');
- const mysql = require('mysql');
- const { hashPassword } = require("mysql/lib/protocol/Auth");
- const { promise } = require("bcrypt/promises");
- const util = require('util');
- const connection = mysql.createConnection({
- host: process.env.database_host,
- port: process.env.database_port,
- user: process.env.database_user,
- password: process.env.database_password,
- database: process.env.database_database,
- });
- connection.connect();
- const query = util.promisify(connection.query).bind(connection);
- class User {
- constructor(id, firstName, lastName, username, email, password) {
- this.id = id;
- this.firstName = firstName;
- this.lastName = lastName;
- this.username = username;
- this.email = email;
- this.password = password;
- }
- hashPassword(password) {
- const saltRounds = 10;
- const salt = bcrypt.genSaltSync(saltRounds);
- return bcrypt.hashSync(password, salt);
- }
- async setPassword(password) {
- const savedUser = await connection.query(`UPDATE Users SET password = ? WHERE id = ?`,[this.hashPassword(password),this.id]);
- if (savedUser) return savedUser; else return null;
- }
- async save() {
- try {
- const myEmailUser = await User.find(this.email);
- if (myEmailUser) {
- return 'Email address already registered. Log in instead.'
- } else {
- try {
- const myUsernameUser = await User.find(this.username);
- if (myUsernameUser) {
- return 'Username already taken. Please choose a different username.'
- } else {
- const savedUser = await connection.query(`
- INSERT INTO Users (firstName, lastName, username, email, password) VALUES ('${this.firstName}', '${this.lastName}', '${this.username}', '${this.email}', '${this.hashPassword(this.password)}')`)
- // If the user is saved successfully, return the saved user object
- if (savedUser) return User.find(myUsernameUser);
- }
- } catch (error) {
- console.error(error);
- return null;
- }
- }
- } catch (error) {
- console.error(error);
- return null;
- }
- }
- async checkCredentials(password) {
- return await bcrypt.compare(password, this.password);
- }
- static async find(query) {
- return new Promise((resolve, reject) => {
- connection.query(`SELECT * FROM Users WHERE email = ? OR username = ? OR id = ?`, [query, query, query], function (error, results, fields) {
- if (error) reject(error);
- const userFromDatabase = results[0];
- if (userFromDatabase) {
- const newUser = new User(userFromDatabase.id,userFromDatabase.firstName, userFromDatabase.lastName, userFromDatabase.username, userFromDatabase.email, userFromDatabase.password);
- resolve(newUser);
- } else {
- resolve(null);
- }
- });
- });
- }
- async delete() {
- return new Promise((resolve, reject) => {
- connection.query(`DELETE FROM Users WHERE id = ?`, [this.id], function (error, results, fields) {
- if (error) reject(error);
- console.log(results)
- console.log(results.affectedRows > 1)
- resolve(results.affectedRows > 1)
- });
- });
- }
- }
- console.log(process.env.TEST)
- module.exports = User;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement