upskill-event-manager/wordpress-dev/bin/debug-login-issues.sh
bengizmo a82616b6f7 Fix dashboard data inconsistency and enhance test suite with WP API
- Fixed dashboard data class to use consistent post_author queries instead of mixed _EventOrganizerID meta queries
- This resolves the issue where dashboard showed 18 events but 0 tickets/revenue
- Added WordPress API credentials to environment (.env)
- Created comprehensive API debugging utilities (wp-api-debug.sh, wp-api-fix.sh, api-only-debug.sh)
- Enhanced test and deployment suite with WordPress REST API capabilities
- Root cause: get_total_tickets_sold() and get_total_revenue() were using _EventOrganizerID while other methods used post_author

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-22 19:24:18 -03:00

412 lines
No EOL
17 KiB
Bash
Executable file

#!/bin/bash
# Exit on error
set -e
# Source environment variables
if [ -f ".env" ]; then
source .env
else
echo "Error: .env file not found. Please create it with the required variables."
exit 1
fi
echo "===== Comprehensive Login Debug Script ====="
# Step 1: Check if the test_trainer user exists and get their details
echo -e "\n1. Checking test_trainer user details:"
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && wp user get test_trainer --format=json"
# Step 2: Verify user roles and capabilities
echo -e "\n2. Checking user roles and capabilities:"
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && wp user meta get test_trainer wp_capabilities"
# Step 3: Test login authentication directly
echo -e "\n3. Testing authentication directly via wp-cli:"
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && wp eval 'echo \"Authentication result: \" . (wp_authenticate(\"test_trainer\", \"test_password\") instanceof WP_User ? \"Success\" : \"Failed\");'"
# Step 4: Create and execute a PHP diagnostic script for login
echo -e "\n4. Running comprehensive login diagnostic:"
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && cat > login-debug.php << 'EOF'
<?php
// Load WordPress
require_once('wp-load.php');
echo \"===== Login Diagnostics =====\n\";
// Get test_trainer user
\$user = get_user_by('login', 'test_trainer');
if (!\$user) {
echo \"Error: test_trainer user not found\n\";
exit;
}
echo \"User ID: {\$user->ID}\n\";
echo \"Username: {\$user->user_login}\n\";
echo \"User email: {\$user->user_email}\n\";
echo \"User roles: \" . implode(', ', \$user->roles) . \"\n\";
// Check if user has the hvac_trainer role
echo \"Has hvac_trainer role: \" . (in_array('hvac_trainer', \$user->roles) ? 'Yes' : 'No') . \"\n\";
// Check capabilities
echo \"Has view_hvac_dashboard capability: \" . (user_can(\$user->ID, 'view_hvac_dashboard') ? 'Yes' : 'No') . \"\n\";
echo \"Has manage_hvac_events capability: \" . (user_can(\$user->ID, 'manage_hvac_events') ? 'Yes' : 'No') . \"\n\";
// Test password verification directly
\$password = 'test_password'; // Replace with actual test password if different
echo \"Password verification: \" . (wp_check_password(\$password, \$user->user_pass, \$user->ID) ? 'Correct' : 'Incorrect') . \"\n\";
// Test full login
\$creds = array(
'user_login' => 'test_trainer',
'user_password' => \$password,
'remember' => false
);
\$login_result = wp_signon(\$creds, false);
if (is_wp_error(\$login_result)) {
echo \"Login error: {\$login_result->get_error_message()}\n\";
} else {
echo \"Login successful! User ID: {\$login_result->ID}\n\";
}
// Check for active plugins that might interfere with login
echo \"\nActive plugins that might affect login:\n\";
\$login_related_plugins = array('breeze', 'wp-super-cache', 'w3-total-cache', 'wordfence', 'better-wp-security', 'all-in-one-wp-security');
\$active_plugins = get_option('active_plugins');
\$found = false;
foreach (\$active_plugins as \$plugin) {
foreach (\$login_related_plugins as \$related) {
if (strpos(\$plugin, \$related) !== false) {
echo \"- {\$plugin}\n\";
\$found = true;
}
}
}
if (!\$found) {
echo \"No known login-affecting plugins detected\n\";
}
// Check user session tokens
\$tokens = get_user_meta(\$user->ID, 'session_tokens', true);
echo \"\nUser has \" . (empty(\$tokens) ? 'no' : count(\$tokens)) . \" active session tokens\n\";
// Check cookie settings
echo \"\nCookie settings:\n\";
echo \"COOKIEPATH: \" . (defined('COOKIEPATH') ? COOKIEPATH : 'Not defined') . \"\n\";
echo \"COOKIE_DOMAIN: \" . (defined('COOKIE_DOMAIN') ? COOKIE_DOMAIN : 'Not defined') . \"\n\";
echo \"SITECOOKIEPATH: \" . (defined('SITECOOKIEPATH') ? SITECOOKIEPATH : 'Not defined') . \"\n\";
echo \"ADMIN_COOKIE_PATH: \" . (defined('ADMIN_COOKIE_PATH') ? ADMIN_COOKIE_PATH : 'Not defined') . \"\n\";
echo \"SECURE_AUTH_COOKIE: \" . (defined('SECURE_AUTH_COOKIE') ? SECURE_AUTH_COOKIE : 'Not defined') . \"\n\";
echo \"AUTH_COOKIE: \" . (defined('AUTH_COOKIE') ? AUTH_COOKIE : 'Not defined') . \"\n\";
echo \"LOGGED_IN_COOKIE: \" . (defined('LOGGED_IN_COOKIE') ? LOGGED_IN_COOKIE : 'Not defined') . \"\n\";
// Check login hooks
echo \"\nLogin hooks:\n\";
global \$wp_filter;
\$login_hooks = array('wp_login', 'login_redirect', 'login_form_login', 'login_init', 'wp_login_failed');
foreach (\$login_hooks as \$hook) {
if (isset(\$wp_filter[\$hook])) {
echo \"{\$hook} has \" . count(\$wp_filter[\$hook]) . \" callbacks\n\";
foreach (\$wp_filter[\$hook]->callbacks as \$priority => \$callbacks) {
foreach (\$callbacks as \$id => \$callback) {
\$callback_name = '';
if (is_array(\$callback['function'])) {
if (is_object(\$callback['function'][0])) {
\$callback_name = get_class(\$callback['function'][0]) . '::' . \$callback['function'][1];
} else {
\$callback_name = \$callback['function'][0] . '::' . \$callback['function'][1];
}
} else if (is_string(\$callback['function'])) {
\$callback_name = \$callback['function'];
} else {
\$callback_name = 'Anonymous function';
}
echo \" - Priority {\$priority}: {\$callback_name}\n\";
}
}
} else {
echo \"{\$hook} has no callbacks\n\";
}
}
// Check Breeze settings if active
if (in_array('breeze/breeze.php', \$active_plugins)) {
echo \"\nBreeze cache settings:\n\";
\$breeze_settings = get_option('breeze_options');
if (\$breeze_settings) {
echo \"Cache enabled: \" . (\$breeze_settings['cache_system'] ? 'Yes' : 'No') . \"\n\";
echo \"Browser cache: \" . (\$breeze_settings['browser_cache'] ? 'Yes' : 'No') . \"\n\";
echo \"Mobile cache: \" . (\$breeze_settings['mobile_cache'] ? 'Yes' : 'No') . \"\n\";
echo \"Disable cache for logged-in users: \" . (\$breeze_settings['logged-in'] ? 'Yes' : 'No') . \"\n\";
// Check if there are cache exceptions
if (isset(\$breeze_settings['no_cache_pages']) && !empty(\$breeze_settings['no_cache_pages'])) {
echo \"Pages excluded from cache: \" . \$breeze_settings['no_cache_pages'] . \"\n\";
} else {
echo \"No pages are excluded from cache\n\";
}
} else {
echo \"No Breeze settings found\n\";
}
}
echo \"\n===== End of Login Diagnostics =====\n\";
EOF"
# Execute the PHP diagnostic script
echo -e "\nExecuting login diagnostic script:"
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && php login-debug.php"
# Step 5: Clean up
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && rm login-debug.php"
# Step 6: Create a fix script for common login issues
echo -e "\n5. Creating a login fix script:"
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && cat > fix-login-issues.php << 'EOF'
<?php
// Load WordPress
require_once('wp-load.php');
echo \"===== Applying Login Fixes =====\n\";
// 1. Re-enable login failure handler in the Login_Handler class
echo \"1. Checking for disabled login failure handler...\n\";
\$login_handler_path = WP_CONTENT_DIR . '/plugins/hvac-community-events/includes/community/class-login-handler.php';
\$login_handler_content = file_get_contents(\$login_handler_path);
if (strpos(\$login_handler_content, '// add_action(\'wp_login_failed\'') !== false) {
// The login failure handler is commented out, let's uncomment it
\$updated_content = str_replace(
'// add_action(\'wp_login_failed\', array($this, \'handle_login_failure\'));',
'add_action(\'wp_login_failed\', array($this, \'handle_login_failure\'));',
\$login_handler_content
);
if (file_put_contents(\$login_handler_path, \$updated_content)) {
echo \"✅ Login failure handler re-enabled\n\";
} else {
echo \"❌ Failed to update login handler file\n\";
}
} else {
echo \"✅ Login failure handler is already enabled\n\";
}
// 2. Create mu-plugin to disable Breeze cache for login-related pages
echo \"2. Creating mu-plugin to disable Breeze cache for login pages...\n\";
\$mu_plugins_dir = WP_CONTENT_DIR . '/mu-plugins';
if (!is_dir(\$mu_plugins_dir)) {
mkdir(\$mu_plugins_dir);
}
\$disable_cache_path = \$mu_plugins_dir . '/hvac-disable-cache-for-login.php';
\$disable_cache_content = <<<'EOT'
<?php
/**
* Plugin Name: HVAC - Disable Cache for Login Pages
* Description: Disables caching for login-related pages to prevent authentication issues
* Version: 1.0.0
* Author: HVAC Community Events
*/
// Disable caching for login-related pages
function hvac_disable_cache_for_login() {
// List of pages to disable cache for
$no_cache_pages = [
'community-login',
'wp-login.php',
'hvac-dashboard'
];
// Check if we're on a login-related page
$current_page = basename($_SERVER['REQUEST_URI']);
$is_login_page = false;
foreach ($no_cache_pages as $page) {
if (strpos($current_page, $page) !== false) {
$is_login_page = true;
break;
}
}
// Also check for login parameter
if (isset($_GET['login']) || isset($_POST['log'])) {
$is_login_page = true;
}
if ($is_login_page) {
// Disable caching
if (!defined('DONOTCACHEPAGE')) {
define('DONOTCACHEPAGE', true);
}
// Set no-cache headers
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Expires: Mon, 07 Jul 1997 05:00:00 GMT');
}
}
add_action('init', 'hvac_disable_cache_for_login', 1);
// Disable Breeze specific caching for login pages
function hvac_disable_breeze_cache() {
// Add login pages to Breeze no-cache list
if (class_exists('Breeze_Options_Reader') && method_exists('Breeze_Options_Reader', 'get_option_value')) {
$breeze_settings = Breeze_Options_Reader::get_option_value('basic_settings');
if (is_array($breeze_settings)) {
$no_cache_pages = isset($breeze_settings['no-cache-pages']) ? $breeze_settings['no-cache-pages'] : '';
$login_urls = '/community-login/, /wp-login.php, /hvac-dashboard/';
if (strpos($no_cache_pages, '/community-login/') === false) {
// Add our login URLs to no-cache list
$breeze_settings['no-cache-pages'] = $no_cache_pages . ($no_cache_pages ? ', ' : '') . $login_urls;
// Update the settings
$breeze_options = get_option('breeze_basic_settings');
if (is_array($breeze_options)) {
$breeze_options = array_merge($breeze_options, $breeze_settings);
update_option('breeze_basic_settings', $breeze_options);
}
}
}
}
}
add_action('plugins_loaded', 'hvac_disable_breeze_cache');
// Force disable cache for logged-in users if Breeze is active
function hvac_modify_breeze_user_cache() {
if (is_user_logged_in() && class_exists('Breeze_Options_Reader') && method_exists('Breeze_Options_Reader', 'get_option_value')) {
$advanced_settings = Breeze_Options_Reader::get_option_value('advanced_settings');
if (is_array($advanced_settings) && isset($advanced_settings['breeze-disable-admin'])) {
$advanced_settings['breeze-disable-admin'] = '1';
// Update the settings
$breeze_options = get_option('breeze_advanced_settings');
if (is_array($breeze_options)) {
$breeze_options = array_merge($breeze_options, $advanced_settings);
update_option('breeze_advanced_settings', $breeze_options);
}
}
}
}
add_action('wp_login', 'hvac_modify_breeze_user_cache');
EOT;
if (file_put_contents(\$disable_cache_path, \$disable_cache_content)) {
echo \"✅ Created mu-plugin to disable cache for login pages\n\";
} else {
echo \"❌ Failed to create mu-plugin\n\";
}
// 3. Reset user capability for test_trainer
echo \"3. Verifying and fixing test_trainer capabilities...\n\";
\$user = get_user_by('login', 'test_trainer');
if (\$user) {
// Make sure the user has the hvac_trainer role
if (!in_array('hvac_trainer', \$user->roles)) {
\$user->add_role('hvac_trainer');
echo \"✅ Added hvac_trainer role to test_trainer user\n\";
} else {
echo \"✅ test_trainer already has hvac_trainer role\n\";
}
// Make sure the user has the view_hvac_dashboard capability
if (!user_can(\$user->ID, 'view_hvac_dashboard')) {
\$user_meta = get_user_meta(\$user->ID, 'wp_capabilities', true);
if (is_array(\$user_meta)) {
\$user_meta['view_hvac_dashboard'] = true;
update_user_meta(\$user->ID, 'wp_capabilities', \$user_meta);
echo \"✅ Added view_hvac_dashboard capability to test_trainer\n\";
}
} else {
echo \"✅ test_trainer already has view_hvac_dashboard capability\n\";
}
// Clear user sessions
\$sessions = WP_Session_Tokens::get_instance(\$user->ID);
\$sessions->destroy_all();
echo \"✅ Cleared all sessions for test_trainer\n\";
} else {
echo \"❌ test_trainer user not found\n\";
}
// 4. Make sure admin role has dashboard access
echo \"4. Ensuring administrator role has dashboard access...\n\";
\$admin_role = get_role('administrator');
if (\$admin_role) {
\$admin_role->add_cap('view_hvac_dashboard');
\$admin_role->add_cap('manage_hvac_events');
echo \"✅ Added dashboard capabilities to administrator role\n\";
}
// 5. Fix login template if needed
echo \"5. Verifying login template...\n\";
\$login_template_path = WP_CONTENT_DIR . '/plugins/hvac-community-events/templates/community/login-form.php';
\$login_template_content = file_get_contents(\$login_template_path);
// Add debug parameter to help troubleshoot login issues
if (strpos(\$login_template_content, 'login_debug') === false) {
// Find the wp_login_form line
\$updated_template = str_replace(
'wp_login_form( $args );',
'echo "<input type=\"hidden\" name=\"login_debug\" value=\"1\" />";' . PHP_EOL . 'wp_login_form( $args );',
\$login_template_content
);
if (file_put_contents(\$login_template_path, \$updated_template)) {
echo \"✅ Added debug parameter to login form\n\";
} else {
echo \"❌ Failed to update login template\n\";
}
} else {
echo \"✅ Login template already has debug parameter\n\";
}
// 6. Clear Breeze cache
echo \"6. Clearing Breeze cache...\n\";
if (function_exists('breeze_cache_flush')) {
breeze_cache_flush();
echo \"✅ Breeze cache cleared via function\n\";
} else {
echo \"❓ breeze_cache_flush function not available, trying manual cleanup\n\";
// Try manual cache clearing
\$cache_dirs = array(
WP_CONTENT_DIR . '/cache/breeze',
WP_CONTENT_DIR . '/uploads/breeze/css',
WP_CONTENT_DIR . '/uploads/breeze/js'
);
foreach (\$cache_dirs as \$dir) {
if (is_dir(\$dir)) {
array_map('unlink', glob(\$dir . '/*.*'));
echo \"✅ Cleared cache in {\$dir}\n\";
}
}
}
echo \"===== Login Fixes Applied =====\n\";
echo \"Please try logging in again with test_trainer user after these fixes.\n\";
EOF"
# Execute the login fix script
echo -e "\nExecuting login fix script:"
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && php fix-login-issues.php"
# Step 7: Clean up
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && rm fix-login-issues.php"
echo -e "\n===== Login Debug Complete ====="
echo "Fix applied: Re-enabled login failure handler"
echo "Fix applied: Created mu-plugin to disable caching for login pages"
echo "Fix applied: Reset test_trainer capabilities and sessions"
echo "Fix applied: Added dashboard access for administrator role"
echo "Fix applied: Added debug parameter to login form"
echo "Fix applied: Cleared Breeze cache"
echo -e "\nPlease try logging in again with test_trainer user.\n"