Software: Apache. PHP/8.1.30 uname -a: Linux server1.tuhinhossain.com 5.15.0-163-generic #173-Ubuntu SMP Tue Oct 14 17:51:00 UTC uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root) Safe-mode: OFF (not secure) /home/picotech/domains/note.picotech.app/public_html/src/models/ drwxr-xr-x | |
| Viewing file: Select action/file-type: const { DataTypes } = require('sequelize');
const bcrypt = require('bcryptjs');
const { sequelize } = require('../config/database');
const { encryptForDB } = require('../services/encryptionService');
const User = sequelize.define('User', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
email: {
type: DataTypes.STRING(255),
allowNull: false,
unique: true,
validate: {
isEmail: true,
},
},
name: {
type: DataTypes.STRING(255),
allowNull: false,
validate: {
len: [2, 255],
},
},
password_hash: {
type: DataTypes.STRING(255),
allowNull: false,
},
avatar_url: {
type: DataTypes.STRING(500),
allowNull: true,
},
is_active: {
type: DataTypes.BOOLEAN,
defaultValue: true,
},
last_login: {
type: DataTypes.DATE,
allowNull: true,
},
email_verified: {
type: DataTypes.BOOLEAN,
defaultValue: false,
},
verification_token: {
type: DataTypes.TEXT,
allowNull: true,
},
reset_password_token: {
type: DataTypes.TEXT,
allowNull: true,
},
reset_password_expires: {
type: DataTypes.DATE,
allowNull: true,
},
}, {
tableName: 'users',
timestamps: true,
hooks: {
beforeCreate: async (user) => {
if (user.password_hash) {
const salt = await bcrypt.genSalt(12);
user.password_hash = await bcrypt.hash(user.password_hash, salt);
}
// Encrypt sensitive tokens
if (user.verification_token) {
user.verification_token = encryptForDB(user.verification_token);
}
if (user.reset_password_token) {
user.reset_password_token = encryptForDB(user.reset_password_token);
}
},
beforeUpdate: async (user) => {
if (user.changed('password_hash')) {
const salt = await bcrypt.genSalt(12);
user.password_hash = await bcrypt.hash(user.password_hash, salt);
}
// Encrypt sensitive tokens on update
if (user.changed('verification_token') && user.verification_token) {
user.verification_token = encryptForDB(user.verification_token);
}
if (user.changed('reset_password_token') && user.reset_password_token) {
user.reset_password_token = encryptForDB(user.reset_password_token);
}
},
},
});
// Instance methods
User.prototype.validatePassword = async function(password) {
return bcrypt.compare(password, this.password_hash);
};
User.prototype.toJSON = function() {
const values = { ...this.get() };
delete values.password_hash;
delete values.verification_token;
delete values.reset_password_token;
delete values.reset_password_expires;
return values;
};
// Class methods
User.findByEmail = function(email) {
return this.findOne({ where: { email } });
};
User.findActiveById = function(id) {
return this.findOne({
where: {
id,
is_active: true
}
});
};
module.exports = User; |
:: Command execute :: | |
--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0033 ]-- |