the beginning of the idiots
This commit is contained in:
106
qwen/nodejs/services/authService.js
Normal file
106
qwen/nodejs/services/authService.js
Normal file
@@ -0,0 +1,106 @@
|
||||
// services/authService.js
|
||||
const jwt = require('jsonwebtoken');
|
||||
const bcrypt = require('bcryptjs');
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
const { User } = require('../models'); // Assuming we have a User model
|
||||
|
||||
const JWT_SECRET = process.env.JWT_SECRET || 'fallback_secret';
|
||||
|
||||
// Mock database - in real implementation, this would be a real database
|
||||
const users = [];
|
||||
|
||||
const login = async (email, password) => {
|
||||
try {
|
||||
// Find user by email
|
||||
const user = users.find(u => u.email === email);
|
||||
|
||||
if (!user) {
|
||||
return { error: 'Invalid email or password' };
|
||||
}
|
||||
|
||||
// Check password
|
||||
const isPasswordValid = await bcrypt.compare(password, user.passwordHash);
|
||||
|
||||
if (!isPasswordValid) {
|
||||
return { error: 'Invalid email or password' };
|
||||
}
|
||||
|
||||
// Generate JWT token
|
||||
const token = jwt.sign(
|
||||
{ userId: user.id, email: user.email, tenantId: user.tenantId },
|
||||
JWT_SECRET,
|
||||
{ expiresIn: '24h' }
|
||||
);
|
||||
|
||||
// Return user info and token (excluding password)
|
||||
return {
|
||||
user: {
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
firstName: user.firstName,
|
||||
lastName: user.lastName,
|
||||
userType: user.userType,
|
||||
tenantId: user.tenantId
|
||||
},
|
||||
token
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Login service error:', error);
|
||||
return { error: 'Internal server error' };
|
||||
}
|
||||
};
|
||||
|
||||
const register = async (email, password, firstName, lastName, userType, tenantId) => {
|
||||
try {
|
||||
// Check if user already exists
|
||||
const existingUser = users.find(u => u.email === email);
|
||||
|
||||
if (existingUser) {
|
||||
return { error: 'User with this email already exists' };
|
||||
}
|
||||
|
||||
// Validate user type
|
||||
if (!['job-seeker', 'job-provider'].includes(userType)) {
|
||||
return { error: 'User type must be either job-seeker or job-provider' };
|
||||
}
|
||||
|
||||
// Hash password
|
||||
const saltRounds = 12;
|
||||
const passwordHash = await bcrypt.hash(password, saltRounds);
|
||||
|
||||
// Create new user
|
||||
const newUser = {
|
||||
id: uuidv4(),
|
||||
email,
|
||||
passwordHash,
|
||||
firstName,
|
||||
lastName,
|
||||
userType,
|
||||
tenantId,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date()
|
||||
};
|
||||
|
||||
users.push(newUser);
|
||||
|
||||
// Return user info (excluding password)
|
||||
return {
|
||||
user: {
|
||||
id: newUser.id,
|
||||
email: newUser.email,
|
||||
firstName: newUser.firstName,
|
||||
lastName: newUser.lastName,
|
||||
userType: newUser.userType,
|
||||
tenantId: newUser.tenantId
|
||||
}
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Registration service error:', error);
|
||||
return { error: 'Internal server error' };
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
login,
|
||||
register
|
||||
};
|
||||
Reference in New Issue
Block a user