MCP Code Expert System
by tomsiwik
Verified
- mcp-experts
- examples
- javascript
// Global variables
var users = [];
var currentId = 0;
var loggedIn = false;
var current_user = null;
// Create a user
function createUser(u_name, u_pass, u_email, u_role, u_active) {
// Validate
if (u_name == "" || u_pass == "" || u_email == "") {
console.log("Error: Missing required fields");
return false;
}
// Create user object with incremented ID
currentId = currentId + 1;
var tmpuser = {
id: currentId,
username: u_name,
password: u_pass, // Should encrypt passwords!
email: u_email,
role: u_role,
active: u_active,
createdAt: new Date(),
loginAttempts: 0,
};
// Add to users array
users.push(tmpuser);
console.log("User created: " + u_name);
return true;
}
// Find a user by username
function findUserByUsername(username) {
for (var i = 0; i < users.length; i++) {
if (users[i].username === username) {
return users[i];
}
}
return null;
}
// Find a user by email
function findUserByEmail(email) {
for (var i = 0; i < users.length; i++) {
if (users[i].email === email) {
return users[i];
}
}
return null;
}
// Find a user by ID
function findUserById(id) {
for (var i = 0; i < users.length; i++) {
if (users[i].id === id) {
return users[i];
}
}
return null;
}
// Authenticate a user
function authenticate(username, password) {
var user = findUserByUsername(username);
if (!user) {
console.log("User not found: " + username);
return false;
}
if (!user.active) {
console.log("User account is disabled: " + username);
user.loginAttempts = user.loginAttempts + 1;
return false;
}
if (user.password === password) {
loggedIn = true;
current_user = user;
user.loginAttempts = 0;
console.log("User authenticated: " + username);
return true;
} else {
user.loginAttempts = user.loginAttempts + 1;
console.log("Invalid password for: " + username);
// Lock account after 3 failed attempts
if (user.loginAttempts >= 3) {
user.active = false;
console.log(
"Account locked due to too many failed attempts: " + username
);
}
return false;
}
}
// Update user profile
function updateProfile(id, new_email, new_password) {
var user = findUserById(id);
if (!user) {
console.log("User not found: " + id);
return false;
}
// Check if user is logged in
if (!loggedIn || current_user.id !== id) {
console.log("Unauthorized profile update attempt");
return false;
}
// Update fields
if (new_email) user.email = new_email;
if (new_password) user.password = new_password;
console.log("Profile updated for: " + user.username);
return true;
}
// Delete user - Admin only
function deleteUser(id) {
// Check if admin
if (!loggedIn || current_user.role !== "admin") {
console.log("Unauthorized deletion attempt");
return false;
}
// Find user index
var index = -1;
for (var i = 0; i < users.length; i++) {
if (users[i].id === id) {
index = i;
break;
}
}
if (index === -1) {
console.log("User not found: " + id);
return false;
}
// Remove user
users.splice(index, 1);
console.log("User deleted: " + id);
return true;
}
// Get all users - Admin only
function getAllUsers() {
// Check if admin
if (!loggedIn || current_user.role !== "admin") {
console.log("Unauthorized request for user list");
return [];
}
return users;
}
// Log out
function logout() {
if (loggedIn) {
current_user = null;
loggedIn = false;
console.log("User logged out");
return true;
}
console.log("No user logged in");
return false;
}
// Test functionality
createUser("admin", "admin123", "admin@example.com", "admin", true);
createUser("john", "password123", "john@example.com", "user", true);
createUser("jane", "secret456", "jane@example.com", "user", true);
authenticate("admin", "admin123");
getAllUsers();
updateProfile(1, "admin@newdomain.com", null);
logout();
authenticate("john", "wrong"); // First attempt
authenticate("john", "wrong"); // Second attempt
authenticate("john", "wrong"); // Third attempt - account locks
authenticate("john", "password123"); // Should fail now
authenticate("admin", "admin123");
deleteUser(3); // Delete jane
getAllUsers(); // Should show admin and john (locked)