T.ME/BIBIL_0DAY
CasperSecurity


Server : Apache/2
System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64
User : gositeme ( 1004)
PHP Version : 8.2.29
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Directory :  /home/gositeme/.cursor-server/data/User/History/d8b65c3/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/.cursor-server/data/User/History/d8b65c3/3Xep.php
<?php
session_start();
header('Content-Type: application/json');

// Check if user is logged in and is admin
if (!isset($_SESSION['user_id']) || !isset($_SESSION['is_admin']) || !$_SESSION['is_admin']) {
    http_response_code(403);
    echo json_encode(['error' => 'Admin access required']);
    exit;
}

require_once 'config/database.php';

$pdo = getDBConnection();

$action = $_GET['action'] ?? $_POST['action'] ?? '';

switch ($action) {
    case 'stats':
        getSystemStats($pdo);
        break;
    case 'audit':
        getAuditTrail($pdo);
        break;
    case 'users':
        getUsers($pdo);
        break;
    case 'login_as_user':
        loginAsUser($pdo);
        break;
    case 'update_user_credits':
        updateUserCredits($pdo);
        break;
    case 'return_to_admin':
        returnToAdmin();
        break;
    default:
        http_response_code(400);
        echo json_encode(['error' => 'Invalid action']);
        break;
}

function getSystemStats($pdo) {
    try {
        // Get total users
        $stmt = $pdo->prepare("SELECT COUNT(*) as total FROM users");
        $stmt->execute();
        $totalUsers = $stmt->fetch()['total'];

        // Get total tracks
        $stmt = $pdo->prepare("SELECT COUNT(*) as total FROM music_tracks");
        $stmt->execute();
        $totalTracks = $stmt->fetch()['total'];

        // Get active users (users with activity in last 7 days)
        $stmt = $pdo->prepare("
            SELECT COUNT(DISTINCT user_id) as total 
            FROM music_tracks 
            WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
        ");
        $stmt->execute();
        $activeUsers = $stmt->fetch()['total'];

        // Get new users this week
        $stmt = $pdo->prepare("
            SELECT COUNT(*) as total 
            FROM users 
            WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
        ");
        $stmt->execute();
        $newUsers = $stmt->fetch()['total'];

        // Get premium users
        $stmt = $pdo->prepare("
            SELECT COUNT(*) as total 
            FROM users 
            WHERE plan IN ('starter', 'pro')
        ");
        $stmt->execute();
        $premiumUsers = $stmt->fetch()['total'];

        // Get track status counts
        $stmt = $pdo->prepare("
            SELECT 
                COUNT(CASE WHEN status = 'complete' THEN 1 END) as completed,
                COUNT(CASE WHEN status = 'processing' THEN 1 END) as processing,
                COUNT(CASE WHEN status = 'failed' THEN 1 END) as failed
            FROM music_tracks
        ");
        $stmt->execute();
        $trackStats = $stmt->fetch();

        // Mock data for demo (replace with real data when available)
        $stats = [
            'totalUsers' => $totalUsers,
            'totalTracks' => $totalTracks,
            'activeUsers' => $activeUsers,
            'systemHealth' => 'Good',
            'newUsers' => $newUsers,
            'premiumUsers' => $premiumUsers,
            'flaggedContent' => 3, // Mock data
            'moderatedTracks' => $trackStats['completed'],
            'errorLogs' => 2, // Mock data
            'apiCalls' => 1567 // Mock data
        ];

        echo json_encode(['success' => true, 'stats' => $stats]);
    } catch (Exception $e) {
        http_response_code(500);
        echo json_encode(['error' => 'Failed to load statistics: ' . $e->getMessage()]);
    }
}

function getAuditTrail($pdo) {
    try {
        $filter = $_GET['filter'] ?? 'all';
        
        // In a real system, you would have an audit_logs table
        // For now, we'll create mock audit data based on existing data
        
        $auditData = [];
        
        // Get recent user activities
        $stmt = $pdo->prepare("
            SELECT 
                mt.id,
                mt.created_at as timestamp,
                u.email as user,
                'Music Generation' as action,
                'content' as category,
                CONCAT('Created track \"', mt.title, '\" using ', COALESCE(mt.model_version, 'V3'), ' model') as details,
                mt.status
            FROM music_tracks mt
            JOIN users u ON mt.user_id = u.id
            ORDER BY mt.created_at DESC
            LIMIT 50
        ");
        $stmt->execute();
        $tracks = $stmt->fetchAll();
        
        foreach ($tracks as $track) {
            $auditData[] = [
                'id' => $track['id'],
                'timestamp' => $track['timestamp'],
                'user' => $track['user'],
                'action' => $track['action'],
                'category' => $track['category'],
                'details' => $track['details'],
                'status' => $track['status'] === 'complete' ? 'success' : ($track['status'] === 'processing' ? 'pending' : 'failed')
            ];
        }
        
        // Add some system events
        $auditData[] = [
            'id' => 'sys_1',
            'timestamp' => date('Y-m-d H:i:s'),
            'user' => 'system',
            'action' => 'API Call',
            'category' => 'system',
            'details' => 'External API request to music generation service',
            'status' => 'success'
        ];
        
        $auditData[] = [
            'id' => 'sec_1',
            'timestamp' => date('Y-m-d H:i:s', strtotime('-1 hour')),
            'user' => $_SESSION['user_email'],
            'action' => 'Admin Login',
            'category' => 'security',
            'details' => 'Successful admin login from IP ' . $_SERVER['REMOTE_ADDR'],
            'status' => 'success'
        ];
        
        // Filter data based on category
        if ($filter !== 'all') {
            $auditData = array_filter($auditData, function($item) use ($filter) {
                return $item['category'] === $filter;
            });
        }
        
        // Sort by timestamp (newest first)
        usort($auditData, function($a, $b) {
            return strtotime($b['timestamp']) - strtotime($a['timestamp']);
        });
        
        echo json_encode(['success' => true, 'audit' => array_values($auditData)]);
    } catch (Exception $e) {
        http_response_code(500);
        echo json_encode(['error' => 'Failed to load audit trail: ' . $e->getMessage()]);
    }
}

function getUsers($pdo) {
    try {
        $filter = $_GET['filter'] ?? 'all';
        
        $sql = "SELECT id, name, email, plan, credits, is_admin, created_at FROM users";
        $params = [];
        
        switch ($filter) {
            case 'admin':
                $sql .= " WHERE is_admin = 1";
                break;
            case 'premium':
                $sql .= " WHERE plan IN ('starter', 'pro')";
                break;
            case 'active':
                $sql .= " WHERE id IN (SELECT DISTINCT user_id FROM music_tracks WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY))";
                break;
            case 'recent':
                $sql .= " WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)";
                break;
        }
        
        $sql .= " ORDER BY created_at DESC";
        
        $stmt = $pdo->prepare($sql);
        $stmt->execute($params);
        $users = $stmt->fetchAll();
        
        echo json_encode(['success' => true, 'users' => $users]);
    } catch (Exception $e) {
        http_response_code(500);
        echo json_encode(['error' => 'Failed to load users: ' . $e->getMessage()]);
    }
}

function loginAsUser($pdo) {
    try {
        $input = json_decode(file_get_contents('php://input'), true);
        $userId = $input['user_id'] ?? null;
        
        if (!$userId) {
            http_response_code(400);
            echo json_encode(['error' => 'User ID required']);
            return;
        }
        
        // Get user data
        $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
        $stmt->execute([$userId]);
        $user = $stmt->fetch();
        
        if (!$user) {
            http_response_code(404);
            echo json_encode(['error' => 'User not found']);
            return;
        }
        
        // Store admin session data for later restoration
        $_SESSION['admin_user_id'] = $_SESSION['user_id'];
        $_SESSION['admin_user_email'] = $_SESSION['user_email'];
        $_SESSION['admin_user_name'] = $_SESSION['user_name'];
        $_SESSION['admin_is_admin'] = $_SESSION['is_admin'];
        
        // Set user session data
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['user_email'] = $user['email'];
        $_SESSION['user_name'] = $user['name'];
        $_SESSION['credits'] = $user['credits'];
        $_SESSION['plan'] = $user['plan'];
        $_SESSION['is_admin'] = $user['is_admin'] ?? false;
        $_SESSION['impersonating'] = true;
        
        echo json_encode(['success' => true, 'message' => 'Logged in as user successfully']);
    } catch (Exception $e) {
        http_response_code(500);
        echo json_encode(['error' => 'Failed to login as user: ' . $e->getMessage()]);
    }
}

function updateUserCredits($pdo) {
    try {
        $input = json_decode(file_get_contents('php://input'), true);
        $userId = $input['user_id'] ?? null;
        $credits = $input['credits'] ?? null;
        
        if (!$userId || $credits === null) {
            http_response_code(400);
            echo json_encode(['error' => 'User ID and credits required']);
            return;
        }
        
        // Use the function from database.php
        $result = updateUserCredits($userId, $credits);
        
        if ($result) {
            echo json_encode(['success' => true, 'message' => 'User credits updated successfully']);
        } else {
            http_response_code(500);
            echo json_encode(['error' => 'Failed to update user credits']);
        }
    } catch (Exception $e) {
        http_response_code(500);
        echo json_encode(['error' => 'Failed to update user credits: ' . $e->getMessage()]);
    }
}

function returnToAdmin() {
    try {
        // Check if we're currently impersonating
        if (!isset($_SESSION['impersonating']) || !$_SESSION['impersonating']) {
            http_response_code(400);
            echo json_encode(['error' => 'Not currently impersonating a user']);
            return;
        }
        
        // Restore admin session data
        $_SESSION['user_id'] = $_SESSION['admin_user_id'];
        $_SESSION['user_email'] = $_SESSION['admin_user_email'];
        $_SESSION['user_name'] = $_SESSION['admin_user_name'];
        $_SESSION['is_admin'] = $_SESSION['admin_is_admin'];
        
        // Clear impersonation data
        unset($_SESSION['impersonating']);
        unset($_SESSION['admin_user_id']);
        unset($_SESSION['admin_user_email']);
        unset($_SESSION['admin_user_name']);
        unset($_SESSION['admin_is_admin']);
        
        echo json_encode(['success' => true, 'message' => 'Returned to admin mode successfully']);
    } catch (Exception $e) {
        http_response_code(500);
        echo json_encode(['error' => 'Failed to return to admin mode: ' . $e->getMessage()]);
    }
}
?> 

CasperSecurity Mini