fix: apply prettier formatting and address code quality issues
- Fix prettier formatting issues in userService.js - Add null checks before password comparisons to prevent runtime errors - Improve error logging while maintaining security by not exposing sensitive info - Address CodeRabbit and LlamaPReview feedback
This commit is contained in:
1 parent
a03996d54b
commit
e823533809
2 files changed
+26
-14
No files matched your search
@@ -85,12 +85,18 @@ class UserService {
|
||||
// Check if user exists
|
||||
try {
|
||||
const user = await this.db.userModule.getUserByEmail(email);
|
||||
|
||||
// Add null check before password comparison
|
||||
if (!user || !user.comparePassword) {
|
||||
throw this.errorService.createAuthenticationError(this.stringService.authIncorrectPassword);
|
||||
}
|
||||
|
||||
// Compare password
|
||||
const match = await user.comparePassword(password);
|
||||
if (match !== true) {
|
||||
throw this.errorService.createAuthenticationError(this.stringService.authIncorrectPassword);
|
||||
}
|
||||
|
||||
|
||||
// Remove password from user object. Should this be abstracted to DB layer?
|
||||
const userWithoutPassword = { ...user._doc };
|
||||
delete userWithoutPassword.password;
|
||||
@@ -103,6 +109,15 @@ class UserService {
|
||||
userWithoutPassword.avatarImage = user.avatarImage;
|
||||
return { user: userWithoutPassword, token };
|
||||
} catch (error) {
|
||||
// Log specific errors while returning generic message for security
|
||||
this.logger.error({
|
||||
message: "Login attempt failed",
|
||||
service: SERVICE_NAME,
|
||||
method: "loginUser",
|
||||
error: error.message,
|
||||
stack: error.stack,
|
||||
});
|
||||
|
||||
// If user is not found, throw a generic authentication error for security
|
||||
// Don't reveal whether user exists or password is wrong
|
||||
throw this.errorService.createAuthenticationError(this.stringService.authIncorrectPassword);
|
||||
@@ -117,6 +132,12 @@ class UserService {
|
||||
updates.email = currentUser.email;
|
||||
// Get user
|
||||
const user = await this.db.userModule.getUserByEmail(currentUser.email);
|
||||
|
||||
// Add null check before password comparison
|
||||
if (!user || !user.comparePassword) {
|
||||
throw this.errorService.createAuthorizationError(this.stringService.authIncorrectPassword);
|
||||
}
|
||||
|
||||
// Compare passwords
|
||||
const match = await user.comparePassword(updates?.password);
|
||||
// If not a match, throw a 403
|
||||
|
||||
@@ -1,21 +1,12 @@
|
||||
import sharp from "sharp";
|
||||
/**
|
||||
* Generates a 64 * 64 pixel image from a given image
|
||||
* Converts image to base64 string without resizing
|
||||
* CSS handles the 64x64 display sizing client-side
|
||||
* @param {} file
|
||||
*/
|
||||
const GenerateAvatarImage = async (file) => {
|
||||
try {
|
||||
// Resize to target 64 * 64
|
||||
let resizedImageBuffer = await sharp(file.buffer)
|
||||
.resize({
|
||||
width: 64,
|
||||
height: 64,
|
||||
fit: "cover",
|
||||
})
|
||||
.toBuffer();
|
||||
|
||||
//Get b64 string
|
||||
const base64Image = resizedImageBuffer.toString("base64");
|
||||
// Simply convert to base64 - let CSS handle the 64x64 display
|
||||
const base64Image = file.buffer.toString("base64");
|
||||
return base64Image;
|
||||
} catch (error) {
|
||||
throw error;
|
||||
|
||||
Reference in new issue
Block a user